{"version":3,"sources":["i18n.js","constants.js","utilities.js","components/Oops.js","components/ErrorBoundary.js","errors.js","theme.js","api/mockApiData.js","api/mockApiAdapter.js","api/api.js","authentication.js","components/LastUpdated.js","components/About.js","data.js","components/contentWithDrawer.js","propTypes.js","components/NoUiSlider.js","components/PeriodSelector/PeriodSelector.js","components/ProgressButton.js","components/CompareRuns/CompareRunsDrawerContent.js","components/Charts/ChartsChartList.js","components/Charts/ChartSetSelector.js","components/Charts/ChartsMaritalStatusSelector.js","components/MeasureSelector.js","components/Charts/ChartsExporter.js","components/Charts/ChartsComparisonLegend.js","components/Charts/ChartsMarker.js","components/Charts/ChartsSurveyMarker.js","components/Charts/ChartsConfidenceIntervalChart.js","components/MaritalStatusSelector.js","components/Charts/ChartsSurveyLegend.js","components/Charts/Charts.js","components/NavigationTab.js","components/Results/ResultsIndicatorSelector.js","components/Results/ResultsExporter.js","components/Results/ResultsTable.js","components/Results/Results.js","components/Title.js","components/CompareRuns/CompareRunsMainContent.js","components/CompareRuns/CompareRuns.js","containers/CompareRunsContainer.js","components/LanguageChooser/EnIcon.js","components/LanguageChooser/FrIcon.js","components/LanguageChooser/LanguageChooser.js","components/ManageData/ManageDataItems.js","components/ManageData/ManageDataDatabases.js","components/Loading.js","components/ManageData/ManageDataRuns.js","components/ManageData/ManageData.js","containers/ManageDataContainer.js","components/PrepareData/PrepareDataCountrySelector.js","components/PrepareData/PrepareDataSaver.js","components/PrepareData/PrepareDataEmuData.js","components/Notification.js","components/BooleanCellRenderer.js","components/PrepareData/PrepareDataPopulationData.js","components/PrepareData/PrepareDataSurveyData.js","components/PrepareData/PrepareData.js","containers/PrepareDataContainer.js","components/RunHistory.js","containers/RunHistoryContainer.js","components/StartRun/StartRunDatabaseUploader.js","components/StartRun/StartRunDatabasePicker.js","components/StartRun/StartRunDrawerContent.js","components/EmuData.js","components/PopulationData.js","components/SurveyData.js","components/StartRun/StartRunMainContent.js","components/StartRun/StartRun.js","containers/StartRunContainer.js","components/ViewRun/ViewRunDrawerContent.js","components/SentenceMaritalStatusSelector.js","components/Progress/ProgressContraceptionMethodSpecification.js","components/Progress/ProgressIndicatorSpecification.js","components/Progress/Progress.js","containers/ProgressContainer.js","components/Targets/TargetsIndicatorLevelSpecification.js","components/Targets/TargetsIndicatorProbabilitySpecification.js","components/Targets/TargetsPopulationLevelSpecification.js","components/Targets/TargetsPopulationProbabilitySpecification.js","components/Targets/Targets.js","containers/TargetsContainer.js","components/ViewRun/ViewRunMainContent.js","components/ViewRun/ViewRun.js","containers/ViewRunContainer.js","components/App.js","containers/AppContainer.js","components/Login.js","containers/LoginContainer.js","components/PrivateRoute.js","Root.js","index.js"],"names":["resources","en","translation","fr","i18n","use","LanguageDetector","initReactI18next","init","fallbackLng","keySeparator","nsSeparator","interpolation","escapeValue","translateGridText","key","defaultValue","i18next","t","concat","chartSets","value","label","contraceptiveMethods","indicators","description","chart","parseNumber","normalizedValue","match","length","replace","parseFloat","createGuid","c","crypto","getRandomValues","Uint8Array","toString","createSlug","name","suffix","separator","arguments","undefined","formatLogicalCell","formatNumericCell","decimalPlaces","number","isNaN","toFixed","formatPercentage","getCurrentYear","Date","getFullYear","parseIntegerCell","params","minimumInclusiveValue","maximumInclusiveValue","newValue","parseInt","oldValue","trimToRange","parseNullableAlphaCell","Number","MAX_VALUE","trim","parseNullableNumericCell","parseNumericCell","toggleSetExistence","set","has","delete","add","trimYearToRange","year","enforceRange","inclusiveMinimum","inclusiveMaximum","Math","min","max","withTranslation","withStyles","theme","message","display","alignItems","icon","width","height","color","palette","error","dark","text","marginLeft","_ref","classes","react_default","a","createElement","className","Error_default","dangerouslySetInnerHTML","__html","ErrorBoundary","props","_this","Object","classCallCheck","this","possibleConstructorReturn","getPrototypeOf","call","state","errorInfo","eventId","console","log","setState","Sentry","scope","setExtra","components_Oops","details","errorContentItem","componentStack","children","Component","marginTop","whiteSpace","margin","withErrorBoundary","components_ErrorBoundary","createMuiTheme","background","default","primary","main","blue","typography","useNextVariants","divisions","numericCode","alphaCode","isCountry","indicatorPopulationResults","isInUnion","ageRange","mean","percentile2pt5","percentile5","percentile10","median","percentile90","percentile95","percentile97pt5","indicatorProportionalResults","populationResults","mockApiData_ref","apply","toConsumableArray","filter","indicator","map","datum","objectSpread","proportionalResults","mockApiData_ref2","databases","id","type","isGlobal","isDefault","isInUse","division","regionCodes","emuData","divisionNumericCode","startYear","endYear","emu","serviceStatisticType","populationData","midYear","population","results","proportions","populations","runs","surveyDatabaseId","populationDatabaseId","countryNumericCodes","period","firstYear","lastYear","startedAt","completed","emuDatabaseId","surveyData","startDate","endDate","dataSeriesType","groupTypeRelativeToBaseline","contraceptiveUseModern","contraceptiveUseTraditional","contraceptiveUseAny","ratioModernAll","unmetNeedModern","unmetNeedAny","demand","demandModern","demandSatisfied","demandSatisfiedModern","nonUse","isPertainingToMethodsUsedSinceLastPregnancy","pertainingToMethodsUsedSinceLastPregnancyReason","hasGeographicalRegionBias","geographicalRegionBiasReason","hasNonPregnantAndOtherPositiveBiases","nonPregnantAndOtherPositiveBiasesReason","ageGroupBias","modernMethodBias","hasTraditionalMethodBias","traditionalMethodBiasReason","hasAbsenceOfProbingQuestionsBias","seModern","seTraditional","seUnmetNeed","seLogRModernNoUse","seLogRTraditionalNoUse","seLogRUnmetNoNeed","sourceId","recordId","lowerContraceptiveUseAny","estimatedContraceptiveUseAny","upperContraceptiveUseAny","extractUrlPathComponent","url","index","split","extractUrlPathComponents","slice","getQueryString","MockApiAdapter","webService","delayResponse","onGet","reply","systemOperational","level","onPost","token","onDelete","testDatabases","config","data","_queryString$parse","queryString","includePendingRuns","includePending","includeFailedRuns","includeFailed","testRuns","run","failed","divisionNumericCodeOrRegion","testSurveyData","regionCode","testPopulationData","testEmuData","testResults","comparisonRunId","comparisonRun","comparisonMean","comparisonPercentile2pt5","comparisonPercentile5","comparisonPercentile10","comparisonMedian","comparisonPercentile90","comparisonPercentile95","comparisonPercentile97pt5","JSON","parse","indicatorProbability","indicatorProbabilityParameters","indicatorLevel","indicatorLevelParameters","populationProbability","populationProbabilityParameters","populationLevel","populationLevelParameters","indicatorProgress","indicatorProgressParameters","contraceptiveMethodProgress","contraceptiveMethodProgressParameters","_JSON$parse","database","objectWithoutProperties","MockAdapter","getSession","localStorage","getItem","username","deleteSession","removeItem","createHeaders","FPET-Auth","FPET-Language","language","axios","create","baseURL","process","interceptors","response","status","window","location","href","Promise","reject","search","includes","fetch","cancellationToken","get","headers","catch","isCancel","createUrl","path","query","appendSessionToken","getSignal","CancelToken","source","login","password","post","then","setItem","stringify","createSession","fetchDatabases","uploadDatabase","onProgress","onUploadProgress","startRun","runName","countryNumericCode","region","fetchRuns","fetchSurveyDatabase","databaseId","runId","fetchPopulationDatabase","fetchEmuDatabase","fetchResults","createResultsDownloadUrl","countryNumericCodeOrRegion","measures","measure","join","downloadResults","downloadData","responseType","fetchChartSets","createChartSetDownloadUrl","chartSet","maritalStatus","downloadChartSet","createChartsDownloadUrl","downloadCharts","calculateTargets","parameters","calculateProgress","fetchRunLog","createRunLogDownloadUrl","saveDatabase","downloadDatabases","databaseIds","createDatabasesDownloadUrl","deleteDatabases","deleteRuns","runIds","authentication","getUsername","callback","api","logout","_this2","styles","container","fontSize","style","react_markdown_default","components_LastUpdated","toNullable","normalizeDatabases","reduce","result","rest","regions","normalizeSurveyData","ratioModernAny","normalizePopulationData","normalizeEmuData","normalizeRuns","createdAt","normalizeResults","item","normalizeChartSets","filterSurveyData","filterPopulationData","getPeriod","years","filterResults","keys","convertMaritalStatusToIsInUnion","createDefaultSurveyDatum","currentYear","include","createDefaultPopulationDatum","createDefaultEmuDatum","synchonizeContraceptivePrevalence","updatedField","drawerPaper","padding","mainContent","toolbar","mixins","contentWithDrawer","MainContent","DrawerContent","Drawer_default","variant","anchor","docked","drawer","paper","indicatorResultPropType","PropTypes","isRequired","comparatorMean","comparatorPercentile2pt5","comparatorPercentile5","comparatorPercentile10","comparatorMedian","comparatorPercentile90","comparatorPercentile95","comparatorPercentile97pt5","lowerContraceptiveUseModern","estimatedContraceptiveUseModern","upperContraceptiveUseModern","lowerContraceptiveUseTraditional","estimatedContraceptiveUseTraditional","upperContraceptiveUseTraditional","lowerUnmetNeedAny","estimatedUnmetNeedAny","upperUnmetNeedAny","NoUiSlider","createSlider","slider","nouislider","sliderContainer","range","start","connect","pips","step","tooltips","format","behaviour","on","onChange","_this$slider$get","_this$slider$get2","slicedToArray","lower","upper","destroy","ref","element","PeriodSelector","components_NoUiSlider","minimumYear","maximumYear","mode","values","density","wNumb","decimals","defaultProps","ProgressButton","classNames","Button_default","disabled","loading","button","buttonClassName","onClick","CircularProgress_default","size","progress","position","top","left","CompareRunsDrawerContent","entries","_ref2","_ref3","countries","_ref4","_ref5","country","sort","b","localeCompare","selectedRegion","find","selectedRegionValue","countriesAndRegions","Fragment","loadingData","LinearProgress_default","instruction","stepNumber","react_select_esm","placeholder","options","_ref6","selectedRunId","select","_ref7","onSelectRun","_ref8","selectedComparisonRunId","_ref9","onSelectComparisonRun","countrySelector","Divider_default","divider","_ref10","selectedCountryNumericCode","_ref11","onSelectCountry","onSelectRegion","components_ProgressButton","loadingRuns","actionButton","onCompareRuns","periodSelector","components_PeriodSelector_PeriodSelector","onChangePeriod","fontWeight","zIndex","marginBottom","chartRow","flexWrap","heading","FormControl_default","InputLabel_default","htmlFor","shrink","NativeSelect_default","input","Input_default","e","target","ChartsMaritalStatusSelector","MeasureSelector","marginRight","buttonGroup","leftSelector","selectors","title","Typography_default","Charts_ChartSetSelector","selectedChartSet","onChangeChartSet","components_MeasureSelector","selectedMeasure","onChangeMeasure","Charts_ChartsMaritalStatusSelector","selectedMaritalStatus","onChangeMaritalStatus","disableChartSetDownload","onDownloadChartSet","disableSelectedChartsDownload","onDownloadSelectedCharts","comparisonRunName","backgroundColor","borderBottom","markerDimensions","markerSize","scaleFactor","triangleX","triangleY","circle","square","triangle","invertedTriangle","calculateMarkerDimensions","ChartsMarker","labelVerticalOffset","shape","fillColor","strokeColor","x","y","fill","stroke","strokeWidth","points","cx","cy","r","createEnclosureComponent","dy","textAnchor","alignmentBaseline","textColor","getShape","getColor","getLabel","ChartsSurveyMarker","Charts_ChartsMarker","ChartsConfidenceIntervalChart","getErrors","surveys","survey","estimate","push","formatCrosshairValue","floor","onNearestX","crosshairValues","onMouseLeave","demandLabel","indicatorErrors","Tooltip_default","react_vis_es","right","bottom","xDomain","tickFormat","v","tickSizeInner","line","y0","opacity","comparison","strokeStyle","customComponent","Charts_ChartsSurveyMarker","sizeRange","yVariance","crosshair","table","textAlign","MaritalStatusSelector","createCircle","radius","createTriangle","inverted","transform","gridTemplateColumns","gridAutoRows","gridRowGap","section","subpopulation","Paper_default","Charts","gridSelectors","measureSelector","components_MaritalStatusSelector","FormGroup_default","row","FormControlLabel_default","control","Checkbox_default","checked","selectedChartsIndicators","checkbox","onToggleChart","showSurveyLegend","onToggleSurveyLegend","comparisonLegend","Charts_ChartsComparisonLegend","Charts_ChartsChartList","charts","indicatorResults","Charts_ChartsConfidenceIntervalChart","surveyLegend","Charts_ChartsSurveyLegend","noData","indicatorPaper","Charts_ChartsExporter","selectedExportedChartSet","selectedExportedMeasure","selectedExportedMaritalStatus","onChangeExportedChartSet","onChangeExportedMeasure","onChangeExportedMaritalStatus","active","react_router_tabs","assign","activeClassName","ResultsExporter","subtitle","selectedMeasures","onToggleMeasure","selectedIndicators","onToggleIndicator","disableSelectedResultsDownload","onDownloadSelectedResults","disableAllResultsDownload","onDownloadAllResults","disableAllDataDownload","onDownloadAllData","getFormatter","formatPercentageCell","ResultsTable","estimateFormatter","columnDefinitions","headerName","field","valueFormatter","getColumnDefinitionsForSingleRun","ag_grid_react_main","columnDefs","domLayout","defaultColDef","sortable","pagination","paginationPageSize","suppressColumnVirtualisation","suppressCellSelection","overlayNoRowsTemplate","localeTextFunc","rowData","onGridReady","columnApi","autoSizeColumns","getAllColumns","column","colId","Results","ResultsIndicatorSelector","selectedIndicator","onChangeIndicator","Results_ResultsTable","Results_ResultsExporter","selectedExportedMeasures","selectedExportedIndicators","onToggleExportedMeasure","onToggleExportedIndicator","CompareRunsMainContent","components_Title","runsTitle","components_NavigationTab","to","tabPage","react_router","exact","render","components_Results_Results","selectedResultsMeasure","selectedResultsIndicator","selectedResultsMaritalStatus","tableResults","selectedExportedResultsMeasures","selectedExportedResultsIndicators","onChangeResultsMeasure","onChangeResultsIndicator","onChangeResultsMaritalStatus","onToggleExportedResultsMeasure","onToggleExportedResultsIndicator","components_Charts_Charts","selectedRunName","selectedComparisonRunName","selectedChartsMeasure","selectedChartsMaritalStatus","chartResults","chartSurveyData","chartEmuData","selectedExportedChartsMeasure","selectedExportedChartsMaritalStatus","onChangeChartsMeasure","onChangeChartsMaritalStatus","onChangeExportedChartsMeasure","onChangeExportedChartsMaritalStatus","CompareRuns","createInitialState","Set","CompareRunsContainer","setStateSafely","unmounting","getCountries","getRegions","runRegions","comparisonRunRegions","selectDefaultCountryOrRegion","getSelectedCountryNumericCodeOrRegion","createRunTitle","countryAlphaCodeOrRegion","selectedRun","selectedComparisonRun","_this$state$period","updateRun","runIdProperty","defineProperty","getMeasureResultsForPeriod","measureKey","getTableResults","measureResultsForPeriod","getChartSurveyData","_this$state$period2","getChartResults","all","signal","resolve","some","_response","runSurveyData","comparisonRunSurveyData","runEmuData","comparisonRunEmuData","finally","martialStatus","Array","from","prefix","fileDownload","_response2","cancel","CompareRuns_CompareRuns","EnIcon","SvgIcon_default","viewBox","d","FrIcon","IconButton_default","root","onChangeLanguage","LanguageChooser_EnIcon","LanguageChooser_FrIcon","checkBox","List_default","items","ListItem_default","dense","selectedItemValues","onToggleItem","ListItemText_default","toLocaleDateString","ManageDataDatabases","ManageData_ManageDataItems","selectedDatabaseIds","onToggleDatabase","onDownloadDatabases","onDeleteDatabases","footnotes","Loading","spacing","unit","ManageDataRuns","selectedRunIds","onToggleRun","onDeleteRuns","ManageData","components_Loading","ManageData_ManageDataDatabases","ManageData_ManageDataRuns","ManageDataContainer","components_ManageData_ManageData","PrepareDataCountrySelector","selectorGroup","selectedDatabaseId","onSelectDatabase","onLoadData","PrepareDataSaver","TextField_default","InputLabelProps","fullWidth","onChangeName","saveDisabled","onSave","propType","PrepareDataEmuData","gridApi","onSelectionChanged","rowSelected","getSelectedRows","onAddNewItem","newRowData","updateRowData","ensureIndexVisible","childIndex","onDeleteItem","selectedItemIds","PrepareData_PrepareDataCountrySelector","onLoadCountryData","editable","rowSelection","suppressScrollOnNewData","onCellValueChanged","onEditItem","valueParser","cellEditor","cellEditorParams","onClearData","PrepareData_PrepareDataSaver","newDatabaseName","regionData","regionNumericCode","regionAlphaCode","regionName","onChangeDatabaseName","regionEditor","variantIcon","success","CheckCircleIcon","warning","WarningIcon","ErrorIcon","information","InfoIcon","Notification","Icon","Snackbar_default","anchorOrigin","vertical","horizontal","open","autoHideDuration","autoHideDurationMilliseconds","onClose","SnackbarContent_default","iconVariant","action","aria-label","Close_default","aria-describedby","green","amber","BooleanCellRenderer","PrepareDataPopulationData","frameworkComponents","booleanCellRenderer","cellRenderer","PrepareDataSurveyData","refreshCells","colDef","node","headerTooltip","getDatabases","compareDatabases","normalizeCountries","PrepareData","surveyDatabases","surveyDatabaseCountries","populationDatabases","populationDatabaseCountries","emuDatabases","emuDatabaseCountries","useTranslation","PrepareData_PrepareDataSurveyData","selectedSurveyDatabaseId","selectedSurveyDataCountryNumericCode","surveyRegionData","surveyRegionNumericCode","surveyRegionAlphaCode","surveyRegionName","newSurveyDatabaseName","onSelectSurveyDatabase","onSelectSurveyDataCountry","onLoadCountrySurveyData","onAddNewSurveyItem","onEditSurveyItem","onDeleteSurveyItem","onClearSurveyData","onToggleRegionData","onToggleSurveyRegionData","onChangeRegionNumericCode","onChangeSurveyRegionNumericCode","onChangeRegionAlphaCode","onChangeSurveyRegionAlphaCode","onChangeRegionName","onChangeSurveyRegionName","onChangeSurveyDatabaseName","onSaveSurveyDatabase","PrepareData_PrepareDataPopulationData","selectedPopulationDatabaseId","selectedPopulationDataCountryNumericCode","populationRegionData","populationRegionNumericCode","populationRegionAlphaCode","populationRegionName","newPopulationDatabaseName","onSelectPopulationDatabase","onSelectPopulationDataCountry","onLoadCountryPopulationData","onAddNewPopulationItem","onEditPopulationItem","onDeletePopulationItem","onClearPopulationData","onTogglePopulationRegionData","onChangePopulationRegionNumericCode","onChangePopulationRegionAlphaCode","onChangePopulationRegionName","onChangePopulationDatabaseName","onSavePopulationDatabase","PrepareData_PrepareDataEmuData","selectedEmuDatabaseId","selectedEmuDataCountryNumericCode","emuRegionData","emuRegionNumericCode","emuRegionAlphaCode","emuRegionName","newEmuDatabaseName","onSelectEmuDatabase","onSelectEmuDataCountry","onLoadCountryEmuData","onAddNewEmuItem","onEditEmuItem","onDeleteEmuItem","onClearEmuData","onToggleEmuRegionData","onChangeEmuRegionNumericCode","onChangeEmuRegionAlphaCode","onChangeEmuRegionName","onChangeEmuDatabaseName","onSaveEmuDatabase","components_Notification","notificationVariant","notificationOpen","notificationMessage","onCloseNotification","findDefaultDatabaseId","_i","_Object$keys","_databases$databaseId","divisionKey","findIndex","indexOf","PrepareDataContainer","createDatabasePayload","createDatabase","databasePayload","exclude","itemId","databaseName","defaultCountries","components_PrepareData_PrepareData","RunHistory","note","Table_default","TableHead_default","TableRow_default","TableCell_default","TableBody_default","react_router_dom","day","month","hour","minute","seconds","HourglassFull_default","succeeded","HourglassEmpty_default","onDownloadRunLog","Info_default","getNewlyCompletedRunIds","previousRuns","currentRuns","previouslyCompletedRunIds","RunHistoryContainer","refreshing","newlyCompletedRunIds","notification","runCount","runsHash","refreshTimer","setTimeout","clearTimeout","components_RunHistory","StartRunDatabaseUploader","accept","fileInput","files","component","uploadingDatabase","onUpload","additionalButton","onCancelUpload","databaseUploadProgress","externalDatabasePath","inputLabel","StartRunDatabasePicker","getDatabaseTypeSpecificComponents","databaseType","defaultDatabases","noOptionsMessage","customDatabases","StartRun_StartRunDatabaseUploader","uploadedDatabaseName","onSelectDatabaseFile","onUploadDatabase","onCancelDatabaseUpload","RadioGroup_default","_","onChangeDatabaseType","Radio_default","radio","dataTypeSpecificComponents","StartRunDrawerContent","_groupDatabases","denormalizedDatabases","customSurveyDatabases","customPopulationDatabases","customEmuDatabases","groupDatabases","StartRun_StartRunDatabasePicker","surveyDatabaseType","uploadedSurveyDatabaseName","surveyDatabaseUploadProgress","uploadingSurveyDatabase","onChangeSurveyDatabaseType","onSelectSurveyDatabaseFile","onUploadSurveyDatabase","onCancelSurveyDatabaseUpload","populationDatabaseType","uploadedPopulationDatabaseName","populationDatabaseUploadProgress","uploadingPopulationDatabase","onChangePopulationDatabaseType","onSelectPopulationDatabaseFile","onUploadPopulationDatabase","onCancelPopulationDatabaseUpload","emuDatabaseType","uploadedEmuDatabaseName","emuDatabaseUploadProgress","uploadingEmuDatabase","onChangeEmuDatabaseType","onSelectEmuDatabaseFile","onUploadEmuDatabase","onCancelEmuDatabaseUpload","required","drawerItem","onRunNameChanged","periodSelectorGroup","periodSelectorLabel","loadingTables","onReviewData","onStartRun","minHeight","flexShrink","EmuData","PopulationData","SurveyData","StartRunMainContent","runTitle","components_SurveyData","components_PopulationData","components_EmuData","StartRun","StartRun_Component","getDatabaseName","file","StartRunContainer","FormData","append","getCountryIntersection","surveyDatabase","populationDatabase","emuDatabase","getRegionIntersection","surveyRegions","populationRegionSet","emuRegionSet","showNotification","uploadedSurveyDatabaseFile","onProgressSurveyDatabaseUpload","uploadDatabaseResponse","fetchDatabasesResponse","filename","progressEvent","loaded","total","uploadedPopulationDatabaseFile","onProgressPopulationDatabaseUpload","uploadedEmuDatabaseFile","onProgressEmuDatabaseUpload","history","components_StartRun_StartRun","ViewRunDrawerContent","loadingRun","onViewRun","SentenceMaritalStatusSelector","components_SentenceMaritalStatusSelector","onSelectMaritalStatus","contraceptiveMethod","onSelectContraceptiveMethod","inputProps","onChangeFirstYear","onBlur","onChangeLastYear","onSelectIndicator","formatQuantiles","percentages","includeConfidenceIntervals","formattedMedian","formattedLower","formattedUpper","Progress","panel","Progress_ProgressIndicatorSpecification","onSelectIndicatorProgressIndicator","onSelectIndicatorProgressMaritalStatus","onChangeIndicatorProgressFirstYear","onChangeIndicatorProgressLastYear","answer","Progress_ProgressContraceptionMethodSpecification","onSelectContraceptiveMethodProgressMaritalStatus","onSelectContraceptiveMethodProgressContraceptiveMethod","onChangeContraceptiveMethodProgressFirstYear","onChangeContraceptiveMethodProgressLastYear","valid","calculating","onCalculate","validatePeriod","createPayload","payload","ProgressContainer","components_Progress_Progress","probability","onChangeYear","onChangeProbability","direction","onSelectDirection","percentage","endAdornment","InputAdornment_default","onChangeLevel","delta","onSelectDelta","relativeToYear","onChangeRelativeToYear","onSelectrDirection","Targets","Targets_TargetsIndicatorProbabilitySpecification","onSelectIndicatorProbabilityIndicator","onSelectIndicatorProbabilityMaritalStatus","onChangeIndicatorProbabilityYear","onSelectIndicatorProbabilityDirection","onChangeIndicatorProbabilityLevel","Targets_TargetsIndicatorLevelSpecification","onSelectIndicatorLevelIndicator","onSelectIndicatorLevelMaritalStatus","onChangeIndicatorLevelYear","onChangeIndicatorLevelProbability","onSelectIndicatorLevelDirection","Targets_TargetsPopulationProbabilitySpecification","onSelectPopulationProbabilityDelta","onSelectPopulationProbabilityMaritalStatus","onChangePopulationProbabilityRelativeToYear","onSelectPopulationProbabilityContraceptiveMethod","onChangePopulationProbabilityYear","onSelectPopulationProbabilityDirection","onChangePopulationProbabilityLevel","Targets_TargetsPopulationLevelSpecification","onSelectPopulationLevelDelta","onSelectPopulationLevelMaritalStatus","onChangePopulationLevelRelativeToYear","onSelectPopulationLevelContraceptiveMethod","onChangePopulationLevelYear","onSelectPopulationLevelDirection","onChangePopulationLevelProbability","TargetsContainer","components_Targets_Targets","ViewRunMainContent","containers_TargetsContainer","containers_ProgressContainer","ViewRun","ViewRunContainer","viewRun","ViewRun_ViewRun","withRouter","appBar","brand","content","languages","signOut","flexGrow","justifyContent","signOutLabel","mainSectionPath","pathname","AppBar_default","Toolbar_default","Tabs_default","scrollButtons","Tab_default","Link","components_LanguageChooser_LanguageChooser","signIn","onLogout","About","AppContainer","changeLanguage","document","components_App","Login","Avatar_default","avatar","LockOutlined_default","systemStatusMessage","form","autoComplete","autoFocus","onChangeUsername","onChangePassword","rememberMe","onToggleRememberMe","submit","preventDefault","onSubmit","register","rel","lastUpdated","secondary","breakpoints","up","flexDirection","LoginContainer","LogRocket","identify","redirectToReferrer","components_Login","PrivateRoute","Root","core_styles","CssBaseline_default","components_PrivateRoute","dsn","getSessionURL","sessionUrl","addEventProcessor","asyncToGenerator","regenerator_default","mark","_callee","event","wrap","_context","prev","next","extra","sessionURL","abrupt","stop","_x","LicenseManager","setLicenseKey","ReactDOM","src_Root","getElementById"],"mappings":"87mBAOMA,EAAY,CAChBC,GAAI,CACFC,oBAEFC,GAAI,CACFD,qBAIJE,IACGC,IAAIC,KACJD,IAAIE,KACJC,KAAK,CACJR,YACAS,YAAa,KACbC,cAAc,EACdC,aAAa,EACbC,cAAe,CACbC,aAAa,KAIZ,QAAMC,EAAoB,SAACC,EAAKC,GAAN,OAC/BC,IAAQC,EAAR,WAAAC,OAAqBJ,GAAOC,OAEfZ,EAAf,oGC9BagB,EAAY,CACvB,CACEC,MAAO,WACPC,MAAO,YAET,CACED,MAAO,SACPC,MAAO,YAET,CACED,MAAO,YACPC,MAAO,eAET,CACED,MAAO,iBACPC,MAAO,oBAET,CACED,MAAO,6BACPC,MAAO,+BAET,CACED,MAAO,oBACPC,MAAO,qBAET,CACED,MAAO,oBACPC,MAAO,iCAET,CACED,MAAO,eACPC,MAAO,gBAET,CACED,MAAO,mBACPC,MAAO,oBAET,CACED,MAAO,qCACPC,MAAO,sCAET,CACED,MAAO,UACPC,MAAO,YAIEC,EAAuB,CAClC,CACEF,MAAO,sBACPC,MAAO,2BAET,CACED,MAAO,yBACPC,MAAO,8BAET,CACED,MAAO,8BACPC,MAAO,mCAET,CACED,MAAO,eACPC,MAAO,0BAET,CACED,MAAO,kBACPC,MAAO,sCAET,CACED,MAAO,SACPC,MAAO,uBAMEE,EAAa,CACxB,CACEH,MAAO,sBACPC,MAAO,iCACPG,YACE,oIACFC,OAAO,GAET,CACEL,MAAO,yBACPC,MAAO,oCACPG,YACE,2IACFC,OAAO,GAET,CACEL,MAAO,8BACPC,MAAO,yCACPG,YACE,uLACFC,OAAO,GAET,CACEL,MAAO,iBACPC,MAAO,4BACPG,YACE,sIACFC,OAAO,GAET,CACEL,MAAO,eACPC,MAAO,iCACPG,YACE,+GACFC,OAAO,GAET,CACEL,MAAO,kBACPC,MAAO,0CACPG,YACE,oHACFC,OAAO,GAET,CACEL,MAAO,SACPC,MAAO,mCACPG,YACE,sKACFC,OAAO,GAET,CACEL,MAAO,eACPC,MAAO,oCACPG,YACE,sKACFC,OAAO,GAET,CACEL,MAAO,kBACPC,MAAO,qD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IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,GACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,GACA,GACA,IACA,IACA,IACA,IACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,GACA,IACA,GACA,IACA,GACA,IACA,GACA,GACA,IACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,GACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,EACA,GACA,GACA,GACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,GACA,GACA,IACA,IACA,IACA,IACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,GACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,GACA,GACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,GACA,GACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,GACA,EACA,GACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,GACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,EACA,GACA,GACA,IACA,IACA,IACA,IACA,IACA,GACA,IACA,IACA,IACA,GACA,IACA,GACA,IACA,IACA,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","file":"static/js/main.4b54d65b.chunk.js","sourcesContent":["import i18n from \"i18next\";\nimport LanguageDetector from \"i18next-browser-languagedetector\";\nimport i18next from \"i18next\";\nimport { initReactI18next } from \"react-i18next\";\nimport en from \"./translations/en\";\nimport fr from \"./translations/fr\";\n\nconst resources = {\n en: {\n translation: en\n },\n fr: {\n translation: fr\n }\n};\n\ni18n\n .use(LanguageDetector)\n .use(initReactI18next)\n .init({\n resources,\n fallbackLng: \"en\",\n keySeparator: false,\n nsSeparator: false,\n interpolation: {\n escapeValue: false\n }\n });\n\nexport const translateGridText = (key, defaultValue) =>\n i18next.t(`ag-grid.${key}`, defaultValue);\n\nexport default i18n;\n","export const developmentMode = false && process.env.NODE_ENV === \"development\";\n\nexport const chartSets = [\n {\n value: \"complete\",\n label: \"Complete\",\n },\n {\n value: \"cp_any\",\n label: \"CP (any)\",\n },\n {\n value: \"cp_modern\",\n label: \"CP (modern)\",\n },\n {\n value: \"cp_traditional\",\n label: \"CP (traditional)\",\n },\n {\n value: \"ratio_modern_vs_any_method\",\n label: \"Ratio (modern / any method)\",\n },\n {\n value: \"unmet_need_for_fp\",\n label: \"Unmet need for FP\",\n },\n {\n value: \"unmet_need_modern\",\n label: \"Unmet need for modern methods\",\n },\n {\n value: \"total_demand\",\n label: \"Total demand\",\n },\n {\n value: \"demand_satisfied\",\n label: \"Demand satisfied\",\n },\n {\n value: \"demand_satisfied_by_modern_methods\",\n label: \"Demand satisfied by modern methods\",\n },\n {\n value: \"fp_2020\",\n label: \"FP 2020\",\n },\n];\n\nexport const contraceptiveMethods = [\n {\n value: \"contraceptiveUseAny\",\n label: \"using any contraception\",\n },\n {\n value: \"contraceptiveUseModern\",\n label: \"using modern contraception\",\n },\n {\n value: \"contraceptiveUseTraditional\",\n label: \"using traditional contraception\",\n },\n {\n value: \"unmetNeedAny\",\n label: \"with unmet need for FP\",\n },\n {\n value: \"unmetNeedModern\",\n label: \"with unmet need for modern methods\",\n },\n {\n value: \"demand\",\n label: \"with demand for FP\",\n },\n];\n\nexport const defaultFirstYear = 1970;\n\nexport const indicators = [\n {\n value: \"contraceptiveUseAny\",\n label: \"Contraceptive prevalence (any)\",\n description:\n \"The proportion of women who are currently using, or whose sexual partner is currently using, at least one method of contraception\",\n chart: true,\n },\n {\n value: \"contraceptiveUseModern\",\n label: \"Contraceptive prevalence (modern)\",\n description:\n \"The proportion of women who are currently using, or whose sexual partner is currently using, at least one modern method of contraception\",\n chart: true,\n },\n {\n value: \"contraceptiveUseTraditional\",\n label: \"Contraceptive prevalence (traditional)\",\n description:\n \"The proportion of women who are currently using, or whose sexual partner is currently using, at least one traditional method of contraception (and neither is using a modern method)\",\n chart: true,\n },\n {\n value: \"ratioModernAny\",\n label: \"Modern/Any method (ratio)\",\n description:\n \"The ratio of contraceptive prevalence (modern) over contraceptive prevalence (any), the percent of contraceptive use that is modern\",\n chart: true,\n },\n {\n value: \"unmetNeedAny\",\n label: \"Unmet need for family planning\",\n description:\n \"The proportion of women who want to stop or delay childbearing but are not using any method of contraception\",\n chart: true,\n },\n {\n value: \"unmetNeedModern\",\n label: \"Unmet need for family planning (modern)\",\n description:\n \"The proportion of women who want to stop or delay childbearing but are not using a modern method of contraception\",\n chart: true,\n },\n {\n value: \"demand\",\n label: \"Total demand for family planning\",\n description:\n \"The proportion of women who are either using any method of contraception (or whose sexual partner is currently using) or who have an unmet need for family planning\",\n chart: true,\n },\n {\n value: \"demandModern\",\n label: \"Demand for modern family planning\",\n description:\n \"The proportion of women who are either using any method of contraception (or whose sexual partner is currently using) or who have an unmet need for family planning\",\n chart: true,\n },\n {\n value: \"demandSatisfied\",\n label: \"Demand for family planning satisfied by any method\",\n description:\n \"The proportion of women who are currently using, or whose sexual partner is currently using, any contraceptive method out of the women of reproductive age who have a demand for family planning, either by using any method of contraception or by having an unmet need for family planning\",\n chart: true,\n },\n {\n value: \"demandSatisfiedModern\",\n label: \"Demand for family planning satisfied by modern methods\",\n description:\n \"The proportion of women who are currently using, or whose sexual partner is currently using, at least one modern contraceptive method out of women of reproductive age who have a demand for family planning, either by using any method of contraception or by having an unmet need for family planning\",\n chart: true,\n },\n {\n value: \"noNeed\",\n label: \"No need for contraception\",\n description: \"\",\n chart: false,\n },\n];\n\nexport const maximumYear = 2030;\n\nexport const minimumYear = 1970;\n","import { maximumYear, minimumYear } from \"./constants\";\n\nconst parseNumber = value => {\n let normalizedValue = value;\n\n if ((value.match(/,/g) || []).length === 1) {\n normalizedValue = normalizedValue.replace(\",\", \".\");\n }\n\n return parseFloat(normalizedValue);\n};\n\nexport const createGuid = () =>\n ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, c =>\n (\n c ^\n (crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (c / 4)))\n ).toString(16)\n );\n\nexport const createSlug = (name, suffix, separator = \"_\") =>\n name ? `${name}${separator}${suffix}` : suffix;\n\nexport const formatDateTime = date =>\n date.toLocaleDateString(\"en-US\", {\n day: \"numeric\",\n month: \"short\",\n year: \"numeric\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n seconds: \"2-digit\"\n });\n\nexport const formatLogicalCell = value =>\n value == null ? null : value ? \"✔\" : \"✘\";\n\nexport const formatNullableCell = value => (value != null ? value : \"None\");\n\nexport const formatNumericCell = (value, decimalPlaces) => {\n const number = parseFloat(value);\n\n return isNaN(number) ? undefined : number.toFixed(decimalPlaces);\n};\n\nexport const formatPercentage = (value, decimalPlaces) =>\n `${(value * 100).toFixed(decimalPlaces)}%`;\n\nexport const formatPercentageCell = (value, decimalPlaces, suffix) => {\n const number = parseFloat(value);\n\n return isNaN(number)\n ? undefined\n : `${(number * 100).toFixed(decimalPlaces)}${suffix ? \"%\" : \"\"}`;\n};\n\nexport const getCurrentYear = () => new Date().getFullYear();\n\nexport const getDefaultLastYear = () => 2030;\n\nexport const groupBy = (items, key) =>\n items.reduce((result, item) => {\n const { indicator, ...rest } = item;\n\n result[indicator] = [...(result[indicator] || []), rest];\n\n return result;\n }, {});\n\nexport const hash = text =>\n [...text].reduce(\n (previousHash, currentCharacter) =>\n ((previousHash << 5) - previousHash + currentCharacter.charCodeAt(0)) | 0,\n 0\n );\n\nexport const parseIntegerCell = (\n params,\n minimumInclusiveValue,\n maximumInclusiveValue\n) => {\n const newValue = parseInt(params.newValue, 10);\n\n if (isNaN(newValue)) {\n return params.oldValue;\n }\n\n return trimToRange(newValue, minimumInclusiveValue, maximumInclusiveValue);\n};\n\nexport const parseNullableAlphaCell = (\n params,\n minimumInclusiveValue = 0,\n maximumInclusiveValue = Number.MAX_VALUE\n) => {\n const newValue = params.newValue.trim();\n\n if (newValue.length === 0 || !isNaN(parseInt(newValue[0], 10))) {\n return;\n }\n\n return newValue;\n};\n\nexport const parseNullableNumericCell = (\n params,\n minimumInclusiveValue = 0,\n maximumInclusiveValue = Number.MAX_VALUE\n) => {\n const newValue = parseNumber(params.newValue);\n\n if (isNaN(newValue)) {\n return;\n }\n\n return trimToRange(newValue, minimumInclusiveValue, maximumInclusiveValue);\n};\n\nexport const parseNumericCell = (\n params,\n minimumInclusiveValue = 0,\n maximumInclusiveValue = Number.MAX_VALUE\n) => {\n const newValue = parseNumber(params.newValue);\n\n if (isNaN(newValue)) {\n return params.oldValue;\n }\n\n return trimToRange(newValue, minimumInclusiveValue, maximumInclusiveValue);\n};\n\nexport const toggleSetExistence = (set, value) => {\n if (set.has(value)) {\n set.delete(value);\n } else {\n set.add(value);\n }\n};\n\nexport const trimYearToRange = (year, enforceRange) =>\n trimToRange(year, enforceRange ? minimumYear : 0, maximumYear);\n\nexport const trimToRange = (value, inclusiveMinimum, inclusiveMaximum) =>\n Math.min(Math.max(value, inclusiveMinimum), inclusiveMaximum);\n","import React from \"react\";\nimport { withStyles } from \"@material-ui/core\";\nimport ErrorIcon from \"@material-ui/icons/Error\";\nimport { withTranslation } from \"react-i18next\";\n\nconst styles = theme => ({\n message: {\n display: \"flex\",\n alignItems: \"center\"\n },\n icon: {\n width: \"1.5em\",\n height: \"1.5em\",\n color: theme.palette.error.dark\n },\n text: {\n marginLeft: 10\n }\n});\n\nconst Oops = ({ classes, t }) => (\n
\n

{t(\"Oops!\")}

\n\n
\n \n\n
\n \n
{t(\"Our team has been notified.\")}
\n
\n
\n
\n);\n\nexport default withTranslation()(withStyles(styles)(Oops));\n","import React, { Component } from \"react\";\nimport { createGuid } from \"../utilities\";\nimport * as Sentry from \"@sentry/browser\";\nimport { withStyles } from \"@material-ui/core\";\nimport Oops from \"./Oops\";\n\nconst styles = {\n details: {\n marginTop: \"1em\",\n whiteSpace: \"pre-wrap\"\n },\n error: {\n margin: 10\n },\n errorContentItem: {\n marginTop: \"1em\"\n }\n};\n\nclass ErrorBoundary extends Component {\n constructor(props) {\n super(props);\n\n this.state = {};\n }\n\n componentDidCatch(error, errorInfo) {\n const eventId = createGuid();\n\n console.log(`Event ID: ${eventId}`);\n console.log(error);\n console.log(errorInfo);\n\n this.setState({\n error,\n errorInfo,\n eventId: createGuid()\n });\n\n Sentry.withScope(scope => {\n scope.setExtra(\"eventId\", eventId);\n scope.setExtra(\"errorInfo\", errorInfo);\n\n Sentry.captureException(error);\n });\n }\n\n render() {\n const { classes } = this.props;\n\n if (!this.state.error) {\n return this.props.children;\n } else {\n return (\n
\n \n\n
\n {this.state.eventId && (\n
\n {`Event Id: ${this.state.eventId}`}\n
\n
\n )}\n\n
\n {this.state.error && this.state.error.toString()}\n
\n\n
{this.state.errorInfo.componentStack}
\n
\n
\n );\n }\n }\n}\n\nexport default withStyles(styles)(ErrorBoundary);\n","import React from \"react\";\nimport ErrorBoundary from \"./components/ErrorBoundary\";\n\nexport const withErrorBoundary = Component => props => (\n \n \n \n);\n","import { createMuiTheme } from \"@material-ui/core/styles\";\nimport blue from \"@material-ui/core/colors/blue\";\n\nconst theme = createMuiTheme({\n palette: {\n background: {\n default: \"#fff\"\n },\n primary: {\n main: blue[900]\n }\n },\n typography: {\n useNextVariants: true\n }\n});\n\nexport default theme;\n","import { indicators } from \"../constants\";\n\nconst divisions = [\n {\n numericCode: 1,\n name: \"World\",\n alphaCode: \"001\",\n isCountry: false\n },\n {\n numericCode: 2,\n name: \"Africa\",\n alphaCode: \"002\",\n isCountry: false\n },\n {\n numericCode: 15,\n name: \"Northern Africa\",\n alphaCode: \"015\",\n isCountry: false\n },\n {\n numericCode: 12,\n name: \"Algeria\",\n alphaCode: \"DZA\",\n isCountry: true\n },\n {\n numericCode: 818,\n name: \"Egypt\",\n alphaCode: \"EGY\",\n isCountry: true\n },\n {\n numericCode: 434,\n name: \"Libya\",\n alphaCode: \"LBY\",\n isCountry: true\n },\n {\n numericCode: 504,\n name: \"Morocco\",\n alphaCode: \"MAR\",\n isCountry: true\n },\n {\n numericCode: 729,\n name: \"Sudan\",\n alphaCode: \"SDN\",\n isCountry: true\n },\n {\n numericCode: 788,\n name: \"Tunisia\",\n alphaCode: \"TUN\",\n isCountry: true\n },\n {\n numericCode: 732,\n name: \"Western Sahara\",\n alphaCode: \"ESH\",\n isCountry: true\n },\n {\n numericCode: 202,\n name: \"Sub-Saharan Africa\",\n alphaCode: \"202\",\n isCountry: false\n },\n {\n numericCode: 14,\n name: \"Eastern Africa\",\n alphaCode: \"014\",\n isCountry: false\n },\n {\n numericCode: 86,\n name: \"British Indian Ocean Territory\",\n alphaCode: \"IOT\",\n isCountry: true\n },\n {\n numericCode: 108,\n name: \"Burundi\",\n alphaCode: \"BDI\",\n isCountry: true\n },\n {\n numericCode: 174,\n name: \"Comoros\",\n alphaCode: \"COM\",\n isCountry: true\n },\n {\n numericCode: 262,\n name: \"Djibouti\",\n alphaCode: \"DJI\",\n isCountry: true\n },\n {\n numericCode: 232,\n name: \"Eritrea\",\n alphaCode: \"ERI\",\n isCountry: true\n },\n {\n numericCode: 231,\n name: \"Ethiopia\",\n alphaCode: \"ETH\",\n isCountry: true\n },\n {\n numericCode: 260,\n name: \"French Southern Territories\",\n alphaCode: \"ATF\",\n isCountry: true\n },\n {\n numericCode: 404,\n name: \"Kenya\",\n alphaCode: \"KEN\",\n isCountry: true\n },\n {\n numericCode: 450,\n name: \"Madagascar\",\n alphaCode: \"MDG\",\n isCountry: true\n },\n {\n numericCode: 454,\n name: \"Malawi\",\n alphaCode: \"MWI\",\n isCountry: true\n },\n {\n numericCode: 480,\n name: \"Mauritius\",\n alphaCode: \"MUS\",\n isCountry: true\n },\n {\n numericCode: 175,\n name: \"Mayotte\",\n alphaCode: \"MYT\",\n isCountry: true\n },\n {\n numericCode: 508,\n name: \"Mozambique\",\n alphaCode: \"MOZ\",\n isCountry: true\n },\n {\n numericCode: 638,\n name: \"Réunion\",\n alphaCode: \"REU\",\n isCountry: true\n },\n {\n numericCode: 646,\n name: \"Rwanda\",\n alphaCode: \"RWA\",\n isCountry: true\n },\n {\n numericCode: 690,\n name: \"Seychelles\",\n alphaCode: \"SYC\",\n isCountry: true\n },\n {\n numericCode: 706,\n name: \"Somalia\",\n alphaCode: \"SOM\",\n isCountry: true\n },\n {\n numericCode: 728,\n name: \"South Sudan\",\n alphaCode: \"SSD\",\n isCountry: true\n },\n {\n numericCode: 800,\n name: \"Uganda\",\n alphaCode: \"UGA\",\n isCountry: true\n },\n {\n numericCode: 834,\n name: \"United Republic of Tanzania\",\n alphaCode: \"TZA\",\n isCountry: true\n },\n {\n numericCode: 894,\n name: \"Zambia\",\n alphaCode: \"ZMB\",\n isCountry: true\n },\n {\n numericCode: 716,\n name: \"Zimbabwe\",\n alphaCode: \"ZWE\",\n isCountry: true\n },\n {\n numericCode: 17,\n name: \"Middle Africa\",\n alphaCode: \"017\",\n isCountry: false\n },\n {\n numericCode: 24,\n name: \"Angola\",\n alphaCode: \"AGO\",\n isCountry: true\n },\n {\n numericCode: 120,\n name: \"Cameroon\",\n alphaCode: \"CMR\",\n isCountry: true\n },\n {\n numericCode: 140,\n name: \"Central African Republic\",\n alphaCode: \"CAF\",\n isCountry: true\n },\n {\n numericCode: 148,\n name: \"Chad\",\n alphaCode: \"TCD\",\n isCountry: true\n },\n {\n numericCode: 178,\n name: \"Congo\",\n alphaCode: \"COG\",\n isCountry: true\n },\n {\n numericCode: 180,\n name: \"Democratic Republic of the Congo\",\n alphaCode: \"COD\",\n isCountry: true\n },\n {\n numericCode: 226,\n name: \"Equatorial Guinea\",\n alphaCode: \"GNQ\",\n isCountry: true\n },\n {\n numericCode: 266,\n name: \"Gabon\",\n alphaCode: \"GAB\",\n isCountry: true\n },\n {\n numericCode: 678,\n name: \"Sao Tome and Principe\",\n alphaCode: \"STP\",\n isCountry: true\n },\n {\n numericCode: 18,\n name: \"Southern Africa\",\n alphaCode: \"018\",\n isCountry: false\n },\n {\n numericCode: 72,\n name: \"Botswana\",\n alphaCode: \"BWA\",\n isCountry: true\n },\n {\n numericCode: 748,\n name: \"Eswatini\",\n alphaCode: \"SWZ\",\n isCountry: true\n },\n {\n numericCode: 426,\n name: \"Lesotho\",\n alphaCode: \"LSO\",\n isCountry: true\n },\n {\n numericCode: 516,\n name: \"Namibia\",\n alphaCode: \"NAM\",\n isCountry: true\n },\n {\n numericCode: 710,\n name: \"South Africa\",\n alphaCode: \"ZAF\",\n isCountry: true\n },\n {\n numericCode: 11,\n name: \"Western Africa\",\n alphaCode: \"011\",\n isCountry: false\n },\n {\n numericCode: 204,\n name: \"Benin\",\n alphaCode: \"BEN\",\n isCountry: true\n },\n {\n numericCode: 854,\n name: \"Burkina Faso\",\n alphaCode: \"BFA\",\n isCountry: true\n },\n {\n numericCode: 132,\n name: \"Cabo Verde\",\n alphaCode: \"CPV\",\n isCountry: true\n },\n {\n numericCode: 384,\n name: \"Côte d’Ivoire\",\n alphaCode: \"CIV\",\n isCountry: true\n },\n {\n numericCode: 270,\n name: \"Gambia\",\n alphaCode: \"GMB\",\n isCountry: true\n },\n {\n numericCode: 288,\n name: \"Ghana\",\n alphaCode: \"GHA\",\n isCountry: true\n },\n {\n numericCode: 324,\n name: \"Guinea\",\n alphaCode: \"GIN\",\n isCountry: true\n },\n {\n numericCode: 624,\n name: \"Guinea-Bissau\",\n alphaCode: \"GNB\",\n isCountry: true\n },\n {\n numericCode: 430,\n name: \"Liberia\",\n alphaCode: \"LBR\",\n isCountry: true\n },\n {\n numericCode: 466,\n name: \"Mali\",\n alphaCode: \"MLI\",\n isCountry: true\n },\n {\n numericCode: 478,\n name: \"Mauritania\",\n alphaCode: \"MRT\",\n isCountry: true\n },\n {\n numericCode: 562,\n name: \"Niger\",\n alphaCode: \"NER\",\n isCountry: true\n },\n {\n numericCode: 566,\n name: \"Nigeria\",\n alphaCode: \"NGA\",\n isCountry: true\n },\n {\n numericCode: 654,\n name: \"Saint Helena\",\n alphaCode: \"SHN\",\n isCountry: true\n },\n {\n numericCode: 686,\n name: \"Senegal\",\n alphaCode: \"SEN\",\n isCountry: true\n },\n {\n numericCode: 694,\n name: \"Sierra Leone\",\n alphaCode: \"SLE\",\n isCountry: true\n },\n {\n numericCode: 768,\n name: \"Togo\",\n alphaCode: \"TGO\",\n isCountry: true\n },\n {\n numericCode: 19,\n name: \"Americas\",\n alphaCode: \"019\",\n isCountry: false\n },\n {\n numericCode: 419,\n name: \"Latin America and the Caribbean\",\n alphaCode: \"419\",\n isCountry: false\n },\n {\n numericCode: 29,\n name: \"Caribbean\",\n alphaCode: \"029\",\n isCountry: false\n },\n {\n numericCode: 660,\n name: \"Anguilla\",\n alphaCode: \"AIA\",\n isCountry: true\n },\n {\n numericCode: 28,\n name: \"Antigua and Barbuda\",\n alphaCode: \"ATG\",\n isCountry: true\n },\n {\n numericCode: 533,\n name: \"Aruba\",\n alphaCode: \"ABW\",\n isCountry: true\n },\n {\n numericCode: 44,\n name: \"Bahamas\",\n alphaCode: \"BHS\",\n isCountry: true\n },\n {\n numericCode: 52,\n name: \"Barbados\",\n alphaCode: \"BRB\",\n isCountry: true\n },\n {\n numericCode: 535,\n name: \"Bonaire, Sint Eustatius and Saba\",\n alphaCode: \"BES\",\n isCountry: true\n },\n {\n numericCode: 92,\n name: \"British Virgin Islands\",\n alphaCode: \"VGB\",\n isCountry: true\n },\n {\n numericCode: 136,\n name: \"Cayman Islands\",\n alphaCode: \"CYM\",\n isCountry: true\n },\n {\n numericCode: 192,\n name: \"Cuba\",\n alphaCode: \"CUB\",\n isCountry: true\n },\n {\n numericCode: 531,\n name: \"Curaçao\",\n alphaCode: \"CUW\",\n isCountry: true\n },\n {\n numericCode: 212,\n name: \"Dominica\",\n alphaCode: \"DMA\",\n isCountry: true\n },\n {\n numericCode: 214,\n name: \"Dominican Republic\",\n alphaCode: \"DOM\",\n isCountry: true\n },\n {\n numericCode: 308,\n name: \"Grenada\",\n alphaCode: \"GRD\",\n isCountry: true\n },\n {\n numericCode: 312,\n name: \"Guadeloupe\",\n alphaCode: \"GLP\",\n isCountry: true\n },\n {\n numericCode: 332,\n name: \"Haiti\",\n alphaCode: \"HTI\",\n isCountry: true\n },\n {\n numericCode: 388,\n name: \"Jamaica\",\n alphaCode: \"JAM\",\n isCountry: true\n },\n {\n numericCode: 474,\n name: \"Martinique\",\n alphaCode: \"MTQ\",\n isCountry: true\n },\n {\n numericCode: 500,\n name: \"Montserrat\",\n alphaCode: \"MSR\",\n isCountry: true\n },\n {\n numericCode: 630,\n name: \"Puerto Rico\",\n alphaCode: \"PRI\",\n isCountry: true\n },\n {\n numericCode: 652,\n name: \"Saint Barthélemy\",\n alphaCode: \"BLM\",\n isCountry: true\n },\n {\n numericCode: 659,\n name: \"Saint Kitts and Nevis\",\n alphaCode: \"KNA\",\n isCountry: true\n },\n {\n numericCode: 662,\n name: \"Saint Lucia\",\n alphaCode: \"LCA\",\n isCountry: true\n },\n {\n numericCode: 663,\n name: \"Saint Martin (French Part)\",\n alphaCode: \"MAF\",\n isCountry: true\n },\n {\n numericCode: 670,\n name: \"Saint Vincent and the Grenadines\",\n alphaCode: \"VCT\",\n isCountry: true\n },\n {\n numericCode: 534,\n name: \"Sint Maarten (Dutch part)\",\n alphaCode: \"SXM\",\n isCountry: true\n },\n {\n numericCode: 780,\n name: \"Trinidad and Tobago\",\n alphaCode: \"TTO\",\n isCountry: true\n },\n {\n numericCode: 796,\n name: \"Turks and Caicos Islands\",\n alphaCode: \"TCA\",\n isCountry: true\n },\n {\n numericCode: 850,\n name: \"United States Virgin Islands\",\n alphaCode: \"VIR\",\n isCountry: true\n },\n {\n numericCode: 13,\n name: \"Central America\",\n alphaCode: \"013\",\n isCountry: false\n },\n {\n numericCode: 84,\n name: \"Belize\",\n alphaCode: \"BLZ\",\n isCountry: true\n },\n {\n numericCode: 188,\n name: \"Costa Rica\",\n alphaCode: \"CRI\",\n isCountry: true\n },\n {\n numericCode: 222,\n name: \"El Salvador\",\n alphaCode: \"SLV\",\n isCountry: true\n },\n {\n numericCode: 320,\n name: \"Guatemala\",\n alphaCode: \"GTM\",\n isCountry: true\n },\n {\n numericCode: 340,\n name: \"Honduras\",\n alphaCode: \"HND\",\n isCountry: true\n },\n {\n numericCode: 484,\n name: \"Mexico\",\n alphaCode: \"MEX\",\n isCountry: true\n },\n {\n numericCode: 558,\n name: \"Nicaragua\",\n alphaCode: \"NIC\",\n isCountry: true\n },\n {\n numericCode: 591,\n name: \"Panama\",\n alphaCode: \"PAN\",\n isCountry: true\n },\n {\n numericCode: 5,\n name: \"South America\",\n alphaCode: \"005\",\n isCountry: false\n },\n {\n numericCode: 32,\n name: \"Argentina\",\n alphaCode: \"ARG\",\n isCountry: true\n },\n {\n numericCode: 68,\n name: \"Bolivia (Plurinational State of)\",\n alphaCode: \"BOL\",\n isCountry: true\n },\n {\n numericCode: 74,\n name: \"Bouvet Island\",\n alphaCode: \"BVT\",\n isCountry: true\n },\n {\n numericCode: 76,\n name: \"Brazil\",\n alphaCode: \"BRA\",\n isCountry: true\n },\n {\n numericCode: 152,\n name: \"Chile\",\n alphaCode: \"CHL\",\n isCountry: true\n },\n {\n numericCode: 170,\n name: \"Colombia\",\n alphaCode: \"COL\",\n isCountry: true\n },\n {\n numericCode: 218,\n name: \"Ecuador\",\n alphaCode: \"ECU\",\n isCountry: true\n },\n {\n numericCode: 238,\n name: \"Falkland Islands (Malvinas)\",\n alphaCode: \"FLK\",\n isCountry: true\n },\n {\n numericCode: 254,\n name: \"French Guiana\",\n alphaCode: \"GUF\",\n isCountry: true\n },\n {\n numericCode: 328,\n name: \"Guyana\",\n alphaCode: \"GUY\",\n isCountry: true\n },\n {\n numericCode: 600,\n name: \"Paraguay\",\n alphaCode: \"PRY\",\n isCountry: true\n },\n {\n numericCode: 604,\n name: \"Peru\",\n alphaCode: \"PER\",\n isCountry: true\n },\n {\n numericCode: 239,\n name: \"South Georgia and the South Sandwich Islands\",\n alphaCode: \"SGS\",\n isCountry: true\n },\n {\n numericCode: 740,\n name: \"Suriname\",\n alphaCode: \"SUR\",\n isCountry: true\n },\n {\n numericCode: 858,\n name: \"Uruguay\",\n alphaCode: \"URY\",\n isCountry: true\n },\n {\n numericCode: 862,\n name: \"Venezuela (Bolivarian Republic of)\",\n alphaCode: \"VEN\",\n isCountry: true\n },\n {\n numericCode: 21,\n name: \"Northern America\",\n alphaCode: \"021\",\n isCountry: false\n },\n {\n numericCode: 60,\n name: \"Bermuda\",\n alphaCode: \"BMU\",\n isCountry: true\n },\n {\n numericCode: 124,\n name: \"Canada\",\n alphaCode: \"CAN\",\n isCountry: true\n },\n {\n numericCode: 304,\n name: \"Greenland\",\n alphaCode: \"GRL\",\n isCountry: true\n },\n {\n numericCode: 666,\n name: \"Saint Pierre and Miquelon\",\n alphaCode: \"SPM\",\n isCountry: true\n },\n {\n numericCode: 840,\n name: \"United States of America\",\n alphaCode: \"USA\",\n isCountry: true\n },\n {\n numericCode: 10,\n name: \"Antarctica\",\n alphaCode: \"ATA\",\n isCountry: true\n },\n {\n numericCode: 142,\n name: \"Asia\",\n alphaCode: \"142\",\n isCountry: false\n },\n {\n numericCode: 143,\n name: \"Central Asia\",\n alphaCode: \"143\",\n isCountry: false\n },\n {\n numericCode: 398,\n name: \"Kazakhstan\",\n alphaCode: \"KAZ\",\n isCountry: true\n },\n {\n numericCode: 417,\n name: \"Kyrgyzstan\",\n alphaCode: \"KGZ\",\n isCountry: true\n },\n {\n numericCode: 762,\n name: \"Tajikistan\",\n alphaCode: \"TJK\",\n isCountry: true\n },\n {\n numericCode: 795,\n name: \"Turkmenistan\",\n alphaCode: \"TKM\",\n isCountry: true\n },\n {\n numericCode: 860,\n name: \"Uzbekistan\",\n alphaCode: \"UZB\",\n isCountry: true\n },\n {\n numericCode: 30,\n name: \"Eastern Asia\",\n alphaCode: \"030\",\n isCountry: false\n },\n {\n numericCode: 156,\n name: \"China\",\n alphaCode: \"CHN\",\n isCountry: true\n },\n {\n numericCode: 344,\n name: \"China, Hong Kong Special Administrative Region\",\n alphaCode: \"HKG\",\n isCountry: true\n },\n {\n numericCode: 446,\n name: \"China, Macao Special Administrative Region\",\n alphaCode: \"MAC\",\n isCountry: true\n },\n {\n numericCode: 408,\n name: \"Democratic People's Republic of Korea\",\n alphaCode: \"PRK\",\n isCountry: true\n },\n {\n numericCode: 392,\n name: \"Japan\",\n alphaCode: \"JPN\",\n isCountry: true\n },\n {\n numericCode: 496,\n name: \"Mongolia\",\n alphaCode: \"MNG\",\n isCountry: true\n },\n {\n numericCode: 410,\n name: \"Republic of Korea\",\n alphaCode: \"KOR\",\n isCountry: true\n },\n {\n numericCode: 35,\n name: \"South-eastern Asia\",\n alphaCode: \"035\",\n isCountry: false\n },\n {\n numericCode: 96,\n name: \"Brunei Darussalam\",\n alphaCode: \"BRN\",\n isCountry: true\n },\n {\n numericCode: 116,\n name: \"Cambodia\",\n alphaCode: \"KHM\",\n isCountry: true\n },\n {\n numericCode: 360,\n name: \"Indonesia\",\n alphaCode: \"IDN\",\n isCountry: true\n },\n {\n numericCode: 418,\n name: \"Lao People's Democratic Republic\",\n alphaCode: \"LAO\",\n isCountry: true\n },\n {\n numericCode: 458,\n name: \"Malaysia\",\n alphaCode: \"MYS\",\n isCountry: true\n },\n {\n numericCode: 104,\n name: \"Myanmar\",\n alphaCode: \"MMR\",\n isCountry: true\n },\n {\n numericCode: 608,\n name: \"Philippines\",\n alphaCode: \"PHL\",\n isCountry: true\n },\n {\n numericCode: 702,\n name: \"Singapore\",\n alphaCode: \"SGP\",\n isCountry: true\n },\n {\n numericCode: 764,\n name: \"Thailand\",\n alphaCode: \"THA\",\n isCountry: true\n },\n {\n numericCode: 626,\n name: \"Timor-Leste\",\n alphaCode: \"TLS\",\n isCountry: true\n },\n {\n numericCode: 704,\n name: \"Viet Nam\",\n alphaCode: \"VNM\",\n isCountry: true\n },\n {\n numericCode: 34,\n name: \"Southern Asia\",\n alphaCode: \"034\",\n isCountry: false\n },\n {\n numericCode: 4,\n name: \"Afghanistan\",\n alphaCode: \"AFG\",\n isCountry: true\n },\n {\n numericCode: 50,\n name: \"Bangladesh\",\n alphaCode: \"BGD\",\n isCountry: true\n },\n {\n numericCode: 64,\n name: \"Bhutan\",\n alphaCode: \"BTN\",\n isCountry: true\n },\n {\n numericCode: 356,\n name: \"India\",\n alphaCode: \"IND\",\n isCountry: true\n },\n {\n numericCode: 364,\n name: \"Iran (Islamic Republic of)\",\n alphaCode: \"IRN\",\n isCountry: true\n },\n {\n numericCode: 462,\n name: \"Maldives\",\n alphaCode: \"MDV\",\n isCountry: true\n },\n {\n numericCode: 524,\n name: \"Nepal\",\n alphaCode: \"NPL\",\n isCountry: true\n },\n {\n numericCode: 586,\n name: \"Pakistan\",\n alphaCode: \"PAK\",\n isCountry: true\n },\n {\n numericCode: 144,\n name: \"Sri Lanka\",\n alphaCode: \"LKA\",\n isCountry: true\n },\n {\n numericCode: 145,\n name: \"Western Asia\",\n alphaCode: \"145\",\n isCountry: false\n },\n {\n numericCode: 51,\n name: \"Armenia\",\n alphaCode: \"ARM\",\n isCountry: true\n },\n {\n numericCode: 31,\n name: \"Azerbaijan\",\n alphaCode: \"AZE\",\n isCountry: true\n },\n {\n numericCode: 48,\n name: \"Bahrain\",\n alphaCode: \"BHR\",\n isCountry: true\n },\n {\n numericCode: 196,\n name: \"Cyprus\",\n alphaCode: \"CYP\",\n isCountry: true\n },\n {\n numericCode: 268,\n name: \"Georgia\",\n alphaCode: \"GEO\",\n isCountry: true\n },\n {\n numericCode: 368,\n name: \"Iraq\",\n alphaCode: \"IRQ\",\n isCountry: true\n },\n {\n numericCode: 376,\n name: \"Israel\",\n alphaCode: \"ISR\",\n isCountry: true\n },\n {\n numericCode: 400,\n name: \"Jordan\",\n alphaCode: \"JOR\",\n isCountry: true\n },\n {\n numericCode: 414,\n name: \"Kuwait\",\n alphaCode: \"KWT\",\n isCountry: true\n },\n {\n numericCode: 422,\n name: \"Lebanon\",\n alphaCode: \"LBN\",\n isCountry: true\n },\n {\n numericCode: 512,\n name: \"Oman\",\n alphaCode: \"OMN\",\n isCountry: true\n },\n {\n numericCode: 634,\n name: \"Qatar\",\n alphaCode: \"QAT\",\n isCountry: true\n },\n {\n numericCode: 682,\n name: \"Saudi Arabia\",\n alphaCode: \"SAU\",\n isCountry: true\n },\n {\n numericCode: 275,\n name: \"State of Palestine\",\n alphaCode: \"PSE\",\n isCountry: true\n },\n {\n numericCode: 760,\n name: \"Syrian Arab Republic\",\n alphaCode: \"SYR\",\n isCountry: true\n },\n {\n numericCode: 792,\n name: \"Turkey\",\n alphaCode: \"TUR\",\n isCountry: true\n },\n {\n numericCode: 784,\n name: \"United Arab Emirates\",\n alphaCode: \"ARE\",\n isCountry: true\n },\n {\n numericCode: 887,\n name: \"Yemen\",\n alphaCode: \"YEM\",\n isCountry: true\n },\n {\n numericCode: 150,\n name: \"Europe\",\n alphaCode: \"150\",\n isCountry: false\n },\n {\n numericCode: 151,\n name: \"Eastern Europe\",\n alphaCode: \"151\",\n isCountry: false\n },\n {\n numericCode: 112,\n name: \"Belarus\",\n alphaCode: \"BLR\",\n isCountry: true\n },\n {\n numericCode: 100,\n name: \"Bulgaria\",\n alphaCode: \"BGR\",\n isCountry: true\n },\n {\n numericCode: 203,\n name: \"Czechia\",\n alphaCode: \"CZE\",\n isCountry: true\n },\n {\n numericCode: 348,\n name: \"Hungary\",\n alphaCode: \"HUN\",\n isCountry: true\n },\n {\n numericCode: 616,\n name: \"Poland\",\n alphaCode: \"POL\",\n isCountry: true\n },\n {\n numericCode: 498,\n name: \"Republic of Moldova\",\n alphaCode: \"MDA\",\n isCountry: true\n },\n {\n numericCode: 642,\n name: \"Romania\",\n alphaCode: \"ROU\",\n isCountry: true\n },\n {\n numericCode: 643,\n name: \"Russian Federation\",\n alphaCode: \"RUS\",\n isCountry: true\n },\n {\n numericCode: 703,\n name: \"Slovakia\",\n alphaCode: \"SVK\",\n isCountry: true\n },\n {\n numericCode: 804,\n name: \"Ukraine\",\n alphaCode: \"UKR\",\n isCountry: true\n },\n {\n numericCode: 154,\n name: \"Northern Europe\",\n alphaCode: \"154\",\n isCountry: false\n },\n {\n numericCode: 248,\n name: \"Åland Islands\",\n alphaCode: \"ALA\",\n isCountry: true\n },\n {\n numericCode: 830,\n name: \"Channel Islands\",\n alphaCode: \"830\",\n isCountry: false\n },\n {\n numericCode: 831,\n name: \"Guernsey\",\n alphaCode: \"GGY\",\n isCountry: true\n },\n {\n numericCode: 832,\n name: \"Jersey\",\n alphaCode: \"JEY\",\n isCountry: true\n },\n {\n numericCode: 680,\n name: \"Sark\",\n alphaCode: \"680\",\n isCountry: false\n },\n {\n numericCode: 208,\n name: \"Denmark\",\n alphaCode: \"DNK\",\n isCountry: true\n },\n {\n numericCode: 233,\n name: \"Estonia\",\n alphaCode: \"EST\",\n isCountry: true\n },\n {\n numericCode: 234,\n name: \"Faroe Islands\",\n alphaCode: \"FRO\",\n isCountry: true\n },\n {\n numericCode: 246,\n name: \"Finland\",\n alphaCode: \"FIN\",\n isCountry: true\n },\n {\n numericCode: 352,\n name: \"Iceland\",\n alphaCode: \"ISL\",\n isCountry: true\n },\n {\n numericCode: 372,\n name: \"Ireland\",\n alphaCode: \"IRL\",\n isCountry: true\n },\n {\n numericCode: 833,\n name: \"Isle of Man\",\n alphaCode: \"IMN\",\n isCountry: true\n },\n {\n numericCode: 428,\n name: \"Latvia\",\n alphaCode: \"LVA\",\n isCountry: true\n },\n {\n numericCode: 440,\n name: \"Lithuania\",\n alphaCode: \"LTU\",\n isCountry: true\n },\n {\n numericCode: 578,\n name: \"Norway\",\n alphaCode: \"NOR\",\n isCountry: true\n },\n {\n numericCode: 744,\n name: \"Svalbard and Jan Mayen Islands\",\n alphaCode: \"SJM\",\n isCountry: true\n },\n {\n numericCode: 752,\n name: \"Sweden\",\n alphaCode: \"SWE\",\n isCountry: true\n },\n {\n numericCode: 826,\n name: \"United Kingdom of Great Britain and Northern Ireland\",\n alphaCode: \"GBR\",\n isCountry: true\n },\n {\n numericCode: 39,\n name: \"Southern Europe\",\n alphaCode: \"039\",\n isCountry: false\n },\n {\n numericCode: 8,\n name: \"Albania\",\n alphaCode: \"ALB\",\n isCountry: true\n },\n {\n numericCode: 20,\n name: \"Andorra\",\n alphaCode: \"AND\",\n isCountry: true\n },\n {\n numericCode: 70,\n name: \"Bosnia and Herzegovina\",\n alphaCode: \"BIH\",\n isCountry: true\n },\n {\n numericCode: 191,\n name: \"Croatia\",\n alphaCode: \"HRV\",\n isCountry: true\n },\n {\n numericCode: 292,\n name: \"Gibraltar\",\n alphaCode: \"GIB\",\n isCountry: true\n },\n {\n numericCode: 300,\n name: \"Greece\",\n alphaCode: \"GRC\",\n isCountry: true\n },\n {\n numericCode: 336,\n name: \"Holy See\",\n alphaCode: \"VAT\",\n isCountry: true\n },\n {\n numericCode: 380,\n name: \"Italy\",\n alphaCode: \"ITA\",\n isCountry: true\n },\n {\n numericCode: 470,\n name: \"Malta\",\n alphaCode: \"MLT\",\n isCountry: true\n },\n {\n numericCode: 499,\n name: \"Montenegro\",\n alphaCode: \"MNE\",\n isCountry: true\n },\n {\n numericCode: 620,\n name: \"Portugal\",\n alphaCode: \"PRT\",\n isCountry: true\n },\n {\n numericCode: 674,\n name: \"San Marino\",\n alphaCode: \"SMR\",\n isCountry: true\n },\n {\n numericCode: 688,\n name: \"Serbia\",\n alphaCode: \"SRB\",\n isCountry: true\n },\n {\n numericCode: 705,\n name: \"Slovenia\",\n alphaCode: \"SVN\",\n isCountry: true\n },\n {\n numericCode: 724,\n name: \"Spain\",\n alphaCode: \"ESP\",\n isCountry: true\n },\n {\n numericCode: 807,\n name: \"The former Yugoslav Republic of Macedonia\",\n alphaCode: \"MKD\",\n isCountry: true\n },\n {\n numericCode: 155,\n name: \"Western Europe\",\n alphaCode: \"155\",\n isCountry: false\n },\n {\n numericCode: 40,\n name: \"Austria\",\n alphaCode: \"AUT\",\n isCountry: true\n },\n {\n numericCode: 56,\n name: \"Belgium\",\n alphaCode: \"BEL\",\n isCountry: true\n },\n {\n numericCode: 250,\n name: \"France\",\n alphaCode: \"FRA\",\n isCountry: true\n },\n {\n numericCode: 276,\n name: \"Germany\",\n alphaCode: \"DEU\",\n isCountry: true\n },\n {\n numericCode: 438,\n name: \"Liechtenstein\",\n alphaCode: \"LIE\",\n isCountry: true\n },\n {\n numericCode: 442,\n name: \"Luxembourg\",\n alphaCode: \"LUX\",\n isCountry: true\n },\n {\n numericCode: 492,\n name: \"Monaco\",\n alphaCode: \"MCO\",\n isCountry: true\n },\n {\n numericCode: 528,\n name: \"Netherlands\",\n alphaCode: \"NLD\",\n isCountry: true\n },\n {\n numericCode: 756,\n name: \"Switzerland\",\n alphaCode: \"CHE\",\n isCountry: true\n },\n {\n numericCode: 9,\n name: \"Oceania\",\n alphaCode: \"009\",\n isCountry: false\n },\n {\n numericCode: 53,\n name: \"Australia and New Zealand\",\n alphaCode: \"053\",\n isCountry: false\n },\n {\n numericCode: 36,\n name: \"Australia\",\n alphaCode: \"AUS\",\n isCountry: true\n },\n {\n numericCode: 162,\n name: \"Christmas Island\",\n alphaCode: \"CXR\",\n isCountry: true\n },\n {\n numericCode: 166,\n name: \"Cocos (Keeling) Islands\",\n alphaCode: \"CCK\",\n isCountry: true\n },\n {\n numericCode: 334,\n name: \"Heard Island and McDonald Islands\",\n alphaCode: \"HMD\",\n isCountry: true\n },\n {\n numericCode: 554,\n name: \"New Zealand\",\n alphaCode: \"NZL\",\n isCountry: true\n },\n {\n numericCode: 574,\n name: \"Norfolk Island\",\n alphaCode: \"NFK\",\n isCountry: true\n },\n {\n numericCode: 54,\n name: \"Melanesia\",\n alphaCode: \"054\",\n isCountry: false\n },\n {\n numericCode: 242,\n name: \"Fiji\",\n alphaCode: \"FJI\",\n isCountry: true\n },\n {\n numericCode: 540,\n name: \"New Caledonia\",\n alphaCode: \"NCL\",\n isCountry: true\n },\n {\n numericCode: 598,\n name: \"Papua New Guinea\",\n alphaCode: \"PNG\",\n isCountry: true\n },\n {\n numericCode: 90,\n name: \"Solomon Islands\",\n alphaCode: \"SLB\",\n isCountry: true\n },\n {\n numericCode: 548,\n name: \"Vanuatu\",\n alphaCode: \"VUT\",\n isCountry: true\n },\n {\n numericCode: 57,\n name: \"Micronesia\",\n alphaCode: \"057\",\n isCountry: false\n },\n {\n numericCode: 316,\n name: \"Guam\",\n alphaCode: \"GUM\",\n isCountry: true\n },\n {\n numericCode: 296,\n name: \"Kiribati\",\n alphaCode: \"KIR\",\n isCountry: true\n },\n {\n numericCode: 584,\n name: \"Marshall Islands\",\n alphaCode: \"MHL\",\n isCountry: true\n },\n {\n numericCode: 583,\n name: \"Micronesia (Federated States of)\",\n alphaCode: \"FSM\",\n isCountry: true\n },\n {\n numericCode: 520,\n name: \"Nauru\",\n alphaCode: \"NRU\",\n isCountry: true\n },\n {\n numericCode: 580,\n name: \"Northern Mariana Islands\",\n alphaCode: \"MNP\",\n isCountry: true\n },\n {\n numericCode: 585,\n name: \"Palau\",\n alphaCode: \"PLW\",\n isCountry: true\n },\n {\n numericCode: 581,\n name: \"United States Minor Outlying Islands\",\n alphaCode: \"UMI\",\n isCountry: true\n },\n {\n numericCode: 61,\n name: \"Polynesia\",\n alphaCode: \"061\",\n isCountry: false\n },\n {\n numericCode: 16,\n name: \"American Samoa\",\n alphaCode: \"ASM\",\n isCountry: true\n },\n {\n numericCode: 184,\n name: \"Cook Islands\",\n alphaCode: \"COK\",\n isCountry: true\n },\n {\n numericCode: 258,\n name: \"French Polynesia\",\n alphaCode: \"PYF\",\n isCountry: true\n },\n {\n numericCode: 570,\n name: \"Niue\",\n alphaCode: \"NIU\",\n isCountry: true\n },\n {\n numericCode: 612,\n name: \"Pitcairn\",\n alphaCode: \"PCN\",\n isCountry: true\n },\n {\n numericCode: 882,\n name: \"Samoa\",\n alphaCode: \"WSM\",\n isCountry: true\n },\n {\n numericCode: 772,\n name: \"Tokelau\",\n alphaCode: \"TKL\",\n isCountry: true\n },\n {\n numericCode: 776,\n name: \"Tonga\",\n alphaCode: \"TON\",\n isCountry: true\n },\n {\n numericCode: 798,\n name: \"Tuvalu\",\n alphaCode: \"TUV\",\n isCountry: true\n },\n {\n numericCode: 876,\n name: \"Wallis and Futuna Islands\",\n alphaCode: \"WLF\",\n isCountry: true\n },\n {\n numericCode: 158,\n name: \"Taiwan, Province of China\",\n alphaCode: \"TWN\",\n isCountry: true\n }\n];\n\nconst indicatorPopulationResults = [\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 1970,\n mean: 5262.5207,\n percentile2pt5: 641.5279,\n percentile5: 866.4624,\n percentile10: 1169.5356,\n median: 3694.6668,\n percentile90: 11017.4177,\n percentile95: 14771.7693,\n percentile97pt5: 19142.1997\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 1971,\n mean: 7216.9839,\n percentile2pt5: 960.0561,\n percentile5: 1273.3893,\n percentile10: 1715.4953,\n median: 5209.7276,\n percentile90: 14739.2351,\n percentile95: 19585.2456,\n percentile97pt5: 25989.3158\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 1972,\n mean: 9856.0795,\n percentile2pt5: 1425.3487,\n percentile5: 1888.4032,\n percentile10: 2511.1561,\n median: 7281.404,\n percentile90: 19912.5334,\n percentile95: 25965.7295,\n percentile97pt5: 33636.147\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 1973,\n mean: 13430.943,\n percentile2pt5: 2121.6354,\n percentile5: 2774.6773,\n percentile10: 3629.3889,\n median: 10148.3952,\n percentile90: 26760.3558,\n percentile95: 34633.6734,\n percentile97pt5: 44172.4811\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 1974,\n mean: 18320.0118,\n percentile2pt5: 3178.6226,\n percentile5: 4016.5379,\n percentile10: 5230.9168,\n median: 14248.1107,\n percentile90: 35339.2585,\n percentile95: 46296.7394,\n percentile97pt5: 57072.0728\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 1975,\n mean: 24971.7396,\n percentile2pt5: 4733.6177,\n percentile5: 5835.1529,\n percentile10: 7724.53,\n median: 19879.2482,\n percentile90: 47403.1515,\n percentile95: 61951.6614,\n percentile97pt5: 77581.0763\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 1976,\n mean: 34121.6616,\n percentile2pt5: 7094.8847,\n percentile5: 8688.7332,\n percentile10: 11054.4213,\n median: 27838.2745,\n percentile90: 63428.8183,\n percentile95: 81866.8654,\n percentile97pt5: 100361.4448\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 1977,\n mean: 46607.6119,\n percentile2pt5: 10444.1845,\n percentile5: 12766.271,\n percentile10: 16095.0977,\n median: 38618.3655,\n percentile90: 85564.7388,\n percentile95: 106806.638,\n percentile97pt5: 132374.9733\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 1978,\n mean: 63705.6178,\n percentile2pt5: 15551.0828,\n percentile5: 18990.26,\n percentile10: 23664.8474,\n median: 53844.6059,\n percentile90: 113925.089,\n percentile95: 140603.6888,\n percentile97pt5: 171486.4482\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 1979,\n mean: 87024.6402,\n percentile2pt5: 23070.4502,\n percentile5: 28292.2722,\n percentile10: 34978.9752,\n median: 75399.1968,\n percentile90: 151981.3766,\n percentile95: 182901.5253,\n percentile97pt5: 222236.2939\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 1980,\n mean: 118517.5928,\n percentile2pt5: 34473.9212,\n percentile5: 41428.5136,\n percentile10: 50687.8804,\n median: 104351.521,\n percentile90: 201864.0573,\n percentile95: 239492.693,\n percentile97pt5: 284359.7119\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 1981,\n mean: 160072.0696,\n percentile2pt5: 52043.5372,\n percentile5: 60888.1988,\n percentile10: 73388.898,\n median: 144341.5766,\n percentile90: 265342.6392,\n percentile95: 310335.6762,\n percentile97pt5: 364185.4256\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 1982,\n mean: 215581.9899,\n percentile2pt5: 77603.5688,\n percentile5: 89728.7281,\n percentile10: 106995.3309,\n median: 197196.6311,\n percentile90: 346069.3991,\n percentile95: 397624.6152,\n percentile97pt5: 461765.4783\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 1983,\n mean: 289170.587,\n percentile2pt5: 115913.563,\n percentile5: 132927.1239,\n percentile10: 155308.2234,\n median: 269299.2096,\n percentile90: 449003.2111,\n percentile95: 509103.5174,\n percentile97pt5: 572193.7015\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 1984,\n mean: 385219.1454,\n percentile2pt5: 174640.3763,\n percentile5: 196352.7922,\n percentile10: 224733.704,\n median: 363709.453,\n percentile90: 569495.311,\n percentile95: 643088.2903,\n percentile97pt5: 720841.8607\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 1985,\n mean: 510153.2925,\n percentile2pt5: 258161.0866,\n percentile5: 286181.0743,\n percentile10: 323963.8182,\n median: 488627.5271,\n percentile90: 719051.7611,\n percentile95: 801961.9395,\n percentile97pt5: 887778.7842\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 1986,\n mean: 670141.3592,\n percentile2pt5: 380616.3376,\n percentile5: 414165.5039,\n percentile10: 458435.1201,\n median: 649722.1208,\n percentile90: 905454.6444,\n percentile95: 987603.8324,\n percentile97pt5: 1071373.5531\n },\n {\n isInUnion: true,\n ageRange: \"15-49countResul\",\n year: 1987,\n mean: 873759.3245,\n percentile2pt5: 558303.5445,\n percentile5: 593471.5795,\n percentile10: 647173.0132,\n median: 857534.8603,\n percentile90: 1123291.6737,\n percentile95: 1211392.4063,\n percentile97pt5: 1285141.8191\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 1988,\n mean: 1128232.8737,\n percentile2pt5: 809359.8063,\n percentile5: 848921.4656,\n percentile10: 901455.8682,\n median: 1115137.3336,\n percentile90: 1368428.4431,\n percentile95: 1450925.7565,\n percentile97pt5: 1519139.6217\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 1989,\n mean: 1443664.3863,\n percentile2pt5: 1148057.0076,\n percentile5: 1192741.6799,\n percentile10: 1244953.8456,\n median: 1435214.3036,\n percentile90: 1653652.851,\n percentile95: 1722404.3491,\n percentile97pt5: 1773792.2078\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 1990,\n mean: 1829716.2151,\n percentile2pt5: 1615044.2394,\n percentile5: 1647844.2486,\n percentile10: 1684791.8541,\n median: 1826156.475,\n percentile90: 1979803.798,\n percentile95: 2020506.9684,\n percentile97pt5: 2059313.991\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 1991,\n mean: 2293242.1349,\n percentile2pt5: 1860050.0262,\n percentile5: 1932331.7139,\n percentile10: 2009729.0321,\n median: 2282028.0584,\n percentile90: 2590954.6427,\n percentile95: 2679142.7895,\n percentile97pt5: 2762898.6828\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 1992,\n mean: 2833778.27,\n percentile2pt5: 2153693.5279,\n percentile5: 2255076.5799,\n percentile10: 2368414.1568,\n median: 2823262.044,\n percentile90: 3308873.21,\n percentile95: 3458887.4387,\n percentile97pt5: 3580607.2338\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 1993,\n mean: 3451008.7723,\n percentile2pt5: 2468219.3734,\n percentile5: 2621963.3354,\n percentile10: 2778773.9856,\n median: 3433017.9383,\n percentile90: 4131062.0859,\n percentile95: 4349158.0365,\n percentile97pt5: 4543112.3062\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 1994,\n mean: 4139566.2383,\n percentile2pt5: 2850645.5816,\n percentile5: 3008995.6565,\n percentile10: 3251216.1785,\n median: 4111001.0039,\n percentile90: 5064129.5553,\n percentile95: 5337852.4537,\n percentile97pt5: 5598320.9684\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 1995,\n mean: 4892080.3214,\n percentile2pt5: 3264576.0867,\n percentile5: 3484338.2801,\n percentile10: 3764055.9371,\n median: 4861780.1195,\n percentile90: 6049917.2571,\n percentile95: 6399807.2528,\n percentile97pt5: 6739074.4421\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 1996,\n mean: 5702650.2846,\n percentile2pt5: 3719773.3469,\n percentile5: 4005385.713,\n percentile10: 4355449.367,\n median: 5652369.4494,\n percentile90: 7116022.394,\n percentile95: 7492821.9234,\n percentile97pt5: 7917732.9574\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 1997,\n mean: 6565468.2263,\n percentile2pt5: 4210487.7898,\n percentile5: 4583238.6416,\n percentile10: 5003456.8542,\n median: 6528656.8972,\n percentile90: 8181078.7205,\n percentile95: 8672299.3256,\n percentile97pt5: 9092269.6676\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 1998,\n mean: 7472419.9548,\n percentile2pt5: 4763373.5092,\n percentile5: 5202225.466,\n percentile10: 5699231.9254,\n median: 7445181.7506,\n percentile90: 9297795.0346,\n percentile95: 9826401.8555,\n percentile97pt5: 10305091.6616\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 1999,\n mean: 8406644.6788,\n percentile2pt5: 5376385.5334,\n percentile5: 5882705.8063,\n percentile10: 6424445.5809,\n median: 8410996.4064,\n percentile90: 10429789.3116,\n percentile95: 11032261.5386,\n percentile97pt5: 11495274.4077\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 2000,\n mean: 9370464.695,\n percentile2pt5: 6081961.6008,\n percentile5: 6588573.5191,\n percentile10: 7161326.1367,\n median: 9404095.7708,\n percentile90: 11564687.5098,\n percentile95: 12216462.279,\n percentile97pt5: 12730724.8323\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 2001,\n mean: 10341767.046,\n percentile2pt5: 6813885.4732,\n percentile5: 7292229.9884,\n percentile10: 7941485.3882,\n median: 10387341.4892,\n percentile90: 12657887.0418,\n percentile95: 13372318.548,\n percentile97pt5: 13854327.4467\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 2002,\n mean: 11319424.8578,\n percentile2pt5: 7514853.6153,\n percentile5: 8104878.0138,\n percentile10: 8762374.0678,\n median: 11356850.4529,\n percentile90: 13780055.7711,\n percentile95: 14422845.8129,\n percentile97pt5: 14900461.1128\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 2003,\n mean: 12294653.0878,\n percentile2pt5: 8271288.398,\n percentile5: 8873438.7092,\n percentile10: 9594003.3472,\n median: 12371681.4595,\n percentile90: 14854625.4434,\n percentile95: 15530815.5555,\n percentile97pt5: 15993050.3793\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 2004,\n mean: 13251453.3252,\n percentile2pt5: 8951249.5934,\n percentile5: 9641906.4704,\n percentile10: 10491351.4713,\n median: 13330144.3793,\n percentile90: 15894797.2956,\n percentile95: 16544803.0194,\n percentile97pt5: 17065932.5148\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 2005,\n mean: 14181516.0858,\n percentile2pt5: 9740682.0143,\n percentile5: 10416805.3068,\n percentile10: 11322926.1052,\n median: 14279574.0894,\n percentile90: 16852288.4662,\n percentile95: 17549439.4226,\n percentile97pt5: 18008487.832\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 2006,\n mean: 15072402.5137,\n percentile2pt5: 10453770.6317,\n percentile5: 11227440.5273,\n percentile10: 12158554.771,\n median: 15182371.6006,\n percentile90: 17759519.4658,\n percentile95: 18448756.8438,\n percentile97pt5: 18941792.1112\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 2007,\n mean: 15924415.6978,\n percentile2pt5: 11174636.8355,\n percentile5: 12005478.3935,\n percentile10: 12993472.4523,\n median: 16048741.0202,\n percentile90: 18639430.3766,\n percentile95: 19269429.724,\n percentile97pt5: 19803017.7656\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 2008,\n mean: 16733692.313,\n percentile2pt5: 11986261.2872,\n percentile5: 12740518.4608,\n percentile10: 13803515.2972,\n median: 16880579.3678,\n percentile90: 19460867.4801,\n percentile95: 20056761.8049,\n percentile97pt5: 20623420.2659\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 2009,\n mean: 17508633.2573,\n percentile2pt5: 12733969.8558,\n percentile5: 13561322.2179,\n percentile10: 14548516.2758,\n median: 17655268.9824,\n percentile90: 20214768.987,\n percentile95: 20852302.43,\n percentile97pt5: 21387748.2996\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 2010,\n mean: 18243139.7338,\n percentile2pt5: 13456110.4676,\n percentile5: 14312371.3998,\n percentile10: 15271810.3857,\n median: 18388346.7554,\n percentile90: 20963912.3788,\n percentile95: 21604252.3002,\n percentile97pt5: 22191761.0007\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 2011,\n mean: 18941064.4682,\n percentile2pt5: 14151181.8378,\n percentile5: 15077405.7142,\n percentile10: 15987868.9725,\n median: 19095507.1889,\n percentile90: 21667338.8705,\n percentile95: 22310928.8781,\n percentile97pt5: 22903011.403\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 2012,\n mean: 19595291.1237,\n percentile2pt5: 14841659.7945,\n percentile5: 15679446.8349,\n percentile10: 16677329.6514,\n median: 19736866.19,\n percentile90: 22342254.0063,\n percentile95: 23024168.684,\n percentile97pt5: 23582509.2967\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 2013,\n mean: 20212615.0082,\n percentile2pt5: 15496554.2382,\n percentile5: 16358803.8371,\n percentile10: 17335257.5345,\n median: 20334343.9726,\n percentile90: 22959382.2073,\n percentile95: 23675082.6775,\n percentile97pt5: 24297322.6486\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 2014,\n mean: 20785115.978,\n percentile2pt5: 16016439.8563,\n percentile5: 16972201.6879,\n percentile10: 17918382.9829,\n median: 20908060.671,\n percentile90: 23514895.2863,\n percentile95: 24249397.7369,\n percentile97pt5: 24828484.1377\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 2015,\n mean: 21318488.1478,\n percentile2pt5: 16574457.4227,\n percentile5: 17485871.591,\n percentile10: 18462132.3496,\n median: 21427955.3639,\n percentile90: 24039202.9718,\n percentile95: 24794300.5471,\n percentile97pt5: 25419203.0949\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 2016,\n mean: 21808693.738,\n percentile2pt5: 17026015.264,\n percentile5: 17961520.0264,\n percentile10: 18927274.1047,\n median: 21923758.6317,\n percentile90: 24536504.7084,\n percentile95: 25293171.0403,\n percentile97pt5: 25944406.0171\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 2017,\n mean: 22269954.2326,\n percentile2pt5: 17564127.6843,\n percentile5: 18473902.2361,\n percentile10: 19430960.2646,\n median: 22357956.3837,\n percentile90: 25041430.5761,\n percentile95: 25748375.5432,\n percentile97pt5: 26473978.6389\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 2018,\n mean: 22705316.943,\n percentile2pt5: 18015541.805,\n percentile5: 18946004.8873,\n percentile10: 19835948.0516,\n median: 22781023.4008,\n percentile90: 25501834.5656,\n percentile95: 26255781.1419,\n percentile97pt5: 26966140.5649\n }\n];\n\nconst indicatorProportionalResults = [\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 1970,\n mean: 0.0004,\n percentile2pt5: 0.0001,\n percentile5: 0.0001,\n percentile10: 0.0001,\n median: 0.0003,\n percentile90: 0.0009,\n percentile95: 0.0012,\n percentile97pt5: 0.0016\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 1971,\n mean: 0.0006,\n percentile2pt5: 0.0001,\n percentile5: 0.0001,\n percentile10: 0.0001,\n median: 0.0004,\n percentile90: 0.0012,\n percentile95: 0.0016,\n percentile97pt5: 0.0021\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 1972,\n mean: 0.0008,\n percentile2pt5: 0.0001,\n percentile5: 0.0002,\n percentile10: 0.0002,\n median: 0.0006,\n percentile90: 0.0016,\n percentile95: 0.0021,\n percentile97pt5: 0.0027\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 1973,\n mean: 0.0011,\n percentile2pt5: 0.0002,\n percentile5: 0.0002,\n percentile10: 0.0003,\n median: 0.0008,\n percentile90: 0.0021,\n percentile95: 0.0027,\n percentile97pt5: 0.0035\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 1974,\n mean: 0.0014,\n percentile2pt5: 0.0002,\n percentile5: 0.0003,\n percentile10: 0.0004,\n median: 0.0011,\n percentile90: 0.0027,\n percentile95: 0.0036,\n percentile97pt5: 0.0044\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 1975,\n mean: 0.0019,\n percentile2pt5: 0.0004,\n percentile5: 0.0004,\n percentile10: 0.0006,\n median: 0.0015,\n percentile90: 0.0036,\n percentile95: 0.0047,\n percentile97pt5: 0.0059\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 1976,\n mean: 0.0026,\n percentile2pt5: 0.0005,\n percentile5: 0.0007,\n percentile10: 0.0008,\n median: 0.0021,\n percentile90: 0.0048,\n percentile95: 0.0061,\n percentile97pt5: 0.0075\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 1977,\n mean: 0.0034,\n percentile2pt5: 0.0008,\n percentile5: 0.0009,\n percentile10: 0.0012,\n median: 0.0028,\n percentile90: 0.0063,\n percentile95: 0.0078,\n percentile97pt5: 0.0097\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 1978,\n mean: 0.0045,\n percentile2pt5: 0.0011,\n percentile5: 0.0014,\n percentile10: 0.0017,\n median: 0.0038,\n percentile90: 0.0081,\n percentile95: 0.01,\n percentile97pt5: 0.0122\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 1979,\n mean: 0.006,\n percentile2pt5: 0.0016,\n percentile5: 0.002,\n percentile10: 0.0024,\n median: 0.0052,\n percentile90: 0.0106,\n percentile95: 0.0127,\n percentile97pt5: 0.0154\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 1980,\n mean: 0.008,\n percentile2pt5: 0.0023,\n percentile5: 0.0028,\n percentile10: 0.0034,\n median: 0.007,\n percentile90: 0.0136,\n percentile95: 0.0161,\n percentile97pt5: 0.0192\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 1981,\n mean: 0.0105,\n percentile2pt5: 0.0034,\n percentile5: 0.004,\n percentile10: 0.0048,\n median: 0.0095,\n percentile90: 0.0174,\n percentile95: 0.0204,\n percentile97pt5: 0.0239\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 1982,\n mean: 0.0138,\n percentile2pt5: 0.005,\n percentile5: 0.0057,\n percentile10: 0.0068,\n median: 0.0126,\n percentile90: 0.0221,\n percentile95: 0.0254,\n percentile97pt5: 0.0295\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 1983,\n mean: 0.0179,\n percentile2pt5: 0.0072,\n percentile5: 0.0082,\n percentile10: 0.0096,\n median: 0.0167,\n percentile90: 0.0278,\n percentile95: 0.0315,\n percentile97pt5: 0.0354\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 1984,\n mean: 0.0231,\n percentile2pt5: 0.0105,\n percentile5: 0.0118,\n percentile10: 0.0135,\n median: 0.0218,\n percentile90: 0.0342,\n percentile95: 0.0386,\n percentile97pt5: 0.0432\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 1985,\n mean: 0.0297,\n percentile2pt5: 0.015,\n percentile5: 0.0166,\n percentile10: 0.0188,\n median: 0.0284,\n percentile90: 0.0418,\n percentile95: 0.0466,\n percentile97pt5: 0.0516\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 1986,\n mean: 0.0378,\n percentile2pt5: 0.0215,\n percentile5: 0.0234,\n percentile10: 0.0259,\n median: 0.0366,\n percentile90: 0.0511,\n percentile95: 0.0557,\n percentile97pt5: 0.0604\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 1987,\n mean: 0.0478,\n percentile2pt5: 0.0305,\n percentile5: 0.0325,\n percentile10: 0.0354,\n median: 0.0469,\n percentile90: 0.0614,\n percentile95: 0.0663,\n percentile97pt5: 0.0703\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 1988,\n mean: 0.0598,\n percentile2pt5: 0.0429,\n percentile5: 0.045,\n percentile10: 0.0478,\n median: 0.0591,\n percentile90: 0.0726,\n percentile95: 0.0769,\n percentile97pt5: 0.0806\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 1989,\n mean: 0.0742,\n percentile2pt5: 0.059,\n percentile5: 0.0613,\n percentile10: 0.064,\n median: 0.0738,\n percentile90: 0.085,\n percentile95: 0.0886,\n percentile97pt5: 0.0912\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 1990,\n mean: 0.0912,\n percentile2pt5: 0.0805,\n percentile5: 0.0821,\n percentile10: 0.084,\n median: 0.091,\n percentile90: 0.0987,\n percentile95: 0.1007,\n percentile97pt5: 0.1027\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 1991,\n mean: 0.1111,\n percentile2pt5: 0.0901,\n percentile5: 0.0937,\n percentile10: 0.0974,\n median: 0.1106,\n percentile90: 0.1256,\n percentile95: 0.1298,\n percentile97pt5: 0.1339\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 1992,\n mean: 0.1335,\n percentile2pt5: 0.1015,\n percentile5: 0.1063,\n percentile10: 0.1116,\n median: 0.133,\n percentile90: 0.1559,\n percentile95: 0.163,\n percentile97pt5: 0.1687\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 1993,\n mean: 0.1581,\n percentile2pt5: 0.1131,\n percentile5: 0.1201,\n percentile10: 0.1273,\n median: 0.1573,\n percentile90: 0.1893,\n percentile95: 0.1993,\n percentile97pt5: 0.2081\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 1994,\n mean: 0.1843,\n percentile2pt5: 0.1269,\n percentile5: 0.134,\n percentile10: 0.1448,\n median: 0.1831,\n percentile90: 0.2255,\n percentile95: 0.2377,\n percentile97pt5: 0.2493\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 1995,\n mean: 0.2117,\n percentile2pt5: 0.1412,\n percentile5: 0.1508,\n percentile10: 0.1629,\n median: 0.2104,\n percentile90: 0.2618,\n percentile95: 0.2769,\n percentile97pt5: 0.2916\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 1996,\n mean: 0.2398,\n percentile2pt5: 0.1564,\n percentile5: 0.1684,\n percentile10: 0.1831,\n median: 0.2377,\n percentile90: 0.2992,\n percentile95: 0.3151,\n percentile97pt5: 0.3329\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 1997,\n mean: 0.2683,\n percentile2pt5: 0.172,\n percentile5: 0.1873,\n percentile10: 0.2044,\n median: 0.2668,\n percentile90: 0.3343,\n percentile95: 0.3543,\n percentile97pt5: 0.3715\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 1998,\n mean: 0.2966,\n percentile2pt5: 0.1891,\n percentile5: 0.2065,\n percentile10: 0.2262,\n median: 0.2955,\n percentile90: 0.3691,\n percentile95: 0.3901,\n percentile97pt5: 0.4091\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 1999,\n mean: 0.3241,\n percentile2pt5: 0.2073,\n percentile5: 0.2268,\n percentile10: 0.2477,\n median: 0.3243,\n percentile90: 0.4021,\n percentile95: 0.4253,\n percentile97pt5: 0.4432\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 2000,\n mean: 0.3507,\n percentile2pt5: 0.2276,\n percentile5: 0.2466,\n percentile10: 0.268,\n median: 0.352,\n percentile90: 0.4329,\n percentile95: 0.4573,\n percentile97pt5: 0.4765\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 2001,\n mean: 0.3761,\n percentile2pt5: 0.2478,\n percentile5: 0.2652,\n percentile10: 0.2888,\n median: 0.3778,\n percentile90: 0.4604,\n percentile95: 0.4864,\n percentile97pt5: 0.5039\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 2002,\n mean: 0.3999,\n percentile2pt5: 0.2655,\n percentile5: 0.2864,\n percentile10: 0.3096,\n median: 0.4013,\n percentile90: 0.4869,\n percentile95: 0.5096,\n percentile97pt5: 0.5265\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 2003,\n mean: 0.4222,\n percentile2pt5: 0.284,\n percentile5: 0.3047,\n percentile10: 0.3294,\n median: 0.4248,\n percentile90: 0.5101,\n percentile95: 0.5333,\n percentile97pt5: 0.5492\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 2004,\n mean: 0.4428,\n percentile2pt5: 0.2991,\n percentile5: 0.3222,\n percentile10: 0.3506,\n median: 0.4455,\n percentile90: 0.5312,\n percentile95: 0.5529,\n percentile97pt5: 0.5703\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 2005,\n mean: 0.462,\n percentile2pt5: 0.3173,\n percentile5: 0.3394,\n percentile10: 0.3689,\n median: 0.4652,\n percentile90: 0.549,\n percentile95: 0.5718,\n percentile97pt5: 0.5867\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 2006,\n mean: 0.4799,\n percentile2pt5: 0.3328,\n percentile5: 0.3575,\n percentile10: 0.3871,\n median: 0.4834,\n percentile90: 0.5654,\n percentile95: 0.5874,\n percentile97pt5: 0.6031\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 2007,\n mean: 0.4961,\n percentile2pt5: 0.3481,\n percentile5: 0.374,\n percentile10: 0.4048,\n median: 0.5,\n percentile90: 0.5807,\n percentile95: 0.6003,\n percentile97pt5: 0.6169\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 2008,\n mean: 0.5108,\n percentile2pt5: 0.3659,\n percentile5: 0.3889,\n percentile10: 0.4214,\n median: 0.5153,\n percentile90: 0.5941,\n percentile95: 0.6122,\n percentile97pt5: 0.6295\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 2009,\n mean: 0.5244,\n percentile2pt5: 0.3814,\n percentile5: 0.4062,\n percentile10: 0.4357,\n median: 0.5288,\n percentile90: 0.6054,\n percentile95: 0.6245,\n percentile97pt5: 0.6405\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 2010,\n mean: 0.5367,\n percentile2pt5: 0.3958,\n percentile5: 0.421,\n percentile10: 0.4493,\n median: 0.5409,\n percentile90: 0.6167,\n percentile95: 0.6355,\n percentile97pt5: 0.6528\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 2011,\n mean: 0.5477,\n percentile2pt5: 0.4092,\n percentile5: 0.436,\n percentile10: 0.4623,\n median: 0.5522,\n percentile90: 0.6266,\n percentile95: 0.6452,\n percentile97pt5: 0.6623\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 2012,\n mean: 0.5578,\n percentile2pt5: 0.4225,\n percentile5: 0.4463,\n percentile10: 0.4747,\n median: 0.5618,\n percentile90: 0.636,\n percentile95: 0.6554,\n percentile97pt5: 0.6713\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 2013,\n mean: 0.567,\n percentile2pt5: 0.4347,\n percentile5: 0.4589,\n percentile10: 0.4863,\n median: 0.5704,\n percentile90: 0.6441,\n percentile95: 0.6642,\n percentile97pt5: 0.6816\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 2014,\n mean: 0.5755,\n percentile2pt5: 0.4435,\n percentile5: 0.4699,\n percentile10: 0.4961,\n median: 0.5789,\n percentile90: 0.6511,\n percentile95: 0.6714,\n percentile97pt5: 0.6874\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 2015,\n mean: 0.5831,\n percentile2pt5: 0.4533,\n percentile5: 0.4783,\n percentile10: 0.505,\n median: 0.5861,\n percentile90: 0.6575,\n percentile95: 0.6782,\n percentile97pt5: 0.6952\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 2016,\n mean: 0.5899,\n percentile2pt5: 0.4606,\n percentile5: 0.4859,\n percentile10: 0.512,\n median: 0.5931,\n percentile90: 0.6637,\n percentile95: 0.6842,\n percentile97pt5: 0.7018\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 2017,\n mean: 0.5963,\n percentile2pt5: 0.4703,\n percentile5: 0.4947,\n percentile10: 0.5203,\n median: 0.5987,\n percentile90: 0.6705,\n percentile95: 0.6894,\n percentile97pt5: 0.7089\n },\n {\n isInUnion: true,\n ageRange: \"15-49\",\n year: 2018,\n mean: 0.6022,\n percentile2pt5: 0.4778,\n percentile5: 0.5025,\n percentile10: 0.5261,\n median: 0.6042,\n percentile90: 0.6764,\n percentile95: 0.6964,\n percentile97pt5: 0.7152\n }\n];\n\nconst populationResults = [].concat(\n ...indicators\n .filter(indicator => indicator !== \"modernToTotalRatio\")\n .map(indicator =>\n indicatorPopulationResults.map(datum => ({\n ...datum,\n indicator: indicator.value\n }))\n )\n);\n\nconst proportionalResults = [].concat(\n ...indicators.map(indicator =>\n indicatorProportionalResults.map(datum => ({\n ...datum,\n indicator: indicator.value\n }))\n )\n);\n\nexport const databases = [\n {\n id: 1,\n type: \"survey\",\n name: \"UNPD 2019\",\n divisions: divisions,\n isGlobal: true,\n isDefault: true,\n isInUse: true\n },\n {\n id: 2,\n type: \"survey\",\n name: \"Track20\",\n divisions: divisions,\n isGlobal: true\n },\n {\n id: 3,\n type: \"survey\",\n name: \"YEM_2019\",\n divisions: divisions.filter(division => division.numericCode === 887),\n regionCodes: [\"ZZZ\"]\n },\n {\n id: 4,\n type: \"survey\",\n name: \"NPL_2019\",\n divisions: divisions.filter(division => division.numericCode === 524)\n },\n {\n id: 5,\n type: \"population\",\n name: \"UNPD 2019\",\n divisions: divisions,\n isGlobal: true,\n isDefault: true,\n isInUse: true\n },\n {\n id: 6,\n type: \"population\",\n name: \"Track20\",\n divisions: divisions,\n isGlobal: true\n },\n {\n id: 7,\n type: \"population\",\n name: \"YEM_2019\",\n divisions: divisions.filter(division => division.numericCode === 887),\n regionCodes: [\"ZZZ\"]\n },\n {\n id: 8,\n type: \"population\",\n name: \"NPL_2019\",\n divisions: divisions.filter(division => division.numericCode === 524)\n },\n {\n id: 9,\n type: \"emu\",\n name: \"YEM_2019\",\n divisions: divisions.filter(division => division.numericCode === 887)\n }\n];\n\nexport const emuData = [\n {\n divisionNumericCode: 50,\n startYear: 1995,\n endYear: 2000,\n emu: 7,\n serviceStatisticType: \"clients\"\n },\n {\n divisionNumericCode: 50,\n startYear: 2000,\n endYear: 2005,\n emu: 12.5,\n serviceStatisticType: \"visitors\"\n }\n];\n\nexport const populationData = [\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-19\",\n midYear: 1970,\n population: 835341\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-19\",\n midYear: 1970,\n population: 2122664\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-49\",\n midYear: 1970,\n population: 2001219\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-49\",\n midYear: 1970,\n population: 12125896\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-19\",\n midYear: 1971,\n population: 839164\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-19\",\n midYear: 1971,\n population: 2132379\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-49\",\n midYear: 1971,\n population: 2030358\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-49\",\n midYear: 1971,\n population: 12329686\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-19\",\n midYear: 1972,\n population: 849655\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-19\",\n midYear: 1972,\n population: 2159037\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-49\",\n midYear: 1972,\n population: 2063445\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-49\",\n midYear: 1972,\n population: 12512890\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-19\",\n midYear: 1973,\n population: 868980\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-19\",\n midYear: 1973,\n population: 2208143\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-49\",\n midYear: 1973,\n population: 2104193\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-49\",\n midYear: 1973,\n population: 12691913\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-19\",\n midYear: 1974,\n population: 896391\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-19\",\n midYear: 1974,\n population: 2277797\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-49\",\n midYear: 1974,\n population: 2154034\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-49\",\n midYear: 1974,\n population: 12882973\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-19\",\n midYear: 1975,\n population: 963008\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-19\",\n midYear: 1975,\n population: 2334906\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-49\",\n midYear: 1975,\n population: 2238571\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-49\",\n midYear: 1975,\n population: 13075233\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-19\",\n midYear: 1976,\n population: 1058773\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-19\",\n midYear: 1976,\n population: 2451627\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-49\",\n midYear: 1976,\n population: 2346888\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-49\",\n midYear: 1976,\n population: 13335207\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-19\",\n midYear: 1977,\n population: 1163786\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-19\",\n midYear: 1977,\n population: 2575700\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-49\",\n midYear: 1977,\n population: 2469894\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-49\",\n midYear: 1977,\n population: 13646590\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-19\",\n midYear: 1978,\n population: 1274895\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-19\",\n midYear: 1978,\n population: 2698963\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-49\",\n midYear: 1978,\n population: 2604465\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-49\",\n midYear: 1978,\n population: 14002941\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-19\",\n midYear: 1979,\n population: 1388669\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-19\",\n midYear: 1979,\n population: 2813999\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-49\",\n midYear: 1979,\n population: 2747135\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-49\",\n midYear: 1979,\n population: 14400963\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-19\",\n midYear: 1980,\n population: 1502402\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-19\",\n midYear: 1980,\n population: 2916027\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-49\",\n midYear: 1980,\n population: 2894764\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-49\",\n midYear: 1980,\n population: 14835669\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-19\",\n midYear: 1981,\n population: 1605075\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-19\",\n midYear: 1981,\n population: 2985629\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-49\",\n midYear: 1981,\n population: 3026009\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-49\",\n midYear: 1981,\n population: 15221932\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-19\",\n midYear: 1982,\n population: 1709310\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-19\",\n midYear: 1982,\n population: 3048806\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-49\",\n midYear: 1982,\n population: 3165502\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-49\",\n midYear: 1982,\n population: 15666453\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-19\",\n midYear: 1983,\n population: 1812915\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-19\",\n midYear: 1983,\n population: 3102182\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-49\",\n midYear: 1983,\n population: 3309557\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-49\",\n midYear: 1983,\n population: 16154891\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-19\",\n midYear: 1984,\n population: 1913091\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-19\",\n midYear: 1984,\n population: 3141961\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-49\",\n midYear: 1984,\n population: 3453177\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-49\",\n midYear: 1984,\n population: 16667150\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-19\",\n midYear: 1985,\n population: 2008792\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-19\",\n midYear: 1985,\n population: 3167754\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-49\",\n midYear: 1985,\n population: 3594239\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-49\",\n midYear: 1985,\n population: 17195502\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-19\",\n midYear: 1986,\n population: 2092549\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-19\",\n midYear: 1986,\n population: 3169588\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-49\",\n midYear: 1986,\n population: 3725190\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-49\",\n midYear: 1986,\n population: 17730221\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-19\",\n midYear: 1987,\n population: 2169164\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-19\",\n midYear: 1987,\n population: 3156987\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-49\",\n midYear: 1987,\n population: 3850835\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-49\",\n midYear: 1987,\n population: 18283954\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-19\",\n midYear: 1988,\n population: 2244880\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-19\",\n midYear: 1988,\n population: 3140181\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-49\",\n midYear: 1988,\n population: 3975719\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-49\",\n midYear: 1988,\n population: 18855590\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-19\",\n midYear: 1989,\n population: 2331342\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-19\",\n midYear: 1989,\n population: 3135171\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-49\",\n midYear: 1989,\n population: 4109458\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-49\",\n midYear: 1989,\n population: 19448250\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-19\",\n midYear: 1990,\n population: 2436409\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-19\",\n midYear: 1990,\n population: 3150633\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-49\",\n midYear: 1990,\n population: 4258613\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-49\",\n midYear: 1990,\n population: 20060901\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-19\",\n midYear: 1991,\n population: 2550157\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-19\",\n midYear: 1991,\n population: 3171697\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-49\",\n midYear: 1991,\n population: 4407826\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-49\",\n midYear: 1991,\n population: 20632958\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-19\",\n midYear: 1992,\n population: 2684635\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-19\",\n midYear: 1992,\n population: 3211874\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-49\",\n midYear: 1992,\n population: 4574307\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-49\",\n midYear: 1992,\n population: 21220719\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-19\",\n midYear: 1993,\n population: 2833981\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-19\",\n midYear: 1993,\n population: 3261946\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-49\",\n midYear: 1993,\n population: 4755120\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-49\",\n midYear: 1993,\n population: 21827167\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-19\",\n midYear: 1994,\n population: 2986919\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-19\",\n midYear: 1994,\n population: 3307923\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-49\",\n midYear: 1994,\n population: 4943510\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-49\",\n midYear: 1994,\n population: 22456462\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-19\",\n midYear: 1995,\n population: 3136025\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-19\",\n midYear: 1995,\n population: 3341924\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-49\",\n midYear: 1995,\n population: 5135189\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-49\",\n midYear: 1995,\n population: 23112715\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-19\",\n midYear: 1996,\n population: 3281655\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-19\",\n midYear: 1996,\n population: 3365235\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-49\",\n midYear: 1996,\n population: 5328724\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-49\",\n midYear: 1996,\n population: 23782136\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-19\",\n midYear: 1997,\n population: 3422335\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-19\",\n midYear: 1997,\n population: 3377213\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-49\",\n midYear: 1997,\n population: 5523980\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-49\",\n midYear: 1997,\n population: 24474421\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-19\",\n midYear: 1998,\n population: 3557882\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-19\",\n midYear: 1998,\n population: 3378601\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-49\",\n midYear: 1998,\n population: 5721108\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-49\",\n midYear: 1998,\n population: 25191852\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-19\",\n midYear: 1999,\n population: 3690395\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-19\",\n midYear: 1999,\n population: 3372180\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-49\",\n midYear: 1999,\n population: 5921938\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-49\",\n midYear: 1999,\n population: 25939372\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-19\",\n midYear: 2000,\n population: 3821321\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-19\",\n midYear: 2000,\n population: 3359813\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-49\",\n midYear: 2000,\n population: 6126717\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-49\",\n midYear: 2000,\n population: 26716389\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-19\",\n midYear: 2001,\n population: 3945707\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-19\",\n midYear: 2001,\n population: 3337709\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-49\",\n midYear: 2001,\n population: 6327097\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-49\",\n midYear: 2001,\n population: 27494648\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-19\",\n midYear: 2002,\n population: 4066872\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-19\",\n midYear: 2002,\n population: 3309422\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-49\",\n midYear: 2002,\n population: 6527978\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-49\",\n midYear: 2002,\n population: 28303334\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-19\",\n midYear: 2003,\n population: 4184102\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-19\",\n midYear: 2003,\n population: 3274872\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-49\",\n midYear: 2003,\n population: 6725002\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-49\",\n midYear: 2003,\n population: 29121950\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-19\",\n midYear: 2004,\n population: 4295761\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-19\",\n midYear: 2004,\n population: 3233346\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-49\",\n midYear: 2004,\n population: 6912794\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-49\",\n midYear: 2004,\n population: 29924092\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-19\",\n midYear: 2005,\n population: 4401431\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-19\",\n midYear: 2005,\n population: 3185163\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-49\",\n midYear: 2005,\n population: 7089047\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-49\",\n midYear: 2005,\n population: 30693877\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-19\",\n midYear: 2006,\n population: 4494919\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-19\",\n midYear: 2006,\n population: 3126635\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-49\",\n midYear: 2006,\n population: 7248340\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-49\",\n midYear: 2006,\n population: 31409495\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-19\",\n midYear: 2007,\n population: 4580163\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-19\",\n midYear: 2007,\n population: 3061476\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-49\",\n midYear: 2007,\n population: 7393800\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-49\",\n midYear: 2007,\n population: 32099079\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-19\",\n midYear: 2008,\n population: 4661869\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-19\",\n midYear: 2008,\n population: 2993410\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-49\",\n midYear: 2008,\n population: 7528233\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-49\",\n midYear: 2008,\n population: 32759272\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-19\",\n midYear: 2009,\n population: 4745554\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-19\",\n midYear: 2009,\n population: 2926142\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-49\",\n midYear: 2009,\n population: 7656245\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-49\",\n midYear: 2009,\n population: 33389813\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-19\",\n midYear: 2010,\n population: 4835862\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-19\",\n midYear: 2010,\n population: 2862292\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-49\",\n midYear: 2010,\n population: 7783095\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-49\",\n midYear: 2010,\n population: 33993748\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-19\",\n midYear: 2011,\n population: 4932228\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-19\",\n midYear: 2011,\n population: 2801085\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-49\",\n midYear: 2011,\n population: 7913779\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-49\",\n midYear: 2011,\n population: 34581666\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-19\",\n midYear: 2012,\n population: 5030118\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-19\",\n midYear: 2012,\n population: 2739665\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-49\",\n midYear: 2012,\n population: 8038242\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-49\",\n midYear: 2012,\n population: 35130430\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-19\",\n midYear: 2013,\n population: 5129162\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-19\",\n midYear: 2013,\n population: 2677782\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-49\",\n midYear: 2013,\n population: 8156992\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-49\",\n midYear: 2013,\n population: 35646420\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-19\",\n midYear: 2014,\n population: 5224029\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-19\",\n midYear: 2014,\n population: 2617338\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-49\",\n midYear: 2014,\n population: 8294030\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-49\",\n midYear: 2014,\n population: 36117273\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-19\",\n midYear: 2015,\n population: 5317400\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-19\",\n midYear: 2015,\n population: 2553738\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-49\",\n midYear: 2015,\n population: 8437086\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-49\",\n midYear: 2015,\n population: 36561634\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-19\",\n midYear: 2016,\n population: 5408664\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-19\",\n midYear: 2016,\n population: 2487059\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-49\",\n midYear: 2016,\n population: 8588336\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-49\",\n midYear: 2016,\n population: 36967045\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-19\",\n midYear: 2017,\n population: 5497075\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-19\",\n midYear: 2017,\n population: 2417371\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-49\",\n midYear: 2017,\n population: 8745762\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-49\",\n midYear: 2017,\n population: 37346722\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-19\",\n midYear: 2018,\n population: 5579052\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-19\",\n midYear: 2018,\n population: 2343605\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-49\",\n midYear: 2018,\n population: 8906076\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-49\",\n midYear: 2018,\n population: 37702956\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-19\",\n midYear: 2019,\n population: 5648586\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-19\",\n midYear: 2019,\n population: 2263990\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-49\",\n midYear: 2019,\n population: 9064122\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-49\",\n midYear: 2019,\n population: 38040929\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-19\",\n midYear: 2020,\n population: 5703167\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-19\",\n midYear: 2020,\n population: 2178496\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-49\",\n midYear: 2020,\n population: 9218537\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-49\",\n midYear: 2020,\n population: 38365313\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-19\",\n midYear: 2021,\n population: 5744734\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-19\",\n midYear: 2021,\n population: 2088877\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-49\",\n midYear: 2021,\n population: 9376278\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-49\",\n midYear: 2021,\n population: 38686337\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-19\",\n midYear: 2022,\n population: 5767762\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-19\",\n midYear: 2022,\n population: 1994126\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-49\",\n midYear: 2022,\n population: 9529708\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-49\",\n midYear: 2022,\n population: 39001460\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-19\",\n midYear: 2023,\n population: 5778581\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-19\",\n midYear: 2023,\n population: 1897414\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-49\",\n midYear: 2023,\n population: 9681709\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-49\",\n midYear: 2023,\n population: 39289951\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-19\",\n midYear: 2024,\n population: 5787830\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-19\",\n midYear: 2024,\n population: 1802807\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-49\",\n midYear: 2024,\n population: 9838184\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-49\",\n midYear: 2024,\n population: 39524262\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-19\",\n midYear: 2025,\n population: 5803423\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-19\",\n midYear: 2025,\n population: 1712818\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-49\",\n midYear: 2025,\n population: 10004484\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-49\",\n midYear: 2025,\n population: 39686816\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-19\",\n midYear: 2026,\n population: 5827037\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-19\",\n midYear: 2026,\n population: 1627648\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-49\",\n midYear: 2026,\n population: 10188491\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-49\",\n midYear: 2026,\n population: 39794717\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-19\",\n midYear: 2027,\n population: 5854332\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-19\",\n midYear: 2027,\n population: 1545869\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-49\",\n midYear: 2027,\n population: 10380633\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-49\",\n midYear: 2027,\n population: 39831384\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-19\",\n midYear: 2028,\n population: 5885087\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-19\",\n midYear: 2028,\n population: 1467329\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-49\",\n midYear: 2028,\n population: 10582349\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-49\",\n midYear: 2028,\n population: 39801033\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-19\",\n midYear: 2029,\n population: 5916828\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-19\",\n midYear: 2029,\n population: 1391378\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-49\",\n midYear: 2029,\n population: 10795657\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-49\",\n midYear: 2029,\n population: 39713228\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-19\",\n midYear: 2030,\n population: 5948455\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-19\",\n midYear: 2030,\n population: 1317750\n },\n {\n divisionNumericCode: 50,\n isInUnion: false,\n ageRange: \"15-49\",\n midYear: 2030,\n population: 11023887\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-49\",\n midYear: 2030,\n population: 39573599\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-19\",\n midYear: 2031,\n population: 1311331\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-49\",\n midYear: 2031,\n population: 39682336\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-19\",\n midYear: 2032,\n population: 1305103\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-49\",\n midYear: 2032,\n population: 39754634\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-19\",\n midYear: 2033,\n population: 1298770\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-49\",\n midYear: 2033,\n population: 39793155\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-19\",\n midYear: 2034,\n population: 1291724\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-49\",\n midYear: 2034,\n population: 39801922\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-19\",\n midYear: 2035,\n population: 1283736\n },\n {\n divisionNumericCode: 50,\n isInUnion: true,\n ageRange: \"15-49\",\n midYear: 2035,\n population: 39784414\n }\n];\n\nexport const results = {\n proportions: proportionalResults,\n populations: populationResults\n};\n\nexport const runs = [\n {\n id: 1,\n surveyDatabaseId: 1,\n populationDatabaseId: 1,\n name: \"UNPD 2019\",\n countryNumericCodes: [\n 4,\n 1,\n 2,\n 15,\n 12,\n 818,\n 434,\n 504,\n 729,\n 788,\n 732,\n 202,\n 14,\n 86,\n 108,\n 174,\n 262,\n 232,\n 231,\n 260,\n 404,\n 450,\n 454,\n 480,\n 175,\n 508,\n 638,\n 646,\n 690,\n 706,\n 728,\n 800,\n 834,\n 894,\n 716,\n 17,\n 24,\n 120,\n 140,\n 148,\n 178,\n 180,\n 226,\n 266,\n 678,\n 18,\n 72,\n 748,\n 426,\n 516,\n 710,\n 11,\n 204,\n 854,\n 132,\n 384,\n 270,\n 288,\n 324,\n 624,\n 430,\n 466,\n 478,\n 562,\n 566,\n 654,\n 686,\n 694,\n 768,\n 19,\n 419,\n 29,\n 660,\n 28,\n 533,\n 44,\n 52,\n 535,\n 92,\n 136,\n 192,\n 531,\n 212,\n 214,\n 308,\n 312,\n 332,\n 388,\n 474,\n 500,\n 630,\n 652,\n 659,\n 662,\n 663,\n 670,\n 534,\n 780,\n 796,\n 850,\n 13,\n 84,\n 188,\n 222,\n 320,\n 340,\n 484,\n 558,\n 591,\n 5,\n 32,\n 68,\n 74,\n 76,\n 152,\n 170,\n 218,\n 238,\n 254,\n 328,\n 600,\n 604,\n 239,\n 740,\n 858,\n 862,\n 21,\n 60,\n 124,\n 304,\n 666,\n 840,\n 10,\n 142,\n 143,\n 398,\n 417,\n 762,\n 795,\n 860,\n 30,\n 156,\n 344,\n 446,\n 408,\n 392,\n 496,\n 410,\n 35,\n 96,\n 116,\n 360,\n 418,\n 458,\n 104,\n 608,\n 702,\n 764,\n 626,\n 704,\n 34,\n 50,\n 64,\n 356,\n 364,\n 462,\n 524,\n 586,\n 144,\n 145,\n 51,\n 31,\n 48,\n 196,\n 268,\n 368,\n 376,\n 400,\n 414,\n 422,\n 512,\n 634,\n 682,\n 275,\n 760,\n 792,\n 784,\n 887,\n 150,\n 151,\n 112,\n 100,\n 203,\n 348,\n 616,\n 498,\n 642,\n 643,\n 703,\n 804,\n 154,\n 248,\n 830,\n 831,\n 832,\n 680,\n 208,\n 233,\n 234,\n 246,\n 352,\n 372,\n 833,\n 428,\n 440,\n 578,\n 744,\n 752,\n 826,\n 39,\n 8,\n 20,\n 70,\n 191,\n 292,\n 300,\n 336,\n 380,\n 470,\n 499,\n 620,\n 674,\n 688,\n 705,\n 724,\n 807,\n 155,\n 40,\n 56,\n 250,\n 276,\n 438,\n 442,\n 492,\n 528,\n 756,\n 9,\n 53,\n 36,\n 162,\n 166,\n 334,\n 554,\n 574,\n 54,\n 242,\n 540,\n 598,\n 90,\n 548,\n 57,\n 316,\n 296,\n 584,\n 583,\n 520,\n 580,\n 585,\n 581,\n 61,\n 16,\n 184,\n 258,\n 570,\n 612,\n 882,\n 772,\n 776,\n 798,\n 876,\n 158\n ],\n isGlobal: true,\n period: {\n firstYear: 1990,\n lastYear: 2020\n },\n startedAt: \"2019-02-19T07:43:32.5794241Z\",\n completed: true\n },\n {\n id: 2,\n surveyDatabaseId: 1,\n populationDatabaseId: 1,\n name: \"BGD_2019_1\",\n countryNumericCodes: [50],\n period: {\n firstYear: 1990,\n lastYear: 2020\n },\n startedAt: \"2019-02-19T06:43:32.5794241Z\",\n completed: true\n },\n {\n id: 3,\n surveyDatabaseId: 1,\n populationDatabaseId: 1,\n name: \"BGD_2019_2\",\n countryNumericCodes: [50],\n period: {\n firstYear: 1990,\n lastYear: 2020\n },\n startedAt: \"2019-02-19T23:33:32.5794241Z\",\n completed: true\n },\n {\n id: 4,\n surveyDatabaseId: 1,\n populationDatabaseId: 1,\n emuDatabaseId: 9,\n name: \"1_YEM\",\n countryNumericCodes: [887],\n period: {\n firstYear: 1990,\n lastYear: 2020\n },\n startedAt: \"2019-02-19T17:43:32.5794241Z\",\n completed: true\n },\n {\n id: 5,\n surveyDatabaseId: 1,\n populationDatabaseId: 1,\n name: \"2019_Nepal 1_NPL\",\n countryNumericCodes: [524],\n period: {\n firstYear: 1990,\n lastYear: 2020\n },\n startedAt: \"2019-02-19T18:43:32.5794241Z\",\n completed: true\n },\n {\n id: 6,\n surveyDatabaseId: 1,\n populationDatabaseId: 1,\n name: \"1_YEM ZZZ\",\n countryNumericCodes: [],\n regionCodes: [\"ZZZ\"],\n period: {\n firstYear: 1990,\n lastYear: 2020\n },\n startedAt: \"2019-02-19T18:43:32.5794241Z\",\n completed: true\n }\n];\n\nexport const surveyData = [\n {\n divisionNumericCode: 50,\n startDate: 2004,\n endDate: 2004.4137,\n isInUnion: false,\n ageRange: \"15-49\",\n dataSeriesType: \"Other\",\n groupTypeRelativeToBaseline: \"FM\",\n contraceptiveUseModern: 0.0118,\n contraceptiveUseTraditional: null,\n contraceptiveUseAny: 0.0118,\n ratioModernAll: 1,\n unmetNeedModern: null,\n unmetNeedAny: null,\n demand: null,\n demandModern: null,\n demandSatisfied: null,\n demandSatisfiedModern: null,\n nonUse: 0.9882,\n isPertainingToMethodsUsedSinceLastPregnancy: false,\n pertainingToMethodsUsedSinceLastPregnancyReason: null,\n hasGeographicalRegionBias: false,\n geographicalRegionBiasReason: null,\n hasNonPregnantAndOtherPositiveBiases: false,\n nonPregnantAndOtherPositiveBiasesReason: null,\n ageGroupBias: \"None\",\n modernMethodBias: \"-\",\n hasTraditionalMethodBias: false,\n traditionalMethodBiasReason: null,\n hasAbsenceOfProbingQuestionsBias: false,\n seModern: 0.009,\n seTraditional: 0,\n seUnmetNeed: 0,\n seLogRModernNoUse: 0.1662,\n seLogRTraditionalNoUse: null,\n seLogRUnmetNoNeed: null,\n sourceId: \"Bangladesh 2004 Demographic and Health Survey\",\n recordId: \"166\"\n },\n {\n divisionNumericCode: 50,\n startDate: 1993.8329,\n endDate: 1994.2439,\n isInUnion: false,\n ageRange: \"15-49\",\n dataSeriesType: \"Other\",\n groupTypeRelativeToBaseline: \"FM\",\n contraceptiveUseModern: 0.0186,\n contraceptiveUseTraditional: null,\n contraceptiveUseAny: 0.0186,\n ratioModernAll: 1,\n unmetNeedModern: null,\n unmetNeedAny: null,\n demand: null,\n demandModern: null,\n demandSatisfied: null,\n demandSatisfiedModern: null,\n nonUse: 0.9814,\n isPertainingToMethodsUsedSinceLastPregnancy: false,\n pertainingToMethodsUsedSinceLastPregnancyReason: null,\n hasGeographicalRegionBias: false,\n geographicalRegionBiasReason: null,\n hasNonPregnantAndOtherPositiveBiases: false,\n nonPregnantAndOtherPositiveBiasesReason: null,\n ageGroupBias: \"None\",\n modernMethodBias: \"-\",\n hasTraditionalMethodBias: false,\n traditionalMethodBiasReason: null,\n hasAbsenceOfProbingQuestionsBias: false,\n seModern: 0.0081,\n seTraditional: 0,\n seUnmetNeed: 0,\n seLogRModernNoUse: 0.1701,\n seLogRTraditionalNoUse: null,\n seLogRUnmetNoNeed: null,\n sourceId: \"Bangladesh 1993-1994 Demographic and Health Survey\",\n recordId: \"167\"\n },\n {\n divisionNumericCode: 50,\n startDate: 1996.8356,\n endDate: 1997.2439,\n isInUnion: false,\n ageRange: \"15-49\",\n dataSeriesType: \"Other\",\n groupTypeRelativeToBaseline: \"FM\",\n contraceptiveUseModern: 0.0203,\n contraceptiveUseTraditional: null,\n contraceptiveUseAny: 0.0203,\n ratioModernAll: 1,\n unmetNeedModern: null,\n unmetNeedAny: null,\n demand: null,\n demandModern: null,\n demandSatisfied: null,\n demandSatisfiedModern: null,\n nonUse: 0.9797,\n isPertainingToMethodsUsedSinceLastPregnancy: false,\n pertainingToMethodsUsedSinceLastPregnancyReason: null,\n hasGeographicalRegionBias: false,\n geographicalRegionBiasReason: null,\n hasNonPregnantAndOtherPositiveBiases: false,\n nonPregnantAndOtherPositiveBiasesReason: null,\n ageGroupBias: \"None\",\n modernMethodBias: \"-\",\n hasTraditionalMethodBias: false,\n traditionalMethodBiasReason: null,\n hasAbsenceOfProbingQuestionsBias: false,\n seModern: 0.0088,\n seTraditional: 0,\n seUnmetNeed: 0,\n seLogRModernNoUse: 0.1669,\n seLogRTraditionalNoUse: null,\n seLogRUnmetNoNeed: null,\n sourceId: \"Bangladesh 1996-1997 Demographic and Health Survey\",\n recordId: \"168\"\n },\n {\n divisionNumericCode: 50,\n startDate: 1999.8329,\n endDate: 2000.2466,\n isInUnion: false,\n ageRange: \"15-49\",\n dataSeriesType: \"Other\",\n groupTypeRelativeToBaseline: \"FM\",\n contraceptiveUseModern: 0.0113,\n contraceptiveUseTraditional: null,\n contraceptiveUseAny: 0.0113,\n ratioModernAll: 1,\n unmetNeedModern: null,\n unmetNeedAny: null,\n demand: null,\n demandModern: null,\n demandSatisfied: null,\n demandSatisfiedModern: null,\n nonUse: 0.9887,\n isPertainingToMethodsUsedSinceLastPregnancy: false,\n pertainingToMethodsUsedSinceLastPregnancyReason: null,\n hasGeographicalRegionBias: false,\n geographicalRegionBiasReason: null,\n hasNonPregnantAndOtherPositiveBiases: false,\n nonPregnantAndOtherPositiveBiasesReason: null,\n ageGroupBias: \"None\",\n modernMethodBias: \"-\",\n hasTraditionalMethodBias: false,\n traditionalMethodBiasReason: null,\n hasAbsenceOfProbingQuestionsBias: false,\n seModern: 0.0063,\n seTraditional: 0,\n seUnmetNeed: 0,\n seLogRModernNoUse: 0.1589,\n seLogRTraditionalNoUse: null,\n seLogRUnmetNoNeed: null,\n sourceId: \"Bangladesh 1999-2000 Demographic and Health Survey\",\n recordId: \"169\"\n },\n {\n divisionNumericCode: 50,\n startDate: 2007.1616,\n endDate: 2007.663,\n isInUnion: false,\n ageRange: \"15-49\",\n dataSeriesType: \"Other\",\n groupTypeRelativeToBaseline: \"FM\",\n contraceptiveUseModern: 0.0117,\n contraceptiveUseTraditional: null,\n contraceptiveUseAny: 0.0117,\n ratioModernAll: 1,\n unmetNeedModern: null,\n unmetNeedAny: null,\n demand: null,\n demandModern: null,\n demandSatisfied: null,\n demandSatisfiedModern: null,\n nonUse: 0.9883,\n isPertainingToMethodsUsedSinceLastPregnancy: false,\n pertainingToMethodsUsedSinceLastPregnancyReason: null,\n hasGeographicalRegionBias: false,\n geographicalRegionBiasReason: null,\n hasNonPregnantAndOtherPositiveBiases: false,\n nonPregnantAndOtherPositiveBiasesReason: null,\n ageGroupBias: \"None\",\n modernMethodBias: \"-\",\n hasTraditionalMethodBias: false,\n traditionalMethodBiasReason: null,\n hasAbsenceOfProbingQuestionsBias: false,\n seModern: 0.0062,\n seTraditional: 0,\n seUnmetNeed: 0,\n seLogRModernNoUse: 0.168,\n seLogRTraditionalNoUse: null,\n seLogRUnmetNoNeed: null,\n sourceId: \"Bangladesh 2007 Demographic and Health Survey\",\n recordId: \"184\"\n },\n {\n divisionNumericCode: 50,\n startDate: 1989.1616,\n endDate: 1989.4959,\n isInUnion: true,\n ageRange: \"15-49\",\n dataSeriesType: \"National survey\",\n groupTypeRelativeToBaseline: \"MW\",\n contraceptiveUseModern: 0.245,\n contraceptiveUseTraditional: 0.07,\n contraceptiveUseAny: 0.315,\n ratioModernAll: 0.7778,\n unmetNeedModern: null,\n unmetNeedAny: null,\n demand: null,\n demandModern: null,\n demandSatisfied: null,\n demandSatisfiedModern: null,\n nonUse: 0.685,\n isPertainingToMethodsUsedSinceLastPregnancy: false,\n pertainingToMethodsUsedSinceLastPregnancyReason: null,\n hasGeographicalRegionBias: false,\n geographicalRegionBiasReason: null,\n hasNonPregnantAndOtherPositiveBiases: false,\n nonPregnantAndOtherPositiveBiasesReason: null,\n ageGroupBias: \"?\",\n modernMethodBias: \"None\",\n hasTraditionalMethodBias: false,\n traditionalMethodBiasReason: null,\n hasAbsenceOfProbingQuestionsBias: false,\n seModern: null,\n seTraditional: null,\n seUnmetNeed: null,\n seLogRModernNoUse: null,\n seLogRTraditionalNoUse: null,\n seLogRUnmetNoNeed: null,\n sourceId: \"Bangladesh 1989 Contraceptive Prevalence Survey\",\n recordId: \"587\"\n },\n {\n divisionNumericCode: 50,\n startDate: 1983.7479,\n endDate: 1984,\n isInUnion: true,\n ageRange: \"15-49\",\n dataSeriesType: \"National survey\",\n groupTypeRelativeToBaseline: \"MW\",\n contraceptiveUseModern: 0.138,\n contraceptiveUseTraditional: 0.054,\n contraceptiveUseAny: 0.192,\n ratioModernAll: 0.7188,\n unmetNeedModern: null,\n unmetNeedAny: null,\n demand: null,\n demandModern: null,\n demandSatisfied: null,\n demandSatisfiedModern: null,\n nonUse: 0.808,\n isPertainingToMethodsUsedSinceLastPregnancy: false,\n pertainingToMethodsUsedSinceLastPregnancyReason: null,\n hasGeographicalRegionBias: false,\n geographicalRegionBiasReason: null,\n hasNonPregnantAndOtherPositiveBiases: false,\n nonPregnantAndOtherPositiveBiasesReason: null,\n ageGroupBias: \"?\",\n modernMethodBias: \"None\",\n hasTraditionalMethodBias: false,\n traditionalMethodBiasReason: null,\n hasAbsenceOfProbingQuestionsBias: false,\n seModern: null,\n seTraditional: null,\n seUnmetNeed: null,\n seLogRModernNoUse: null,\n seLogRTraditionalNoUse: null,\n seLogRUnmetNoNeed: null,\n sourceId: \"Bangladesh 1983-1984 Contraceptive Prevalence Survey\",\n recordId: \"589\"\n },\n {\n divisionNumericCode: 50,\n startDate: 1981.3287,\n endDate: 1981.5808,\n isInUnion: true,\n ageRange: \"15-49\",\n dataSeriesType: \"National survey\",\n groupTypeRelativeToBaseline: \"MW\",\n contraceptiveUseModern: 0.11,\n contraceptiveUseTraditional: 0.076,\n contraceptiveUseAny: 0.186,\n ratioModernAll: 0.5914,\n unmetNeedModern: null,\n unmetNeedAny: null,\n demand: null,\n demandModern: null,\n demandSatisfied: null,\n demandSatisfiedModern: null,\n nonUse: 0.814,\n isPertainingToMethodsUsedSinceLastPregnancy: false,\n pertainingToMethodsUsedSinceLastPregnancyReason: null,\n hasGeographicalRegionBias: false,\n geographicalRegionBiasReason: null,\n hasNonPregnantAndOtherPositiveBiases: false,\n nonPregnantAndOtherPositiveBiasesReason: null,\n ageGroupBias: \"?\",\n modernMethodBias: \"None\",\n hasTraditionalMethodBias: false,\n traditionalMethodBiasReason: null,\n hasAbsenceOfProbingQuestionsBias: false,\n seModern: null,\n seTraditional: null,\n seUnmetNeed: null,\n seLogRModernNoUse: null,\n seLogRTraditionalNoUse: null,\n seLogRUnmetNoNeed: null,\n sourceId: \"Bangladesh 1981 Contraceptive Prevalence Survey\",\n recordId: \"636\"\n },\n {\n divisionNumericCode: 50,\n startDate: 1975,\n endDate: 1977,\n isInUnion: true,\n ageRange: \"15-49\",\n dataSeriesType: \"Other\",\n groupTypeRelativeToBaseline: \"MW\",\n contraceptiveUseModern: 0.05,\n contraceptiveUseTraditional: 0.03,\n contraceptiveUseAny: 0.08,\n ratioModernAll: 0.625,\n unmetNeedModern: null,\n unmetNeedAny: null,\n demand: null,\n demandModern: null,\n demandSatisfied: null,\n demandSatisfiedModern: null,\n nonUse: 0.92,\n isPertainingToMethodsUsedSinceLastPregnancy: false,\n pertainingToMethodsUsedSinceLastPregnancyReason: null,\n hasGeographicalRegionBias: false,\n geographicalRegionBiasReason: null,\n hasNonPregnantAndOtherPositiveBiases: false,\n nonPregnantAndOtherPositiveBiasesReason: null,\n ageGroupBias: \"None\",\n modernMethodBias: \"None\",\n hasTraditionalMethodBias: false,\n traditionalMethodBiasReason: null,\n hasAbsenceOfProbingQuestionsBias: false,\n seModern: null,\n seTraditional: null,\n seUnmetNeed: null,\n seLogRModernNoUse: null,\n seLogRTraditionalNoUse: null,\n seLogRUnmetNoNeed: null,\n sourceId: \"Bangladesh 1975-1976 World Fertility Survey\",\n recordId: \"690\"\n },\n {\n divisionNumericCode: 50,\n startDate: 1985.915,\n endDate: 1986.2466,\n isInUnion: true,\n ageRange: \"15-49\",\n dataSeriesType: \"National survey\",\n groupTypeRelativeToBaseline: \"MW\",\n contraceptiveUseModern: 0.184,\n contraceptiveUseTraditional: 0.069,\n contraceptiveUseAny: 0.253,\n ratioModernAll: 0.7273,\n unmetNeedModern: null,\n unmetNeedAny: null,\n demand: null,\n demandModern: null,\n demandSatisfied: null,\n demandSatisfiedModern: null,\n nonUse: 0.747,\n isPertainingToMethodsUsedSinceLastPregnancy: false,\n pertainingToMethodsUsedSinceLastPregnancyReason: null,\n hasGeographicalRegionBias: false,\n geographicalRegionBiasReason: null,\n hasNonPregnantAndOtherPositiveBiases: false,\n nonPregnantAndOtherPositiveBiasesReason: null,\n ageGroupBias: \"?\",\n modernMethodBias: \"None\",\n hasTraditionalMethodBias: false,\n traditionalMethodBiasReason: null,\n hasAbsenceOfProbingQuestionsBias: false,\n seModern: null,\n seTraditional: null,\n seUnmetNeed: null,\n seLogRModernNoUse: null,\n seLogRTraditionalNoUse: null,\n seLogRUnmetNoNeed: null,\n sourceId: \"Bangladesh 1985-1986 Contraceptive Prevalence Survey\",\n recordId: \"709\"\n },\n {\n divisionNumericCode: 50,\n startDate: 1979.6658,\n endDate: 1980,\n isInUnion: true,\n ageRange: \"15-49\",\n dataSeriesType: \"Other\",\n groupTypeRelativeToBaseline: \"MW\",\n contraceptiveUseModern: 0.088,\n contraceptiveUseTraditional: 0.033,\n contraceptiveUseAny: 0.121,\n ratioModernAll: 0.7273,\n unmetNeedModern: null,\n unmetNeedAny: null,\n demand: null,\n demandModern: null,\n demandSatisfied: null,\n demandSatisfiedModern: null,\n nonUse: 0.879,\n isPertainingToMethodsUsedSinceLastPregnancy: false,\n pertainingToMethodsUsedSinceLastPregnancyReason: null,\n hasGeographicalRegionBias: false,\n geographicalRegionBiasReason: null,\n hasNonPregnantAndOtherPositiveBiases: false,\n nonPregnantAndOtherPositiveBiasesReason: null,\n ageGroupBias: \"?\",\n modernMethodBias: \"None\",\n hasTraditionalMethodBias: false,\n traditionalMethodBiasReason: null,\n hasAbsenceOfProbingQuestionsBias: false,\n seModern: null,\n seTraditional: null,\n seUnmetNeed: null,\n seLogRModernNoUse: null,\n seLogRTraditionalNoUse: null,\n seLogRUnmetNoNeed: null,\n sourceId: \"Bangladesh 1979-1980 Contraceptive Prevalence Survey\",\n recordId: \"721\"\n },\n {\n divisionNumericCode: 50,\n startDate: 1988.9178,\n endDate: 1989.2466,\n isInUnion: true,\n ageRange: \"15-49\",\n dataSeriesType: \"National survey\",\n groupTypeRelativeToBaseline: \"MW\",\n contraceptiveUseModern: 0.232,\n contraceptiveUseTraditional: 0.076,\n contraceptiveUseAny: 0.308,\n ratioModernAll: 0.7532,\n unmetNeedModern: null,\n unmetNeedAny: null,\n demand: null,\n demandModern: null,\n demandSatisfied: null,\n demandSatisfiedModern: null,\n nonUse: 0.692,\n isPertainingToMethodsUsedSinceLastPregnancy: false,\n pertainingToMethodsUsedSinceLastPregnancyReason: null,\n hasGeographicalRegionBias: false,\n geographicalRegionBiasReason: null,\n hasNonPregnantAndOtherPositiveBiases: false,\n nonPregnantAndOtherPositiveBiasesReason: null,\n ageGroupBias: \"?\",\n modernMethodBias: \"None\",\n hasTraditionalMethodBias: false,\n traditionalMethodBiasReason: null,\n hasAbsenceOfProbingQuestionsBias: false,\n seModern: null,\n seTraditional: null,\n seUnmetNeed: null,\n seLogRModernNoUse: null,\n seLogRTraditionalNoUse: null,\n seLogRUnmetNoNeed: null,\n sourceId: \"Bangladesh 1988-1989 Fertility Survey\",\n recordId: \"726\"\n },\n {\n divisionNumericCode: 50,\n startDate: 2004,\n endDate: 2004.4137,\n isInUnion: true,\n ageRange: \"15-49\",\n dataSeriesType: \"Other\",\n groupTypeRelativeToBaseline: \"MW\",\n contraceptiveUseModern: 0.4729,\n contraceptiveUseTraditional: 0.1078,\n contraceptiveUseAny: 0.5807,\n ratioModernAll: 0.8144,\n unmetNeedModern: 0.2597,\n unmetNeedAny: 0.1519,\n demand: 0.7326,\n demandModern: 0.7326,\n demandSatisfied: 0.7926,\n demandSatisfiedModern: 0.6455,\n nonUse: 0.4193,\n isPertainingToMethodsUsedSinceLastPregnancy: false,\n pertainingToMethodsUsedSinceLastPregnancyReason: null,\n hasGeographicalRegionBias: false,\n geographicalRegionBiasReason: null,\n hasNonPregnantAndOtherPositiveBiases: false,\n nonPregnantAndOtherPositiveBiasesReason: null,\n ageGroupBias: \"None\",\n modernMethodBias: \"None\",\n hasTraditionalMethodBias: false,\n traditionalMethodBiasReason: null,\n hasAbsenceOfProbingQuestionsBias: false,\n seModern: null,\n seTraditional: null,\n seUnmetNeed: null,\n seLogRModernNoUse: null,\n seLogRTraditionalNoUse: null,\n seLogRUnmetNoNeed: null,\n lowerContraceptiveUseAny: 0.5807 * 0.95,\n estimatedContraceptiveUseAny: 0.5807,\n upperContraceptiveUseAny: 0.5807 * 1.05,\n sourceId: \"Bangladesh 2004 Demographic and Health Survey\",\n recordId: \"861\"\n },\n {\n divisionNumericCode: 50,\n startDate: 1993.8329,\n endDate: 1994.2439,\n isInUnion: true,\n ageRange: \"15-49\",\n dataSeriesType: \"Other\",\n groupTypeRelativeToBaseline: \"MW\",\n contraceptiveUseModern: 0.3621,\n contraceptiveUseTraditional: 0.0836,\n contraceptiveUseAny: 0.4457,\n ratioModernAll: 0.8124,\n unmetNeedModern: 0.301,\n unmetNeedAny: 0.2174,\n demand: 0.6631,\n demandModern: 0.6631,\n demandSatisfied: 0.6721,\n demandSatisfiedModern: 0.5461,\n nonUse: 0.5543,\n isPertainingToMethodsUsedSinceLastPregnancy: false,\n pertainingToMethodsUsedSinceLastPregnancyReason: null,\n hasGeographicalRegionBias: false,\n geographicalRegionBiasReason: null,\n hasNonPregnantAndOtherPositiveBiases: false,\n nonPregnantAndOtherPositiveBiasesReason: null,\n ageGroupBias: \"None\",\n modernMethodBias: \"None\",\n hasTraditionalMethodBias: false,\n traditionalMethodBiasReason: null,\n hasAbsenceOfProbingQuestionsBias: false,\n seModern: null,\n seTraditional: null,\n seUnmetNeed: null,\n seLogRModernNoUse: null,\n seLogRTraditionalNoUse: null,\n seLogRUnmetNoNeed: null,\n sourceId: \"Bangladesh 1993-1994 Demographic and Health Survey\",\n recordId: \"862\"\n },\n {\n divisionNumericCode: 50,\n startDate: 1996.8356,\n endDate: 1997.2439,\n isInUnion: true,\n ageRange: \"15-49\",\n dataSeriesType: \"Other\",\n groupTypeRelativeToBaseline: \"MW\",\n contraceptiveUseModern: 0.4156,\n contraceptiveUseTraditional: 0.0768,\n contraceptiveUseAny: 0.4924,\n ratioModernAll: 0.8441,\n unmetNeedModern: 0.2748,\n unmetNeedAny: 0.198,\n demand: 0.6904,\n demandModern: 0.6904,\n demandSatisfied: 0.7132,\n demandSatisfiedModern: 0.602,\n nonUse: 0.5076,\n isPertainingToMethodsUsedSinceLastPregnancy: false,\n pertainingToMethodsUsedSinceLastPregnancyReason: null,\n hasGeographicalRegionBias: false,\n geographicalRegionBiasReason: null,\n hasNonPregnantAndOtherPositiveBiases: false,\n nonPregnantAndOtherPositiveBiasesReason: null,\n ageGroupBias: \"None\",\n modernMethodBias: \"None\",\n hasTraditionalMethodBias: false,\n traditionalMethodBiasReason: null,\n hasAbsenceOfProbingQuestionsBias: false,\n seModern: null,\n seTraditional: null,\n seUnmetNeed: null,\n seLogRModernNoUse: null,\n seLogRTraditionalNoUse: null,\n seLogRUnmetNoNeed: null,\n sourceId: \"Bangladesh 1996-1997 Demographic and Health Survey\",\n recordId: \"863\"\n },\n {\n divisionNumericCode: 50,\n startDate: 1999.8329,\n endDate: 2000.2466,\n isInUnion: true,\n ageRange: \"15-49\",\n dataSeriesType: \"Other\",\n groupTypeRelativeToBaseline: \"MW\",\n contraceptiveUseModern: 0.4347,\n contraceptiveUseTraditional: 0.103,\n contraceptiveUseAny: 0.5377,\n ratioModernAll: 0.8084,\n unmetNeedModern: 0.2877,\n unmetNeedAny: 0.1847,\n demand: 0.7224,\n demandModern: 0.7224,\n demandSatisfied: 0.7443,\n demandSatisfiedModern: 0.6017,\n nonUse: 0.4623,\n isPertainingToMethodsUsedSinceLastPregnancy: false,\n pertainingToMethodsUsedSinceLastPregnancyReason: null,\n hasGeographicalRegionBias: false,\n geographicalRegionBiasReason: null,\n hasNonPregnantAndOtherPositiveBiases: false,\n nonPregnantAndOtherPositiveBiasesReason: null,\n ageGroupBias: \"None\",\n modernMethodBias: \"None\",\n hasTraditionalMethodBias: false,\n traditionalMethodBiasReason: null,\n hasAbsenceOfProbingQuestionsBias: false,\n seModern: null,\n seTraditional: null,\n seUnmetNeed: null,\n seLogRModernNoUse: null,\n seLogRTraditionalNoUse: null,\n seLogRUnmetNoNeed: null,\n sourceId: \"Bangladesh 1999-2000 Demographic and Health Survey\",\n recordId: \"864\"\n },\n {\n divisionNumericCode: 50,\n startDate: 2007.1616,\n endDate: 2007.663,\n isInUnion: true,\n ageRange: \"15-49\",\n dataSeriesType: \"Other\",\n groupTypeRelativeToBaseline: \"MW\",\n contraceptiveUseModern: 0.4746,\n contraceptiveUseTraditional: 0.0833,\n contraceptiveUseAny: 0.5579,\n ratioModernAll: 0.8506,\n unmetNeedModern: 0.2512,\n unmetNeedAny: 0.1679,\n demand: 0.7258,\n demandModern: 0.7258,\n demandSatisfied: 0.7687,\n demandSatisfiedModern: 0.6539,\n nonUse: 0.4421,\n isPertainingToMethodsUsedSinceLastPregnancy: false,\n pertainingToMethodsUsedSinceLastPregnancyReason: null,\n hasGeographicalRegionBias: false,\n geographicalRegionBiasReason: null,\n hasNonPregnantAndOtherPositiveBiases: false,\n nonPregnantAndOtherPositiveBiasesReason: null,\n ageGroupBias: \"None\",\n modernMethodBias: \"None\",\n hasTraditionalMethodBias: false,\n traditionalMethodBiasReason: null,\n hasAbsenceOfProbingQuestionsBias: false,\n seModern: null,\n seTraditional: null,\n seUnmetNeed: null,\n seLogRModernNoUse: null,\n seLogRTraditionalNoUse: null,\n seLogRUnmetNoNeed: null,\n sourceId: \"Bangladesh 2007 Demographic and Health Survey\",\n recordId: \"884\"\n },\n {\n divisionNumericCode: 50,\n startDate: 1991,\n endDate: 1992,\n isInUnion: true,\n ageRange: \"15-49\",\n dataSeriesType: \"National survey\",\n groupTypeRelativeToBaseline: \"MW\",\n contraceptiveUseModern: 0.312,\n contraceptiveUseTraditional: 0.087,\n contraceptiveUseAny: 0.399,\n ratioModernAll: 0.782,\n unmetNeedModern: null,\n unmetNeedAny: null,\n demand: null,\n demandModern: null,\n demandSatisfied: null,\n demandSatisfiedModern: null,\n nonUse: 0.601,\n isPertainingToMethodsUsedSinceLastPregnancy: false,\n pertainingToMethodsUsedSinceLastPregnancyReason: null,\n hasGeographicalRegionBias: false,\n geographicalRegionBiasReason: null,\n hasNonPregnantAndOtherPositiveBiases: false,\n nonPregnantAndOtherPositiveBiasesReason: null,\n ageGroupBias: \"?\",\n modernMethodBias: \"None\",\n hasTraditionalMethodBias: false,\n traditionalMethodBiasReason: null,\n hasAbsenceOfProbingQuestionsBias: false,\n seModern: null,\n seTraditional: null,\n seUnmetNeed: null,\n seLogRModernNoUse: null,\n seLogRTraditionalNoUse: null,\n seLogRUnmetNoNeed: null,\n sourceId: \"Bangladesh 1991 Contraceptive Prevalence Survey\",\n recordId: \"1051\"\n },\n {\n divisionNumericCode: 50,\n startDate: 2011.4959,\n endDate: 2011.9973,\n isInUnion: true,\n ageRange: \"15-49\",\n dataSeriesType: \"Other\",\n groupTypeRelativeToBaseline: \"MW\",\n contraceptiveUseModern: 0.5205,\n contraceptiveUseTraditional: 0.0916,\n contraceptiveUseAny: 0.6121,\n ratioModernAll: 0.8503,\n unmetNeedModern: 0.2263,\n unmetNeedAny: 0.1347,\n demand: 0.7469,\n demandModern: 0.7469,\n demandSatisfied: 0.8196,\n demandSatisfiedModern: 0.6969,\n nonUse: 0.3879,\n isPertainingToMethodsUsedSinceLastPregnancy: false,\n pertainingToMethodsUsedSinceLastPregnancyReason: null,\n hasGeographicalRegionBias: false,\n geographicalRegionBiasReason: null,\n hasNonPregnantAndOtherPositiveBiases: false,\n nonPregnantAndOtherPositiveBiasesReason: null,\n ageGroupBias: \"None\",\n modernMethodBias: \"None\",\n hasTraditionalMethodBias: false,\n traditionalMethodBiasReason: null,\n hasAbsenceOfProbingQuestionsBias: false,\n seModern: null,\n seTraditional: null,\n seUnmetNeed: null,\n seLogRModernNoUse: null,\n seLogRTraditionalNoUse: null,\n seLogRUnmetNoNeed: null,\n sourceId: \"Bangladesh 2011 Demographic and Health Survey\",\n recordId: \"1362\"\n },\n {\n divisionNumericCode: 50,\n startDate: 2012.9178,\n endDate: 2013.326,\n isInUnion: true,\n ageRange: \"15-49\",\n dataSeriesType: \"Other\",\n groupTypeRelativeToBaseline: \"MW\",\n contraceptiveUseModern: 0.5927,\n contraceptiveUseTraditional: 0.0249,\n contraceptiveUseAny: 0.6176,\n ratioModernAll: 0.9597,\n unmetNeedModern: 0.1641,\n unmetNeedAny: 0.1392,\n demand: 0.7568,\n demandModern: 0.7568,\n demandSatisfied: 0.8161,\n demandSatisfiedModern: 0.7832,\n nonUse: 0.3824,\n isPertainingToMethodsUsedSinceLastPregnancy: false,\n pertainingToMethodsUsedSinceLastPregnancyReason: null,\n hasGeographicalRegionBias: false,\n geographicalRegionBiasReason: null,\n hasNonPregnantAndOtherPositiveBiases: false,\n nonPregnantAndOtherPositiveBiasesReason: null,\n ageGroupBias: \"None\",\n modernMethodBias: \"None\",\n hasTraditionalMethodBias: false,\n traditionalMethodBiasReason: null,\n hasAbsenceOfProbingQuestionsBias: true,\n seModern: null,\n seTraditional: null,\n seUnmetNeed: null,\n seLogRModernNoUse: null,\n seLogRTraditionalNoUse: null,\n seLogRUnmetNoNeed: null,\n sourceId: \"Bangladesh 2012-2013 Multiple Indicator Cluster Survey\",\n recordId: \"1540\"\n },\n {\n divisionNumericCode: 50,\n startDate: 2014.4959,\n endDate: 2014.8301,\n isInUnion: true,\n ageRange: \"15-49\",\n dataSeriesType: \"Other\",\n groupTypeRelativeToBaseline: \"MW\",\n contraceptiveUseModern: 0.5406,\n contraceptiveUseTraditional: 0.0839,\n contraceptiveUseAny: 0.6245,\n ratioModernAll: 0.8656,\n unmetNeedModern: 0.204,\n unmetNeedAny: 0.1201,\n demand: 0.7446,\n demandModern: 0.7446,\n demandSatisfied: 0.8387,\n demandSatisfiedModern: 0.726,\n nonUse: 0.3755,\n isPertainingToMethodsUsedSinceLastPregnancy: false,\n pertainingToMethodsUsedSinceLastPregnancyReason: null,\n hasGeographicalRegionBias: false,\n geographicalRegionBiasReason: null,\n hasNonPregnantAndOtherPositiveBiases: false,\n nonPregnantAndOtherPositiveBiasesReason: null,\n ageGroupBias: \"None\",\n modernMethodBias: \"None\",\n hasTraditionalMethodBias: false,\n traditionalMethodBiasReason: null,\n hasAbsenceOfProbingQuestionsBias: false,\n seModern: null,\n seTraditional: null,\n seUnmetNeed: null,\n seLogRModernNoUse: null,\n seLogRTraditionalNoUse: null,\n seLogRUnmetNoNeed: null,\n sourceId: \"Bangladesh 2014 Demographic and Health Survey\",\n recordId: \"1586\"\n }\n].map(datum => ({\n ...datum,\n lowerContraceptiveUseAny: datum.contraceptiveUseAny - 0.04,\n estimatedContraceptiveUseAny: datum.contraceptiveUseAny,\n upperContraceptiveUseAny: datum.contraceptiveUseAny + 0.04\n}));\n","import MockAdapter from \"axios-mock-adapter\";\nimport * as queryString from \"query-string\";\nimport { createGuid } from \"../utilities\";\nimport { chartSets } from \"../constants\";\nimport {\n databases as testDatabases,\n emuData as testEmuData,\n populationData as testPopulationData,\n results as testResults,\n runs as testRuns,\n surveyData as testSurveyData\n} from \"./mockApiData\";\n\nconst extractUrlPathComponents = url => url.replace(/\\/$/, \"\").split(\"/\");\n\nconst extractUrlPathComponent = (url, index) =>\n extractUrlPathComponents(url).slice(index)[0];\n\nconst getQueryString = url => url.split(\"?\")[1];\n\nclass MockApiAdapter extends MockAdapter {\n constructor(webService) {\n super(webService, { delayResponse: 1000 });\n\n this.onGet(/\\/api\\/v1\\/systeminfo/).reply(200, {\n systemOperational: true,\n level: 0,\n message: null\n });\n\n this.onPost(/\\/api\\/v1\\/session\\/.+/).reply(201, {\n token: \"9de345262da94df5af666a043faea701\"\n });\n\n this.onDelete(/\\/api\\/v1\\/session\\/.+/).reply(204);\n\n this.onGet(/\\/api\\/v1\\/databases/).reply(200, testDatabases);\n\n this.onPost(/\\/api\\/v1\\/databases\\/files\\/.+/).reply(config => [\n 201,\n {\n id: createGuid(),\n type: extractUrlPathComponent(config.url, -1),\n name: createGuid().slice(0, 8),\n divisions: [\n {\n numericCode: 50,\n name: \"Bangladesh\",\n alphaCode: \"BGD\",\n isCountry: true\n }\n ]\n }\n ]);\n\n this.onPost(/\\/api\\/v1\\/runs/).reply(config => {\n console.log(\"[POST] /api/v1/runs/ request body:\");\n console.log(config.data);\n\n return [201];\n });\n\n this.onGet(/\\/api\\/v1\\/runs/).reply(config => {\n const {\n includePending: includePendingRuns,\n includeFailed: includeFailedRuns\n } = queryString.parse(getQueryString(config.url));\n\n let runs = testRuns;\n\n if (!includePendingRuns) {\n runs = runs.filter(run => run.completed);\n }\n\n if (!includeFailedRuns) {\n runs = runs.filter(run => !run.failed);\n }\n\n return [200, runs];\n });\n\n this.onGet(/\\/api\\/v1\\/surveys\\/.+\\/.+/).reply(config => {\n const divisionNumericCodeOrRegion = extractUrlPathComponent(\n config.url,\n -1\n );\n\n const divisionNumericCode = parseInt(divisionNumericCodeOrRegion, 10);\n\n let data = testSurveyData;\n\n if (divisionNumericCode) {\n data = data.map(datum => ({\n ...datum,\n divisionNumericCode: divisionNumericCode\n }));\n } else if (divisionNumericCodeOrRegion) {\n data = data.map(datum => ({\n ...datum,\n regionCode: divisionNumericCodeOrRegion\n }));\n }\n\n return [200, data];\n });\n\n this.onGet(/\\/api\\/v1\\/populations\\/.+\\/.+/).reply(config => {\n const divisionNumericCodeOrRegion = extractUrlPathComponent(\n config.url,\n -1\n );\n\n const divisionNumericCode = parseInt(divisionNumericCodeOrRegion, 10);\n\n let data = testPopulationData;\n\n if (divisionNumericCode) {\n data = data.map(datum => ({\n ...datum,\n divisionNumericCode: divisionNumericCode\n }));\n } else if (divisionNumericCodeOrRegion) {\n data = data.map(datum => ({\n ...datum,\n regionCode: divisionNumericCodeOrRegion\n }));\n }\n\n return [200, data];\n });\n\n this.onGet(/\\/api\\/v1\\/emu\\/.+\\/.+/).reply(config => {\n const divisionNumericCodeOrRegion = extractUrlPathComponent(\n config.url,\n -1\n );\n\n const divisionNumericCode = parseInt(divisionNumericCodeOrRegion, 10);\n\n let data = testEmuData;\n\n if (divisionNumericCode) {\n data = data.map(datum => ({\n ...datum,\n divisionNumericCode: divisionNumericCode\n }));\n } else if (divisionNumericCodeOrRegion) {\n data = data.map(datum => ({\n ...datum,\n regionCode: divisionNumericCodeOrRegion\n }));\n }\n\n return [200, data];\n });\n\n this.onGet(/\\/api\\/v1\\/results\\/.+\\/.+/).reply(config => {\n console.log(\"[GET] /api/v1/results response:\");\n console.log(testResults);\n\n const { comparisonRun: comparisonRunId } = queryString.parse(\n getQueryString(config.url)\n );\n\n let results = testResults;\n\n if (comparisonRunId) {\n results = {\n proportions: results.proportions.map(datum => ({\n ...datum,\n comparisonMean: datum.mean * 0.95,\n comparisonPercentile2pt5: datum.percentile2pt5 * 0.95,\n comparisonPercentile5: datum.percentile5 * 0.95,\n comparisonPercentile10: datum.percentile10 * 0.95,\n comparisonMedian: datum.mean * 0.95,\n comparisonPercentile90: datum.percentile90 * 0.95,\n comparisonPercentile95: datum.percentile95 * 0.95,\n comparisonPercentile97pt5: datum.percentile95 * 0.95\n })),\n populations: results.populations.map(datum => ({\n ...datum,\n comparisonMean: datum.mean * 0.95,\n comparisonPercentile2pt5: datum.percentile2pt5 * 0.95,\n comparisonPercentile5: datum.percentile5 * 0.95,\n comparisonPercentile10: datum.percentile10 * 0.95,\n comparisonMedian: datum.mean * 0.95,\n comparisonPercentile90: datum.percentile90 * 0.95,\n comparisonPercentile95: datum.percentile95 * 0.95,\n comparisonPercentile97pt5: datum.percentile95 * 0.95\n }))\n };\n }\n\n return [200, results];\n });\n\n this.onGet(/\\/api\\/v1\\/csv\\/results\\/.+\\/.+/).reply(200, \"[CSV data]\");\n\n this.onGet(/\\/api\\/v1\\/csv\\/dataset\\/.+\\/.+/).reply(200, \"[ZIP archive]\");\n\n this.onGet(/\\/api\\/v1\\/chartsets\\/?$/).reply(200, chartSets);\n\n this.onGet(/\\/api\\/v1\\/chartsets\\/.+\\/.+\\/.+\\/.+\\/.+/).reply(\n 200,\n \"[Chart set PDF document]\"\n );\n\n this.onGet(/\\/api\\/v1\\/charts\\/.+\\/.+\\/.+\\/.+/).reply(\n 200,\n \"[Selected charts PDF document]\"\n );\n\n this.onPost(/\\/api\\/v1\\/targets\\/.+\\/.+/).reply(config => {\n const data = JSON.parse(config.data);\n\n return [\n 201,\n {\n indicatorProbability: data.indicatorProbabilityParameters\n ? 0.5\n : undefined,\n indicatorLevel: data.indicatorLevelParameters ? 5000 : undefined,\n populationProbability: data.populationProbabilityParameters\n ? 0.6\n : undefined,\n populationLevel: data.populationLevelParameters ? 6000 : undefined\n }\n ];\n });\n\n this.onPost(/\\/api\\/v1\\/progress\\/.+\\/.+/).reply(config => {\n const data = JSON.parse(config.data);\n\n return [\n 201,\n {\n indicatorProgress: data.indicatorProgressParameters\n ? [0.1, 0.3, 0.65]\n : undefined,\n contraceptiveMethodProgress: data.contraceptiveMethodProgressParameters\n ? [0, 0.4, 0.5]\n : undefined\n }\n ];\n });\n\n this.onGet(/\\/api\\/v1\\/logs\\/.+/).reply(200, \"OK!\");\n\n this.onPost(/\\/api\\/v1\\/databases\\/documents\\/.+/).reply(config => {\n console.log(\"[POST] /api/v1/databases/documents request body:\");\n console.log(config.data);\n\n // noinspection JSUnusedLocalSymbols\n const { data, ...database } = JSON.parse(config.data);\n\n return [\n 201,\n {\n id: createGuid(),\n ...database\n }\n ];\n });\n\n this.onGet(/\\/api\\/v1\\/csv\\/databases/).reply(\n 200,\n \"[Archive of selected databases]\"\n );\n\n this.onDelete(/\\/api\\/v1\\/databases/).reply(204);\n\n this.onDelete(/\\/api\\/v1\\/runs/).reply(204);\n }\n}\n\nexport default MockApiAdapter;\n","import axios from \"axios\";\nimport MockApiAdapter from \"./mockApiAdapter\";\nimport { developmentMode, maximumYear, minimumYear } from \"../constants\";\nimport i18next from \"i18next\";\n\nconst createSession = (username, token) => {\n localStorage.setItem(\"session\", JSON.stringify({ username, token }));\n};\n\nconst getSession = () => {\n const data = localStorage.getItem(\"session\");\n\n return data ? JSON.parse(data) : { username: undefined, token: undefined };\n};\n\nconst deleteSession = () => {\n localStorage.removeItem(\"session\");\n};\n\nconst createHeaders = () => ({\n \"FPET-Auth\": `token ${getSession().token}`,\n \"FPET-Language\": i18next.language\n});\n\nconst webService = axios.create({\n baseURL: process.env.REACT_APP_WEB_SERVICE_URL\n});\n\nwebService.interceptors.response.use(undefined, error => {\n if (error.response.status === 401) {\n deleteSession();\n\n window.location.href = \"/\";\n\n return;\n }\n\n return Promise.reject(error);\n});\n\nif (developmentMode || window.location.search.includes(\"enable-api-mocking\")) {\n new MockApiAdapter(webService);\n}\n\nconst fetch = (url, cancellationToken, config = {}) =>\n webService\n .get(url, {\n headers: createHeaders(),\n cancellationToken,\n ...config\n })\n .catch(error => {\n if (!axios.isCancel(error)) {\n console.log(error);\n\n throw error;\n }\n });\n\nconst createUrl = (path, query, appendSessionToken) => {\n let url = `${process.env.REACT_APP_WEB_SERVICE_URL}/${path}`;\n\n if (query) {\n url = `${url}?${query}`;\n }\n\n if (appendSessionToken) {\n url = `${url}${!query ? \"?\" : \"&\"}token=${getSession().token}`;\n }\n\n return url;\n};\n\nexport const getUsername = () => getSession().username;\n\nexport const createRunLogDownloadUrl = runId =>\n createUrl(`/api/v1/logs/${runId}`, undefined);\n\nconst createDatabasesDownloadUrl = databaseIds =>\n databaseIds && databaseIds.length\n ? createUrl(\n \"/api/v1/csv/databases/\",\n databaseIds.map(databaseId => `id=${databaseId}`).join(\"&\")\n )\n : undefined;\n\nexport const getSignal = () => axios.CancelToken.source();\n\nexport const fetchSystemStatus = cancellationToken =>\n fetch(\"/api/v1/systeminfo\", cancellationToken);\n\nexport const login = (username, password, cancellationToken) =>\n webService\n .post(`/api/v1/session/${username}?password=${password}`, {\n cancellationToken\n })\n .then(response => {\n createSession(username, response.data.token);\n\n return response;\n })\n .catch(error => {\n if (!axios.isCancel(error)) {\n throw error;\n }\n });\n\nexport const logout = (username, cancellationToken) =>\n webService\n .delete(`/api/v1/session/${username}`, {\n headers: createHeaders(),\n cancellationToken\n })\n .then(response => {\n deleteSession();\n\n return response;\n })\n .catch(error => {\n if (!axios.isCancel(error)) {\n throw error;\n }\n });\n\nexport const fetchDatabases = cancellationToken =>\n fetch(\"/api/v1/databases/\", cancellationToken);\n\nexport const uploadDatabase = (data, type, onProgress, cancellationToken) =>\n webService\n .post(`/api/v1/databases/files/${type}/`, data, {\n headers: createHeaders(),\n cancellationToken,\n onUploadProgress: onProgress\n })\n .catch(error => {\n if (!axios.isCancel(error)) {\n throw error;\n }\n });\n\nexport const startRun = (\n runName,\n surveyDatabaseId,\n populationDatabaseId,\n emuDatabaseId,\n countryNumericCode,\n region,\n period,\n cancellationToken\n) =>\n webService.post(\n \"/api/v1/runs/\",\n {\n name: runName,\n surveyDatabaseId,\n populationDatabaseId,\n emuDatabaseId,\n countryNumericCode: !region ? countryNumericCode : undefined,\n regionCode: region,\n period: {\n firstYear: minimumYear,\n lastYear: maximumYear\n }\n },\n {\n headers: createHeaders(),\n cancellationToken\n }\n );\n\nexport const fetchRuns = (\n includePendingRuns,\n includeFailedRuns,\n cancellationToken\n) => {\n const url = createUrl(\n \"/api/v1/runs/\",\n `includePending=${includePendingRuns}&includeFailed=${includeFailedRuns}`\n );\n\n return fetch(url, cancellationToken);\n};\n\nexport const fetchSurveyDatabase = (\n databaseId,\n divisionNumericCodeOrRegion,\n runId,\n cancellationToken\n) => {\n let url = `/api/v1/surveys/${databaseId}/${divisionNumericCodeOrRegion}`;\n\n if (runId) {\n url = `${url}?runId=${runId}`;\n }\n\n return fetch(url, cancellationToken);\n};\n\nexport const fetchPopulationDatabase = (\n databaseId,\n divisionNumericCodeOrRegion,\n cancellationToken\n) =>\n fetch(\n `/api/v1/populations/${databaseId}/${divisionNumericCodeOrRegion}`,\n cancellationToken\n );\n\nexport const fetchEmuDatabase = (\n databaseId,\n divisionNumericCodeOrRegion,\n cancellationToken\n) =>\n fetch(\n `/api/v1/emu/${databaseId}/${divisionNumericCodeOrRegion}`,\n cancellationToken\n );\n\nexport const fetchResults = (\n runId,\n comparisonRunId,\n divisionNumericCodeOrRegion,\n cancellationToken\n) => {\n let url = `/api/v1/results/${runId}/${divisionNumericCodeOrRegion}`;\n\n if (comparisonRunId) {\n url = `${url}?comparisonRun=${comparisonRunId}`;\n }\n\n return fetch(url, cancellationToken);\n};\n\nexport const createResultsDownloadUrl = (\n runId,\n comparisonRunId,\n countryNumericCodeOrRegion,\n measures,\n indicators\n) => {\n if (\n !countryNumericCodeOrRegion ||\n !indicators ||\n !indicators.length ||\n !measures ||\n !measures.length\n ) {\n return;\n }\n\n const path = `/api/v1/csv/results/${runId}/${countryNumericCodeOrRegion}/`;\n\n let query = measures\n .map(measure => `measure=${measure}`)\n .concat(indicators.map(indicator => `indicator=${indicator}`))\n .join(\"&\");\n\n if (comparisonRunId) {\n query = `${query}&comparisonRun=${comparisonRunId}`;\n }\n\n return createUrl(path, query);\n};\n\nexport const downloadResults = (\n runId,\n comparisonRunId,\n countryNumericCodeOrRegion,\n measures,\n indicators,\n cancellationToken\n) => {\n const url = createResultsDownloadUrl(\n runId,\n comparisonRunId,\n countryNumericCodeOrRegion,\n measures,\n indicators\n );\n\n return fetch(url, cancellationToken);\n};\n\nexport const downloadData = (\n runId,\n countryNumericCodeOrRegion,\n cancellationToken\n) => {\n const url = `/api/v1/csv/dataset/${runId}/${countryNumericCodeOrRegion}/`;\n\n return fetch(url, cancellationToken, { responseType: \"blob\" });\n};\n\nexport const fetchChartSets = cancellationToken =>\n fetch(\"/api/v1/chartsets\", cancellationToken);\n\nexport const createChartSetDownloadUrl = (\n runId,\n comparisonRunId,\n countryNumericCodeOrRegion,\n chartSet,\n maritalStatus,\n measure\n) =>\n countryNumericCodeOrRegion &&\n createUrl(\n `/api/v1/chartsets/${chartSet}/${runId}/${countryNumericCodeOrRegion}/${maritalStatus}/${measure}`,\n undefined\n );\n\nexport const downloadChartSet = (\n runId,\n comparisonRunId,\n countryNumericCodeOrRegion,\n chartSet,\n maritalStatus,\n measure,\n cancellationToken\n) => {\n const url = createChartSetDownloadUrl(\n runId,\n comparisonRunId,\n countryNumericCodeOrRegion,\n chartSet,\n maritalStatus,\n measure\n );\n\n return fetch(url, cancellationToken, { responseType: \"arraybuffer\" });\n};\n\nexport const createChartsDownloadUrl = (\n runId,\n comparisonRunId,\n countryNumericCodeOrRegion,\n maritalStatus,\n measure,\n indicators\n) =>\n countryNumericCodeOrRegion && indicators && indicators.length\n ? createUrl(\n `/api/v1/charts/${runId}/${countryNumericCodeOrRegion}/${maritalStatus}/${measure}`,\n indicators.map(indicator => `indicator=${indicator}`).join(\"&\")\n )\n : undefined;\n\nexport const downloadCharts = (\n runId,\n comparisonRunId,\n countryNumericCodeOrRegion,\n maritalStatus,\n measure,\n indicators,\n cancellationToken\n) => {\n const url = createChartsDownloadUrl(\n runId,\n comparisonRunId,\n countryNumericCodeOrRegion,\n maritalStatus,\n measure,\n indicators\n );\n\n return fetch(url, cancellationToken, { responseType: \"arraybuffer\" });\n};\n\nexport const calculateTargets = (\n runId,\n countryNumericCodeOrRegion,\n parameters,\n cancellationToken\n) =>\n webService\n .post(\n `/api/v1/targets/${runId}/${countryNumericCodeOrRegion}/`,\n parameters,\n {\n headers: createHeaders(),\n cancellationToken\n }\n )\n .catch(error => {\n if (!axios.isCancel(error)) {\n throw error;\n }\n });\n\nexport const calculateProgress = (\n runId,\n countryNumericCodeOrRegion,\n parameters,\n cancellationToken\n) =>\n webService\n .post(\n `/api/v1/progress/${runId}/${countryNumericCodeOrRegion}/`,\n parameters,\n {\n headers: createHeaders(),\n cancellationToken\n }\n )\n .catch(error => {\n if (!axios.isCancel(error)) {\n throw error;\n }\n });\n\nexport const fetchRunLog = (runId, cancellationToken) => {\n const url = createRunLogDownloadUrl(runId);\n\n return fetch(url, cancellationToken);\n};\n\nexport const saveDatabase = (database, cancellationToken) =>\n webService\n .post(`/api/v1/databases/documents/${database.type}`, database, {\n headers: createHeaders(),\n cancellationToken\n })\n .catch(error => {\n if (!axios.isCancel(error)) {\n throw error;\n }\n });\n\nexport const downloadDatabases = (databaseIds, cancellationToken) => {\n const url = createDatabasesDownloadUrl(databaseIds);\n\n return fetch(url, cancellationToken, { responseType: \"arraybuffer\" });\n};\n\nexport const deleteDatabases = (databaseIds, cancellationToken) => {\n const query = databaseIds.map(databaseId => `id=${databaseId}`).join(\"&\");\n\n return webService\n .delete(`/api/v1/databases/?${query}`, {\n headers: createHeaders(),\n cancellationToken\n })\n .catch(error => {\n if (!axios.isCancel(error)) {\n throw error;\n }\n });\n};\n\nexport const deleteRuns = (runIds, cancellationToken) => {\n const query = runIds.map(runId => `id=${runId}`).join(\"&\");\n\n return webService\n .delete(`/api/v1/runs/?${query}`, {\n headers: createHeaders(),\n cancellationToken\n })\n .catch(error => {\n if (!axios.isCancel(error)) {\n throw error;\n }\n });\n};\n","import * as api from \"./api/api\";\nimport { developmentMode } from \"./constants\";\n\nconst authentication = {\n getUsername() {\n return developmentMode ? \"guest\" : api.getUsername();\n },\n login(username, password, callback, cancellationToken) {\n api\n .login(username, password)\n .then(() => {\n this.username = username;\n\n callback && callback();\n })\n .catch(error => {\n this.username = undefined;\n\n callback && callback(error);\n });\n },\n logout(callback, cancellationToken) {\n api\n .logout(this.username)\n .then(() => {\n this.username = undefined;\n\n callback && callback();\n })\n .catch(error => {\n callback && callback(error);\n });\n }\n};\n\nexport default authentication;\n","import React from \"react\";\nimport preval from \"preval.macro\";\nimport { withTranslation } from \"react-i18next\";\n\nconst buildDate = preval`module.exports = new Date().toISOString()`;\n\nconst styles = {\n container: {\n fontSize: \"smaller\"\n }\n};\n\nconst LastUpdated = ({ t }) => (\n \n {t(\"Last updated at\")} {buildDate}\n \n);\n\nexport default withTranslation()(LastUpdated);\n","import React from \"react\";\nimport Markdown from \"react-markdown\";\nimport { withErrorBoundary } from \"../errors\";\nimport { withTranslation } from \"react-i18next\";\nimport LastUpdated from \"./LastUpdated\";\n\nconst About = ({ t }) => (\n
\n {t(\"ABOUT_INTRO\")}\n {t(\"ABOUT_INSTRUCTIONS\")}\n {t(\"ABOUT_ALKEMA\")}\n {t(\"ABOUT_CAHILL\")}\n {t(\"ABOUT_WHELDON\")}\n {t(\"ABOUT_DATA\")}\n {t(\"ABOUT_CREDITS\")}\n {t(\"ABOUT_CITATION\")}\n\n

\n \n

\n
\n);\n\nexport default withErrorBoundary(withTranslation()(About));\n","import { createGuid, getCurrentYear, groupBy } from \"./utilities\";\n\nconst toNullable = value => (value === \"None\" ? null : value);\n\nconst normalizeDivisions = divisions =>\n divisions.reduce((result, division) => {\n const { numericCode, ...rest } = division;\n\n result[numericCode] = rest;\n\n return result;\n }, {});\n\nexport const normalizeDatabases = databases =>\n databases.reduce((result, database) => {\n const { id, ...rest } = database;\n\n let regionCodes = database.regionCodes || database.regions;\n\n regionCodes = regionCodes && regionCodes.filter(regionCode => regionCode);\n\n result[id] = {\n ...rest,\n divisions: normalizeDivisions(database.divisions),\n regionCodes: regionCodes\n };\n\n return result;\n }, {});\n\nexport const normalizeSurveyData = surveyData =>\n surveyData.map(datum => ({\n ...datum,\n ageGroupBias: toNullable(datum.ageGroupBias),\n modernMethodBias: toNullable(datum.modernMethodBias),\n ratioModernAny: datum.ratioModernAny\n }));\n\nexport const normalizePopulationData = populationData => populationData;\n\nexport const normalizeEmuData = emuData =>\n emuData.map(datum => ({\n ...datum,\n startYear: datum.year,\n endYear: datum.year\n }));\n\nexport const normalizeRuns = runs =>\n runs.reduce((result, run) => {\n const { id, ...rest } = run;\n\n result[id] = {\n ...rest,\n startedAt: new Date(rest.startedAt),\n createdAt: new Date(rest.createdAt),\n completed: rest.completed || rest.failed\n };\n\n return result;\n }, {});\n\nexport const normalizeResults = results => groupBy(results, \"indicator\");\n\nexport const normalizeChartSets = data => data;\n\nexport const filterSurveyData = (surveyData, firstYear, lastYear) =>\n surveyData &&\n surveyData.filter(\n datum => datum.startDate >= firstYear && datum.startDate <= lastYear\n );\n\nexport const filterPopulationData = (populationData, firstYear, lastYear) =>\n populationData &&\n populationData.filter(\n datum => datum.midYear >= firstYear && datum.midYear <= lastYear\n );\n\nexport const getPeriod = results => {\n const years = results.map(datum => datum.year);\n\n return {\n firstYear: Math.min(...years),\n lastYear: Math.max(...years)\n };\n};\n\nexport const filterResults = (results, firstYear, lastYear) => {\n if (!results) {\n return;\n }\n\n return Object.keys(results).reduce((result, indicator) => {\n result[indicator] = results[indicator].filter(\n datum => datum.year >= firstYear && datum.year <= lastYear\n );\n\n return result;\n }, {});\n};\n\nexport const getScaledResults = (measure, results) => {\n if (measure === \"percentage\") {\n return results;\n }\n\n return results.map(datum => ({\n ...datum,\n percentile2pt5: datum.percentile2pt5 / 1000,\n percentile10: datum.percentile10 / 1000,\n median: datum.median / 1000,\n percentile90: datum.percentile90 / 1000,\n percentile97pt5: datum.percentile97pt5 / 1000,\n comparisonPercentile2pt5: datum.comparisonPercentile2pt5 / 1000,\n comparisonPercentile10: datum.comparisonPercentile10 / 1000,\n comparisonMedian: datum.comparisonMedian / 1000,\n comparisonPercentile90: datum.comparisonPercentile90 / 1000,\n comparisonPercentile97pt5: datum.comparisonPercentile97pt5 / 1000\n }));\n};\n\nexport const convertMaritalStatusToIsInUnion = maritalStatus => {\n switch (maritalStatus) {\n case \"married\":\n return true;\n\n case \"unmarried\":\n return false;\n\n default:\n return null;\n }\n};\n\nexport const createDefaultSurveyDatum = () => {\n const currentYear = getCurrentYear();\n\n return {\n id: createGuid(),\n include: true,\n startDate: currentYear - 1,\n endDate: currentYear,\n isInUnion: true,\n ageRange: \"15-49\",\n dataSeriesType: \"Other\",\n groupTypeRelativeToBaseline: \"MW\",\n contraceptiveUseAny: 0,\n isPertainingToMethodsUsedSinceLastPregnancy: false,\n hasGeographicalRegionBias: false,\n hasNonPregnantAndOtherPositiveBiases: false,\n ageGroupBias: \"None\",\n modernMethodBias: \"None\",\n hasTraditionalMethodBias: false,\n hasAbsenceOfProbingQuestionsBias: false\n };\n};\n\nexport const createDefaultPopulationDatum = () => ({\n id: createGuid(),\n isInUnion: true,\n ageRange: \"15-49\",\n midYear: getCurrentYear(),\n population: 0\n});\n\nexport const createDefaultEmuDatum = () => {\n const currentYear = getCurrentYear();\n\n return {\n id: createGuid(),\n startYear: currentYear,\n endYear: currentYear,\n emu: 0,\n serviceStatisticType: \"clients\"\n };\n};\n\nexport const synchonizeContraceptivePrevalence = (item, updatedField) => {\n let {\n contraceptiveUseModern,\n contraceptiveUseTraditional,\n contraceptiveUseAny,\n ...rest\n } = item;\n\n if (updatedField === \"contraceptiveUseModern\") {\n contraceptiveUseTraditional = contraceptiveUseTraditional || 0;\n\n if (contraceptiveUseModern + contraceptiveUseTraditional > 1) {\n contraceptiveUseTraditional = 1 - contraceptiveUseModern;\n }\n\n contraceptiveUseAny = contraceptiveUseModern + contraceptiveUseTraditional;\n } else if (updatedField === \"contraceptiveUseTraditional\") {\n contraceptiveUseModern = contraceptiveUseModern || 0;\n\n if (contraceptiveUseModern + contraceptiveUseTraditional > 1) {\n contraceptiveUseModern = 1 - contraceptiveUseTraditional;\n }\n\n contraceptiveUseAny = contraceptiveUseModern + contraceptiveUseTraditional;\n } else if (updatedField === \"contraceptiveUseAny\") {\n contraceptiveUseModern = undefined;\n contraceptiveUseTraditional = undefined;\n }\n\n return {\n ...rest,\n contraceptiveUseModern,\n contraceptiveUseTraditional,\n contraceptiveUseAny\n };\n};\n","import React from \"react\";\nimport { withStyles } from \"@material-ui/core/styles\";\nimport Drawer from \"@material-ui/core/Drawer\";\n\nconst DRAWER_WIDTH = 350;\nconst DENSE_TOOLBAR = true;\n\nconst styles = theme => ({\n drawerPaper: {\n width: DRAWER_WIDTH,\n padding: 10\n },\n mainContent: {\n marginLeft: DRAWER_WIDTH\n },\n toolbar: {\n ...theme.mixins.toolbar,\n marginTop: DENSE_TOOLBAR ? -16 : 0\n }\n});\n\nconst contentWithDrawer = (MainContent, DrawerContent) => {\n const Component = ({ classes, ...rest }) => (\n
\n \n
\n\n \n \n\n
\n \n
\n
\n );\n\n return withStyles(styles)(Component);\n};\n\nexport default contentWithDrawer;\n","import * as PropTypes from \"prop-types\";\n\nexport const databasePropType = PropTypes.shape({\n id: PropTypes.string.isRequired,\n name: PropTypes.string.isRequired\n});\n\nexport const databaseTypePropType = PropTypes.oneOf([\n \"default\",\n \"custom\",\n \"external\"\n]);\n\nexport const deltaPropType = PropTypes.oneOf([\"total\", \"additional\"])\n .isRequired;\n\nexport const directionPropType = PropTypes.oneOf([\"greaterThan\", \"lessThan\"])\n .isRequired;\n\nexport const emuDatumPropType = PropTypes.shape({\n id: PropTypes.string,\n startYear: PropTypes.number.isRequired,\n endYear: PropTypes.number.isRequired,\n emu: PropTypes.number.isRequired,\n serviceStatisticType: PropTypes.string.isRequired\n});\n\nexport const indicatorResultPropType = PropTypes.shape({\n isInUnion: PropTypes.bool,\n ageRange: PropTypes.string.isRequired,\n year: PropTypes.number.isRequired,\n mean: PropTypes.number.isRequired,\n percentile2pt5: PropTypes.number.isRequired,\n percentile5: PropTypes.number.isRequired,\n percentile10: PropTypes.number.isRequired,\n median: PropTypes.number.isRequired,\n percentile90: PropTypes.number.isRequired,\n percentile95: PropTypes.number.isRequired,\n percentile97pt5: PropTypes.number.isRequired,\n comparatorMean: PropTypes.number,\n comparatorPercentile2pt5: PropTypes.number,\n comparatorPercentile5: PropTypes.number,\n comparatorPercentile10: PropTypes.number,\n comparatorMedian: PropTypes.number,\n comparatorPercentile90: PropTypes.number,\n comparatorPercentile95: PropTypes.number,\n comparatorPercentile97pt5: PropTypes.number\n});\n\nexport const labeledValuePropType = PropTypes.shape({\n value: PropTypes.string.isRequired,\n label: PropTypes.string.isRequired\n});\n\nexport const managedLabeledValuePropType = PropTypes.shape({\n value: PropTypes.string.isRequired,\n label: PropTypes.string.isRequired,\n isGlobal: PropTypes.bool,\n isInUse: PropTypes.bool,\n createdAt: PropTypes.instanceOf(Date)\n});\n\nexport const maritalStatusPropType = PropTypes.oneOf([\n \"married\",\n \"unmarried\",\n \"all_women\"\n]).isRequired;\n\nexport const measurePropType = PropTypes.oneOf([\"percentage\", \"count\"]);\n\nexport const periodPropType = PropTypes.shape({\n firstYear: PropTypes.number.isRequired,\n lastYear: PropTypes.number.isRequired\n}).isRequired;\n\nexport const populationDatumPropType = PropTypes.shape({\n id: PropTypes.string,\n isInUnion: PropTypes.bool.isRequired,\n ageRange: PropTypes.string.isRequired,\n midYear: PropTypes.number.isRequired,\n population: PropTypes.number.isRequired\n});\n\nexport const resultPropType = PropTypes.shape({\n contraceptiveUseAny: PropTypes.arrayOf(indicatorResultPropType).isRequired,\n contraceptiveUseModern: PropTypes.arrayOf(indicatorResultPropType),\n contraceptiveUseTraditional: PropTypes.arrayOf(indicatorResultPropType),\n unmetNeedAny: PropTypes.arrayOf(indicatorResultPropType).isRequired,\n unmetNeedModern: PropTypes.arrayOf(indicatorResultPropType).isRequired,\n demand: PropTypes.arrayOf(indicatorResultPropType).isRequired,\n demandSatisfied: PropTypes.arrayOf(indicatorResultPropType).isRequired,\n demandSatisfiedModern: PropTypes.arrayOf(indicatorResultPropType).isRequired,\n ratioModernAny: PropTypes.arrayOf(indicatorResultPropType)\n});\n\nexport const surveyDatumPropType = PropTypes.shape({\n id: PropTypes.string,\n startDate: PropTypes.number.isRequired,\n endDate: PropTypes.number.isRequired,\n isInUnion: PropTypes.bool.isRequired,\n ageRange: PropTypes.string.isRequired,\n dataSeriesType: PropTypes.string.isRequired,\n groupTypeRelativeToBaseline: PropTypes.string.isRequired,\n contraceptiveUseModern: PropTypes.number,\n contraceptiveUseTraditional: PropTypes.number,\n contraceptiveUseAny: PropTypes.number.isRequired,\n ratioModernAny: PropTypes.number,\n unmetNeedModern: PropTypes.number,\n unmetNeedAny: PropTypes.number,\n demand: PropTypes.number,\n demandModern: PropTypes.number,\n demandSatisfied: PropTypes.number,\n demandSatisfiedModern: PropTypes.number,\n nonUse: PropTypes.number,\n isPertainingToMethodsUsedSinceLastPregnancy: PropTypes.bool.isRequired,\n pertainingToMethodsUsedSinceLastPregnancyReason: PropTypes.string,\n hasGeographicalRegionBias: PropTypes.bool.isRequired,\n geographicalRegionBiasReason: PropTypes.string,\n hasNonPregnantAndOtherPositiveBiases: PropTypes.bool.isRequired,\n nonPregnantAndOtherPositiveBiasesReason: PropTypes.string,\n ageGroupBias: PropTypes.oneOf([\"+\", \"-\", \"?\", \"None\"]),\n modernMethodBias: PropTypes.oneOf([\"+\", \"-\", \"None\"]),\n hasTraditionalMethodBias: PropTypes.bool.isRequired,\n traditionalMethodBiasReason: PropTypes.string,\n hasAbsenceOfProbingQuestionsBias: PropTypes.bool.isRequired,\n seModern: PropTypes.number,\n seTraditional: PropTypes.number,\n seUnmetNeed: PropTypes.number,\n seLogRModernNoUse: PropTypes.number,\n seLogRTraditionalNoUse: PropTypes.number,\n seLogRUnmetNoNeed: PropTypes.number,\n lowerContraceptiveUseAny: PropTypes.number,\n estimatedContraceptiveUseAny: PropTypes.number,\n upperContraceptiveUseAny: PropTypes.number,\n lowerContraceptiveUseModern: PropTypes.number,\n estimatedContraceptiveUseModern: PropTypes.number,\n upperContraceptiveUseModern: PropTypes.number,\n lowerContraceptiveUseTraditional: PropTypes.number,\n estimatedContraceptiveUseTraditional: PropTypes.number,\n upperContraceptiveUseTraditional: PropTypes.number,\n lowerUnmetNeedAny: PropTypes.number,\n estimatedUnmetNeedAny: PropTypes.number,\n upperUnmetNeedAny: PropTypes.number,\n sourceId: PropTypes.string,\n recordId: PropTypes.string\n});\n","import React, { Component } from \"react\";\nimport * as PropTypes from \"prop-types\";\nimport nouislider from \"nouislider\";\nimport \"nouislider/distribute/nouislider.css\";\n\nclass NoUiSlider extends Component {\n createSlider = () => {\n this.slider = nouislider.create(this.sliderContainer, {\n range: this.props.range,\n start: this.props.value,\n margin: this.props.margin,\n connect: this.props.connect,\n pips: this.props.pips,\n step: this.props.step,\n tooltips: this.props.tooltips,\n format: this.props.format,\n behaviour: this.props.behaviour\n });\n\n this.slider.on(\"change\", () => this.onChange());\n };\n\n onChange = () => {\n if (this.props.onChange) {\n const [lower, upper] = this.slider.get();\n\n this.props.onChange({\n lower,\n upper\n });\n }\n };\n\n componentDidMount() {\n this.createSlider();\n }\n\n componentDidUpdate() {\n if (this.props.value) {\n this.slider.set(this.props.value);\n }\n }\n\n componentWillUnmount() {\n this.slider.destroy();\n }\n\n render() {\n return
(this.sliderContainer = element)} />;\n }\n}\n\nNoUiSlider.propTypes = {\n range: PropTypes.shape({\n min: PropTypes.oneOfType([\n PropTypes.number,\n PropTypes.arrayOf(PropTypes.number)\n ]).isRequired,\n max: PropTypes.oneOfType([\n PropTypes.number,\n PropTypes.arrayOf(PropTypes.number)\n ]).isRequired\n }).isRequired,\n value: PropTypes.oneOfType([\n PropTypes.number,\n PropTypes.arrayOf(PropTypes.number)\n ]).isRequired,\n step: PropTypes.number,\n margin: PropTypes.number,\n connect: PropTypes.oneOfType([\n PropTypes.bool,\n PropTypes.arrayOf(PropTypes.bool)\n ]),\n pips: PropTypes.oneOfType([\n PropTypes.shape({\n mode: PropTypes.oneOf([\"count\"]),\n values: PropTypes.number.isRequired,\n density: PropTypes.number.isRequired\n })\n ]),\n format: PropTypes.object,\n tooltips: PropTypes.oneOfType([\n PropTypes.bool,\n PropTypes.object,\n PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, PropTypes.object]))\n ]),\n behaviour: PropTypes.string,\n onChange: PropTypes.func\n};\n\nexport default NoUiSlider;\n","import React from \"react\";\nimport * as PropTypes from \"prop-types\";\nimport { periodPropType } from \"../../propTypes\";\nimport { maximumYear, minimumYear } from \"../../constants\";\nimport { getCurrentYear } from \"../../utilities\";\nimport NoUiSlider from \"../NoUiSlider\";\nimport wNumb from \"wnumb\";\nimport \"./PeriodSelector.css\";\n\nconst PeriodSelector = props => (\n
\n \n props.onChange({\n firstYear: parseInt(value.lower, 10),\n lastYear: parseInt(value.upper, 10)\n })\n }\n />\n
\n);\n\nPeriodSelector.propTypes = {\n minimumYear: PropTypes.number,\n maximumYear: PropTypes.number,\n period: periodPropType,\n onChange: PropTypes.func.isRequired\n};\n\nPeriodSelector.defaultProps = {\n minimumYear,\n maximumYear,\n period: {\n firstYear: maximumYear + 20,\n lastYear: getCurrentYear() + 1\n }\n};\n\nexport default PeriodSelector;\n","import React from \"react\";\nimport * as PropTypes from \"prop-types\";\nimport { withStyles } from \"@material-ui/core\";\nimport classNames from \"classnames\";\nimport Button from \"@material-ui/core/Button\";\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\n\nconst styles = {\n button: {\n width: \"100%\"\n },\n container: {\n position: \"relative\"\n },\n progress: {\n position: \"absolute\",\n top: \"50%\",\n left: \"50%\",\n marginTop: -12,\n marginLeft: -12\n }\n};\n\nconst ProgressButton = props => (\n
\n \n {props.children}\n \n\n {props.loading && (\n \n )}\n
\n);\n\nProgressButton.propTypes = {\n variant: PropTypes.string,\n color: PropTypes.string,\n disabled: PropTypes.bool,\n className: PropTypes.string,\n buttonClassName: PropTypes.string,\n loading: PropTypes.bool,\n onClick: PropTypes.func.isRequired\n};\n\nProgressButton.defaultProps = {\n variant: \"contained\",\n color: \"primary\",\n disabled: false,\n loading: false\n};\n\nexport default withStyles(styles)(ProgressButton);\n","import React from \"react\";\nimport * as PropTypes from \"prop-types\";\nimport { periodPropType } from \"../../propTypes\";\nimport { withStyles } from \"@material-ui/core/styles\";\nimport Divider from \"@material-ui/core/Divider\";\nimport LinearProgress from \"@material-ui/core/LinearProgress\";\nimport Select from \"react-select\";\nimport { withTranslation } from \"react-i18next\";\nimport PeriodSelector from \"../PeriodSelector/PeriodSelector\";\nimport ProgressButton from \"../ProgressButton\";\n\nconst styles = {\n actionButton: {\n display: \"inline-flex\",\n marginTop: 10\n },\n countrySelector: {\n display: \"none\"\n },\n divider: {\n margin: \"10px 0\"\n },\n instruction: {\n margin: \"10px 0\",\n fontWeight: \"bold\"\n },\n periodSelector: {\n margin: \"30px 20px 40px\",\n zIndex: -1\n },\n progress: {\n margin: \"15px 0 5px\"\n },\n select: {\n marginBottom: 10\n },\n stepNumber: {\n display: \"none\"\n }\n};\n\nconst CompareRunsDrawerContent = ({ t, ...rest }) => {\n const runs = Object.entries(rest.runs).map(([id, run]) => ({\n value: id,\n label: run.name\n }));\n\n const countries = Object.entries(rest.countries)\n .map(([numericCode, country]) => ({\n value: parseInt(numericCode, 10),\n label: country.name\n }))\n .sort((a, b) => a.label.localeCompare(b.label));\n\n const regions = rest.regions.map((region, index) => ({\n value: -index - 1,\n label: region\n }));\n\n const selectedRegion = regions.find(\n region => region.label === rest.selectedRegion\n );\n\n const selectedRegionValue = selectedRegion && selectedRegion.value;\n\n const countriesAndRegions = countries.concat(regions);\n\n return (\n <>\n {rest.loadingData && (\n
\n \n
\n )}\n\n
\n 1.{\" \"}\n {t(\"Select runs to compare\")}\n
\n\n value === rest.selectedRunId)}\n className={rest.classes.select}\n onChange={({ value }) => rest.onSelectRun(value)}\n />\n\n value === rest.selectedComparisonRunId\n )}\n className={rest.classes.select}\n onChange={({ value }) => rest.onSelectComparisonRun(value)}\n />\n\n
\n \n
\n 2. {t(\"Select country/population to view\")}\n
\n\n \n value === (selectedRegionValue || rest.selectedCountryNumericCode)\n )}\n className={rest.classes.select}\n onChange={({ value }) => {\n if (value >= 0) {\n rest.onSelectCountry(value);\n } else {\n rest.onSelectRegion(\n regions.find(region => region.value === value).label\n );\n }\n }}\n />\n\n \n
\n\n \n {t(\"Compare runs\")}\n \n\n \n\n
\n {t(\"Select years for display/export of results\")}\n
\n\n
\n \n
\n \n );\n};\n\nCompareRunsDrawerContent.propTypes = {\n loadingData: PropTypes.bool,\n runs: PropTypes.objectOf(\n PropTypes.shape({\n name: PropTypes.string.isRequired\n })\n ),\n selectedRunId: PropTypes.string,\n selectedComparisonRunId: PropTypes.string,\n countries: PropTypes.objectOf(\n PropTypes.shape({\n name: PropTypes.string.isRequired\n })\n ),\n selectedCountryNumericCode: PropTypes.number,\n regions: PropTypes.arrayOf(PropTypes.string),\n selectedRegion: PropTypes.string,\n period: periodPropType,\n loadingRuns: PropTypes.bool,\n onSelectRun: PropTypes.func.isRequired,\n onSelectComparisonRun: PropTypes.func.isRequired,\n onSelectCountry: PropTypes.func.isRequired,\n onSelectRegion: PropTypes.func.isRequired,\n onChangePeriod: PropTypes.func.isRequired,\n onCompareRuns: PropTypes.func.isRequired\n};\n\nCompareRunsDrawerContent.defaultProps = {\n loadingData: false,\n runs: {},\n countries: {},\n regions: [],\n loadingRuns: false\n};\n\nexport default withTranslation()(withStyles(styles)(CompareRunsDrawerContent));\n","import React from \"react\";\nimport * as PropTypes from \"prop-types\";\nimport { measurePropType } from \"../../propTypes\";\nimport { withStyles } from \"@material-ui/core/styles\";\nimport { withTranslation } from \"react-i18next\";\n\nconst styles = {\n chartRow: {\n display: \"flex\",\n flexWrap: \"wrap\"\n },\n heading: {\n margin: \"40px 0 20px\",\n fontSize: \"medium\",\n fontWeight: \"bold\"\n }\n};\n\nconst ChartsChartList = ({ t, ...rest }) => (\n
\n {rest.children.length === 10 ? (\n <>\n
\n {rest.children.slice(0, rest.measure === \"percentage\" ? 4 : 3)}\n
\n\n

\n {t(\"Unmet need and demand satisfied for modern methods\")}\n

\n\n
\n {[5, 7, 9].map(index => rest.children[index])}\n
\n\n

\n {t(\"Unmet need and demand satisfied for any method\")}\n

\n\n
\n {[4, 6, 8].map(index => rest.children[index])}\n
\n \n ) : (\n
{rest.children}
\n )}\n
\n);\n\nChartsChartList.propTypes = {\n children: PropTypes.arrayOf(PropTypes.element),\n measure: measurePropType.isRequired,\n className: PropTypes.string\n};\n\nexport default withTranslation()(withStyles(styles)(ChartsChartList));\n","import React from \"react\";\nimport * as PropTypes from \"prop-types\";\nimport FormControl from \"@material-ui/core/FormControl\";\nimport Input from \"@material-ui/core/Input\";\nimport InputLabel from \"@material-ui/core/InputLabel\";\nimport NativeSelect from \"@material-ui/core/NativeSelect\";\nimport { withTranslation } from \"react-i18next\";\n\nconst ChartSetSelector = ({ t, ...rest }) => (\n
\n \n \n {t(\"Chart set\")}\n \n\n }\n value={rest.value}\n onChange={e => {\n rest.onChange(e.target.value);\n }}\n >\n {rest.chartSets.map(chartSet => (\n \n ))}\n \n \n
\n);\n\nChartSetSelector.propTypes = {\n chartSets: PropTypes.arrayOf(\n PropTypes.shape({\n value: PropTypes.string.isRequired,\n label: PropTypes.string.isRequired\n })\n ).isRequired,\n value: PropTypes.string,\n className: PropTypes.string,\n onChange: PropTypes.func.isRequired\n};\n\nexport default withTranslation()(ChartSetSelector);\n","import React from \"react\";\nimport * as PropTypes from \"prop-types\";\nimport { maritalStatusPropType } from \"../../propTypes\";\nimport FormControl from \"@material-ui/core/FormControl\";\nimport Input from \"@material-ui/core/Input\";\nimport InputLabel from \"@material-ui/core/InputLabel\";\nimport NativeSelect from \"@material-ui/core/NativeSelect\";\nimport { withTranslation } from \"react-i18next\";\n\nconst ChartsMaritalStatusSelector = ({ t, ...rest }) => (\n
\n \n \n {t(rest.label)}\n \n\n }\n value={rest.value}\n onChange={e => rest.onChange(e.target.value)}\n >\n \n \n \n \n \n
\n);\n\nChartsMaritalStatusSelector.propTypes = {\n label: PropTypes.string,\n value: maritalStatusPropType,\n className: PropTypes.string,\n onChange: PropTypes.func.isRequired\n};\n\nChartsMaritalStatusSelector.defaultProps = {\n label: \"Marital status\"\n};\n\nexport default withTranslation()(ChartsMaritalStatusSelector);\n","import React from \"react\";\nimport * as PropTypes from \"prop-types\";\nimport { measurePropType } from \"../propTypes\";\nimport FormControl from \"@material-ui/core/FormControl\";\nimport Input from \"@material-ui/core/Input\";\nimport InputLabel from \"@material-ui/core/InputLabel\";\nimport NativeSelect from \"@material-ui/core/NativeSelect\";\nimport { withTranslation } from \"react-i18next\";\n\nconst MeasureSelector = ({ t, ...rest }) => (\n
\n \n \n {t(rest.label)}\n \n\n }\n value={rest.value}\n onChange={e => rest.onChange(e.target.value)}\n >\n \n \n \n \n
\n);\n\nMeasureSelector.propTypes = {\n label: PropTypes.string,\n value: measurePropType.isRequired,\n className: PropTypes.string,\n onChange: PropTypes.func.isRequired\n};\n\nMeasureSelector.defaultProps = {\n label: \"Measure\"\n};\n\nexport default withTranslation()(MeasureSelector);\n","import React from \"react\";\nimport * as PropTypes from \"prop-types\";\nimport {\n labeledValuePropType,\n maritalStatusPropType,\n measurePropType\n} from \"../../propTypes\";\nimport { withStyles } from \"@material-ui/core/styles\";\nimport Button from \"@material-ui/core/Button\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { withTranslation } from \"react-i18next\";\nimport ChartSetSelector from \"./ChartSetSelector\";\nimport MaritalStatusSelector from \"./ChartsMaritalStatusSelector\";\nimport MeasureSelector from \"../MeasureSelector\";\n\nconst styles = {\n button: {\n marginRight: 20\n },\n buttonGroup: {\n marginTop: 20\n },\n leftSelector: {\n marginRight: 30\n },\n selectors: {\n display: \"flex\"\n },\n title: {\n marginBottom: 10\n }\n};\n\nconst ChartsExporter = ({ t, ...rest }) => (\n
\n \n {t(\"Export chart sets\")}\n \n\n
\n \n \n \n
\n\n
\n \n {t(\"Download chart set\")}\n \n \n {t(\"Download displayed charts\")}\n \n
\n
\n);\n\nChartsExporter.propTypes = {\n chartSets: PropTypes.arrayOf(labeledValuePropType),\n selectedChartSet: PropTypes.string.isRequired,\n selectedMeasure: measurePropType.isRequired,\n selectedMaritalStatus: maritalStatusPropType,\n disableChartSetDownload: PropTypes.bool.isRequired,\n disableSelectedChartsDownload: PropTypes.bool.isRequired,\n onChangeChartSet: PropTypes.func.isRequired,\n onChangeMeasure: PropTypes.func.isRequired,\n onChangeMaritalStatus: PropTypes.func.isRequired,\n onDownloadChartSet: PropTypes.func.isRequired,\n onDownloadSelectedCharts: PropTypes.func.isRequired\n};\n\nexport default withTranslation()(withStyles(styles)(ChartsExporter));\n","import React from \"react\";\nimport * as PropTypes from \"prop-types\";\nimport { withStyles } from \"@material-ui/core\";\nimport { withTranslation } from \"react-i18next\";\n\nconst styles = {\n comparisonRunName: {\n backgroundColor: \"plum\",\n borderBottom: \"3px dashed black\",\n marginLeft: 10\n },\n container: {\n display: \"flex\"\n },\n runName: {\n backgroundColor: \"lavender\",\n borderBottom: \"3px solid black\",\n marginLeft: 10\n }\n};\n\nconst ChartsComparisonLegend = ({ t, ...rest }) => (\n
\n
{t(\"Legend:\")}
\n
{rest.runName}
\n
\n {rest.comparisonRunName}\n
\n
\n);\n\nChartsComparisonLegend.propTypes = {\n runName: PropTypes.string,\n comparisonRunName: PropTypes.string\n};\n\nexport default withTranslation()(withStyles(styles)(ChartsComparisonLegend));\n","import React from \"react\";\nimport * as PropTypes from \"prop-types\";\n\nconst markerSize = 6;\nconst enclosureStrokeWidth = 1.5;\nconst fontSize = 8;\n\nconst calculateMarkerDimensions = markerSize => {\n const scaleFactor = markerSize / 10;\n const triangleScaleFactor = 0.9;\n\n const triangleX = 13.46774 * scaleFactor * triangleScaleFactor;\n const triangleY = 11.6634 * scaleFactor * triangleScaleFactor;\n\n return {\n circle: markerSize,\n square: 17.72454 * scaleFactor,\n triangle: `0,${-triangleY},${-triangleX},${triangleY},${triangleX},${triangleY}`,\n invertedTriangle: `0,${triangleY},${-triangleX},${-triangleY},${triangleX},${-triangleY}`\n };\n};\n\nconst markerDimensions = calculateMarkerDimensions(markerSize);\n\nconst createEnclosureComponent = (\n shape,\n fillColor,\n strokeColor,\n markerDimensions\n) => {\n switch (shape) {\n case \"square\":\n return (\n \n );\n\n case \"triangle\":\n return (\n \n );\n\n case \"inverted triangle\":\n return (\n \n );\n\n default:\n return (\n \n );\n }\n};\n\nconst ChartsMarker = props => {\n let labelVerticalOffset = 1;\n\n if (props.shape === \"triangle\") {\n labelVerticalOffset = 6;\n } else if (props.shape === \"inverted triangle\") {\n labelVerticalOffset = -2;\n }\n\n return (\n \n {createEnclosureComponent(\n props.shape,\n props.fillColor,\n props.strokeColor,\n markerDimensions\n )}\n \n {props.label}\n \n \n );\n};\n\nChartsMarker.propTypes = {\n shape: PropTypes.oneOf([\"circle\", \"triangle\", \"inverted triangle\", \"square\"]),\n fillColor: PropTypes.string,\n strokeColor: PropTypes.string,\n textColor: PropTypes.string,\n label: PropTypes.string\n};\n\nChartsMarker.defaultProps = {\n shape: \"circle\",\n fillColor: \"white\",\n strokeColor: \"black\",\n textColor: \"black\",\n label: \"\"\n};\n\nexport default ChartsMarker;\n","import React from \"react\";\nimport * as PropTypes from \"prop-types\";\nimport ChartsMarker from \"./ChartsMarker\";\n\nconst getShape = groupTypeRelativeToBaseline => {\n switch (groupTypeRelativeToBaseline) {\n case \"SA\":\n return \"triangle\";\n\n case \"EM\":\n case \"AL\":\n return \"inverted triangle\";\n\n case \"BS\":\n case \"HW\":\n return \"square\";\n\n default:\n return \"circle\";\n }\n};\n\nconst getColor = dataSeriesType => {\n switch (dataSeriesType) {\n case \"DHS\":\n return \"#e41a1c\";\n\n case \"MICS\":\n return \"#377eb8\";\n\n case \"National survey\":\n case \"NS\":\n return \"#ff7f00\";\n\n case \"PMA\":\n return \"#984ea3\";\n\n default:\n return \"#4daf4a\";\n }\n};\n\nconst getLabel = (ageGroupBias, hasTraditionalMethodBias, modernMethodBias) => {\n let label;\n\n if (ageGroupBias === \"+\") {\n label = \"+\";\n } else if (ageGroupBias === \"-\") {\n label = \"-\";\n } else if (ageGroupBias === \"?\") {\n label = \"A\";\n } else if (hasTraditionalMethodBias) {\n label = \"F\";\n } else if (modernMethodBias === \"-\") {\n label = \"S-\";\n } else if (modernMethodBias === \"+\") {\n label = \"S+\";\n }\n\n return label;\n};\n\nconst ChartsSurveyMarker = props => (\n \n);\n\nChartsSurveyMarker.propTypes = {\n survey: PropTypes.shape({\n dataSeriesType: PropTypes.string.isRequired,\n groupTypeRelativeToBaseline: PropTypes.oneOf([\n \"AL\",\n \"BS\",\n \"EM\",\n \"FM\",\n \"HW\",\n \"MW\",\n \"SA\",\n \"UW\"\n ]).isRequired,\n ageGroupBias: PropTypes.oneOf([\"+\", \"-\", \"?\"]),\n hasTraditionalMethodBias: PropTypes.bool.isRequired,\n modernMethodBias: PropTypes.oneOf([\"+\", \"-\"])\n })\n};\n\nexport default ChartsSurveyMarker;\n","import React, { Component } from \"react\";\nimport * as PropTypes from \"prop-types\";\nimport { measurePropType, surveyDatumPropType } from \"../../propTypes\";\nimport { indicators } from \"../../constants\";\nimport { getScaledResults } from \"../../data\";\nimport { withStyles } from \"@material-ui/core/styles\";\nimport Tooltip from \"@material-ui/core/Tooltip\";\nimport {\n AreaSeries,\n Crosshair,\n CustomSVGSeries,\n LineSeries,\n MarkSeries,\n WhiskerSeries,\n XAxis,\n XYPlot,\n YAxis\n} from \"react-vis/es\";\nimport \"react-vis/dist/style.css\";\nimport { withTranslation } from \"react-i18next\";\nimport ChartsSurveyMarker from \"./ChartsSurveyMarker\";\n\nconst styles = {\n crosshair: {\n backgroundColor: \"black\",\n whiteSpace: \"nowrap\"\n },\n table: {\n textAlign: \"right\"\n },\n title: {\n marginBottom: 20,\n textAlign: \"center\",\n fontSize: \"smaller\"\n }\n};\n\nclass ChartsConfidenceIntervalChart extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n crosshairValues: []\n };\n }\n\n getErrors = () =>\n this.props.surveys.reduce((result, survey) => {\n let error;\n\n if (\n this.props.indicator === \"contraceptiveUseAny\" &&\n survey.estimatedContraceptiveUseAny\n ) {\n error = {\n lower: survey.lowerContraceptiveUseAny,\n estimate: survey.estimatedContraceptiveUseAny,\n upper: survey.upperContraceptiveUseAny\n };\n } else if (\n this.props.indicator === \"contraceptiveUseModern\" &&\n survey.estimatedContraceptiveUseModern\n ) {\n error = {\n lower: survey.lowerContraceptiveUseModern,\n estimate: survey.estimatedContraceptiveUseModern,\n upper: survey.upperContraceptiveUseModern\n };\n } else if (\n this.props.indicator === \"contraceptiveUseTraditional\" &&\n survey.estimatedContraceptiveUseTraditional\n ) {\n error = {\n lower: survey.lowerContraceptiveUseTraditional,\n estimate: survey.estimatedContraceptiveUseTraditional,\n upper: survey.upperContraceptiveUseTraditional\n };\n } else if (\n this.props.indicator === \"unmetNeedAny\" &&\n survey.estimatedUnmetNeedAny\n ) {\n error = {\n lower: survey.lowerUnmetNeedAny,\n estimate: survey.estimatedUnmetNeedAny,\n upper: survey.upperUnmetNeedAny\n };\n }\n\n if (error) {\n result.push({\n startDate: survey.startDate,\n endDate: survey.endDate,\n isInUnion: survey.isInUnion,\n ...error\n });\n }\n\n return result;\n }, []);\n\n formatCrosshairValue = value =>\n this.props.measure === \"percentage\"\n ? `${(value * 100).toFixed(1)}%`\n : Math.floor(value / 1000).toFixed(0);\n\n onNearestX = (value, { index }) => {\n const datum = this.props.data[index];\n\n this.setState({\n crosshairValues: [\n {\n x: datum.year,\n y: datum.percentile2pt5\n },\n {\n x: datum.year,\n y: datum.percentile10\n },\n {\n x: datum.year,\n y: datum.median\n },\n {\n x: datum.year,\n y: datum.percentile90\n },\n {\n x: datum.year,\n y: datum.percentile97pt5\n }\n ]\n });\n };\n\n onMouseLeave = () => {\n this.setState({ crosshairValues: [] });\n };\n\n render() {\n const demandLabel = indicators.find(\n indicator => indicator.value === \"demand\"\n ).label;\n\n const crosshairValues = this.state.crosshairValues;\n\n const data = getScaledResults(this.props.measure, this.props.data);\n\n const indicatorErrors = this.getErrors();\n\n return (\n
\n \n
\n {this.props.t(\n this.props.indicator === \"demandModern\"\n ? demandLabel\n : this.props.title\n )}\n
\n
\n\n \n v}\n tickSizeInner={0}\n style={{\n line: {\n stroke: \"grey\"\n },\n text: {\n fontSize: 10\n }\n }}\n />\n \n this.props.measure === \"percentage\"\n ? `${(v * 100).toFixed(0)}%`\n : v\n }\n tickSizeInner={0}\n style={{\n line: {\n stroke: \"grey\"\n },\n text: {\n fontSize: 10\n }\n }}\n />\n\n ({\n x: datum.year,\n y: datum.percentile2pt5,\n y0: datum.percentile97pt5\n }))}\n color=\"lavender\"\n opacity={!this.props.comparison ? 1.0 : 0.5}\n />\n\n {this.props.comparison && (\n ({\n x: datum.year,\n y: datum.comparisonPercentile2pt5,\n y0: datum.comparisonPercentile97pt5\n }))}\n color=\"plum\"\n opacity={0.5}\n />\n )}\n\n {!this.props.comparison && (\n ({\n x: datum.year,\n y: datum.percentile10,\n y0: datum.percentile90\n }))}\n color=\"plum\"\n />\n )}\n\n {this.props.comparison && (\n ({\n x: datum.year,\n y: datum.percentile10\n }))}\n style={{\n fill: \"none\"\n }}\n color=\"black\"\n />\n )}\n\n {this.props.comparison && (\n ({\n x: datum.year,\n y: datum.comparisonPercentile10\n }))}\n style={{\n fill: \"none\"\n }}\n strokeStyle=\"dashed\"\n color=\"black\"\n />\n )}\n\n {this.props.comparison && (\n ({\n x: datum.year,\n y: datum.percentile90\n }))}\n style={{\n fill: \"none\"\n }}\n color=\"black\"\n />\n )}\n\n {this.props.comparison && (\n ({\n x: datum.year,\n y: datum.comparisonPercentile90\n }))}\n style={{\n fill: \"none\"\n }}\n strokeStyle=\"dashed\"\n color=\"black\"\n />\n )}\n\n ({\n x: datum.year,\n y: datum.median\n }))}\n style={{\n fill: \"none\"\n }}\n color=\"black\"\n onNearestX={this.onNearestX}\n />\n\n {this.props.comparison && (\n ({\n x: datum.year,\n y: datum.comparisonMedian\n }))}\n style={{\n fill: \"none\"\n }}\n strokeStyle=\"dashed\"\n color=\"black\"\n />\n )}\n\n {this.props.measure === \"percentage\" &&\n ![\n // \"unmetNeedModern\",\n // \"demandModern\",\n // \"demandSatisfiedModern\"\n ].includes(this.props.indicator) && (\n ({\n x: (survey.startDate + survey.endDate) / 2,\n y: survey[this.props.y] || 0,\n customComponent: () => (\n \n )\n }))}\n />\n )}\n\n {this.props.measure === \"percentage\" && (\n ({\n x: datum.startYear + 0.5,\n y: datum.emu,\n size: 3\n }))}\n style={{\n fill: \"black\"\n }}\n color=\"none\"\n />\n )}\n\n {this.props.measure === \"percentage\" && (\n ({\n x: (error.startDate + error.endDate) / 2,\n y: (error.lower + error.upper) / 2,\n yVariance: error.upper - error.lower\n }))}\n style={{\n fill: \"none\"\n }}\n color=\"black\"\n />\n )}\n\n \n {crosshairValues.length && (\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
{this.props.t(\"Year\")}{crosshairValues[0].x}
2.5%{this.formatCrosshairValue(crosshairValues[0].y)}
10.0%{this.formatCrosshairValue(crosshairValues[1].y)}
50.0%{this.formatCrosshairValue(crosshairValues[2].y)}
90.0%{this.formatCrosshairValue(crosshairValues[3].y)}
97.5%{this.formatCrosshairValue(crosshairValues[4].y)}
\n
\n )}\n
\n \n
\n );\n }\n}\n\nChartsConfidenceIntervalChart.propTypes = {\n comparison: PropTypes.bool,\n measure: measurePropType.isRequired,\n indicator: PropTypes.string.isRequired,\n width: PropTypes.number,\n height: PropTypes.number,\n title: PropTypes.string.isRequired,\n description: PropTypes.string,\n xDomain: PropTypes.arrayOf(PropTypes.number),\n data: PropTypes.arrayOf(\n PropTypes.shape({\n year: PropTypes.number.isRequired,\n percentile2pt5: PropTypes.number.isRequired,\n percentile10: PropTypes.number.isRequired,\n median: PropTypes.number.isRequired,\n percentile90: PropTypes.number.isRequired,\n percentile97pt5: PropTypes.number.isRequired,\n comparisonPercentile2pt5: PropTypes.number,\n comparisonPercentile10: PropTypes.number,\n comparisonMedian: PropTypes.number,\n comparisonPercentile90: PropTypes.number,\n comparisonPercentile97pt5: PropTypes.number\n })\n ),\n surveys: PropTypes.arrayOf(surveyDatumPropType),\n y: PropTypes.string.isRequired,\n tickValues: PropTypes.arrayOf(PropTypes.number),\n shadeInnerBand: PropTypes.bool\n};\n\nChartsConfidenceIntervalChart.defaultProps = {\n description: \"\",\n comparison: false,\n width: 300,\n height: 300,\n data: [],\n surveys: [],\n emuData: []\n};\n\nexport default withTranslation()(\n withStyles(styles)(ChartsConfidenceIntervalChart)\n);\n","import React from \"react\";\nimport * as PropTypes from \"prop-types\";\nimport { maritalStatusPropType } from \"../propTypes\";\nimport FormControl from \"@material-ui/core/FormControl\";\nimport Input from \"@material-ui/core/Input\";\nimport InputLabel from \"@material-ui/core/InputLabel\";\nimport NativeSelect from \"@material-ui/core/NativeSelect\";\nimport { withTranslation } from \"react-i18next\";\n\nconst MaritalStatusSelector = ({ t, ...rest }) => (\n
\n \n \n {t(rest.label)}\n \n\n }\n value={rest.value}\n onChange={e => rest.onChange(e.target.value)}\n >\n \n \n \n \n \n
\n);\n\nMaritalStatusSelector.propTypes = {\n label: PropTypes.string,\n value: maritalStatusPropType,\n className: PropTypes.string,\n onChange: PropTypes.func.isRequired\n};\n\nMaritalStatusSelector.defaultProps = {\n label: \"Marital status\"\n};\n\nexport default withTranslation()(MaritalStatusSelector);\n","import React from \"react\";\nimport { withStyles } from \"@material-ui/core\";\nimport classNames from \"classnames\";\nimport Paper from \"@material-ui/core/Paper\";\nimport { withTranslation } from \"react-i18next\";\n\nconst styles = {\n container: {\n display: \"inline-grid\",\n gridTemplateColumns: \"1fr\",\n gridAutoRows: \"max-content\",\n gridRowGap: \"8px\",\n padding: 10\n },\n section: {\n display: \"grid\",\n gridTemplateColumns: \"24px 1fr\",\n gridAutoRows: \"22px\",\n alignItems: \"center\"\n },\n subpopulation: {\n gridAutoRows: \"max-content\"\n }\n};\n\nconst createCircle = (strokeColor, fillColor = \"none\", radius = 6) => (\n \n \n \n);\n\nconst createTriangle = (strokeColor, inverted = false) => (\n \n \n \n \n \n);\n\nconst createSquare = strokeColor => (\n \n \n \n);\n\nconst ChartsSurveyLegend = ({ t, ...rest }) => (\n \n
\n
{createCircle(\"#e41a1c\")}
\n
{t(\"DHS\")}
\n
{createCircle(\"#377eb8\")}
\n
{t(\"MICS\")}
\n
{createCircle(\"#ff7f00\")}
\n
{t(\"National survey\")}
\n
{createCircle(\"#984ea3\")}
\n
{t(\"PMA\")}
\n
{createCircle(\"#4daf4a\")}
\n
{t(\"Other international survey\")}
\n
{createCircle(\"none\", \"black\", 4)}
\n
{t(\"Service statistics\")}
\n
\n \n
{createCircle(\"#f781bf\", \"#f781bf\")}
\n
{t(\"Subpopulation\")}
\n
\n
\n
+
\n
{t(\"Higher contraceptive use\")}
\n
-
\n
{t(\"Lower contraceptive use\")}
\n
A
\n
{t(\"Other age group\")}
\n
F
\n
{t(\"Folk methods included\")}
\n
S+
\n
{t(\"Sterilization included\")}
\n
S-
\n
{t(\"Sterilization excluded\")}
\n
\n
\n
\n
{createCircle(\"#999\")}
\n
{t(\"Married women\")}
\n
{createTriangle(\"#999\")}
\n
{t(\"Sexually active women\")}
\n
{createTriangle(\"#999\", true)}
\n
{t(\"Ever married/All women\")}
\n
{createSquare(\"#999\")}
\n
{t(\"Both sexes and husbands/wives\")}
\n
\n
\n);\n\nexport default withTranslation()(withStyles(styles)(ChartsSurveyLegend));\n","import React from \"react\";\nimport * as PropTypes from \"prop-types\";\nimport {\n emuDatumPropType,\n labeledValuePropType,\n maritalStatusPropType,\n measurePropType,\n periodPropType,\n resultPropType,\n surveyDatumPropType\n} from \"../../propTypes\";\nimport { indicators } from \"../../constants\";\nimport { withStyles } from \"@material-ui/core/styles\";\nimport Checkbox from \"@material-ui/core/Checkbox\";\nimport FormControlLabel from \"@material-ui/core/FormControlLabel\";\nimport FormGroup from \"@material-ui/core/FormGroup\";\nimport ChartList from \"./ChartsChartList\";\nimport ChartsExporter from \"./ChartsExporter\";\nimport ComparisonLegend from \"./ChartsComparisonLegend\";\nimport ConfidenceIntervalChart from \"./ChartsConfidenceIntervalChart\";\nimport MaritalStatusSelector from \"../MaritalStatusSelector\";\nimport MeasureSelector from \"../MeasureSelector\";\nimport SurveyLegend from \"./ChartsSurveyLegend\";\nimport { withTranslation } from \"react-i18next\";\n\nconst styles = {\n charts: {\n margin: \"20px 0\"\n },\n checkbox: {\n padding: \"4px 12px\"\n },\n comparisonLegend: {\n marginTop: 10\n },\n container: {\n marginTop: 20\n },\n gridSelectors: {\n display: \"flex\"\n },\n indicatorPaper: {\n marginBottom: 20\n },\n indicators: {\n marginTop: 20\n },\n measureSelector: {\n marginRight: 30\n },\n noData: {\n margin: \"20px 0\"\n },\n surveyLegend: {\n marginBottom: 20\n }\n};\n\nconst recalculateSurveyMetrics = surveys =>\n surveys.map(survey => ({\n ...survey,\n unmetNeedModern:\n survey.contraceptiveUseTraditional !== null &&\n survey.unmetNeedAny !== null\n ? survey.contraceptiveUseTraditional + survey.unmetNeedAny\n : null,\n demandModern: survey.demand,\n demandSatisfiedModern:\n survey.contraceptiveUseModern !== null &&\n survey.contraceptiveUseAny !== null &&\n survey.unmetNeedAny !== null\n ? survey.contraceptiveUseModern /\n (survey.contraceptiveUseAny + survey.unmetNeedAny)\n : null\n }));\n\nconst Charts = ({ t, ...rest }) => (\n
\n
\n \n \n
\n\n \n {indicators\n .filter(\n indicator =>\n indicator.chart &&\n (rest.selectedMeasure === \"percentage\" ||\n indicator.value !== \"ratioModernAny\")\n )\n .map(indicator => (\n rest.onToggleChart(indicator.value)}\n />\n }\n label={t(indicator.label)}\n />\n ))}\n\n \n }\n label={t(\"Show survey legend\")}\n />\n \n\n {rest.results ? (\n <>\n {rest.comparison && (\n
\n \n
\n )}\n\n \n {indicators\n .filter(indicator =>\n rest.selectedChartsIndicators.includes(indicator.value)\n )\n .map(indicator => {\n const indicatorResults =\n (rest.results && rest.results[indicator.value]) || [];\n\n const surveyData = recalculateSurveyMetrics(\n rest.surveyData\n ).filter(\n ({ startDate }) =>\n startDate >= rest.period.firstYear &&\n startDate <= rest.period.lastYear\n );\n\n return (\n ({\n ...datum,\n year: datum.year + 0.5\n }))}\n surveys={surveyData.filter(\n datum => datum[indicator.value] != null\n )}\n emuData={\n indicator.value === \"contraceptiveUseModern\"\n ? rest.emuData\n : []\n }\n y={indicator.value}\n />\n );\n })}\n \n\n {rest.showSurveyLegend && (\n
\n \n
\n )}\n \n ) : (\n
{t(\"No data to chart\")}
\n )}\n\n \n\n \n
\n);\n\nCharts.propTypes = {\n comparison: PropTypes.bool,\n runName: PropTypes.string,\n comparisonRunName: PropTypes.string,\n period: periodPropType,\n selectedMeasure: measurePropType.isRequired,\n selectedChartsMaritalStatus: PropTypes.string,\n selectedChartsIndicators: PropTypes.arrayOf(PropTypes.string),\n showSurveyLegend: PropTypes.bool,\n results: resultPropType,\n surveyData: PropTypes.arrayOf(surveyDatumPropType),\n emuData: PropTypes.arrayOf(emuDatumPropType),\n chartSets: PropTypes.arrayOf(labeledValuePropType),\n selectedExportedChartSet: PropTypes.string.isRequired,\n selectedExportedMeasure: measurePropType.isRequired,\n selectedExportedMaritalStatus: maritalStatusPropType,\n disableChartSetDownload: PropTypes.bool.isRequired,\n disableSelectedChartsDownload: PropTypes.bool.isRequired,\n onChangeMeasure: PropTypes.func.isRequired,\n onChangeMaritalStatus: PropTypes.func.isRequired,\n onToggleChart: PropTypes.func.isRequired,\n onToggleSurveyLegend: PropTypes.func.isRequired,\n onChangeExportedChartSet: PropTypes.func.isRequired,\n onChangeExportedMeasure: PropTypes.func.isRequired,\n onChangeExportedMaritalStatus: PropTypes.func.isRequired,\n onDownloadChartSet: PropTypes.func.isRequired,\n onDownloadSelectedCharts: PropTypes.func.isRequired\n};\n\nCharts.defaultProps = {\n comparison: false,\n selectedChartsIndicators: [],\n showSurveyLegend: false,\n surveyData: [],\n emuData: []\n};\n\nexport default withTranslation()(withStyles(styles)(Charts));\n","import React from \"react\";\nimport { NavTab } from \"react-router-tabs\";\nimport \"react-router-tabs/styles/react-router-tabs.css\";\nimport { withStyles } from \"@material-ui/core/styles\";\nimport classNames from \"classnames\";\n\nconst styles = {\n active: {\n fontWeight: 600\n },\n container: {\n color: \"#555\"\n }\n};\n\nconst NavigationTab = props => (\n \n);\n\nexport default withStyles(styles)(NavigationTab);\n","import React from \"react\";\nimport * as PropTypes from \"prop-types\";\nimport FormControl from \"@material-ui/core/FormControl\";\nimport Input from \"@material-ui/core/Input\";\nimport InputLabel from \"@material-ui/core/InputLabel\";\nimport NativeSelect from \"@material-ui/core/NativeSelect\";\nimport { withTranslation } from \"react-i18next\";\n\nconst IndicatorSelector = ({ t, ...rest }) => (\n
\n \n \n {t(\"Indicator\")}\n \n\n }\n value={rest.value}\n onChange={e => rest.onChange(e.target.value)}\n >\n {rest.indicators.map(indicator => (\n \n ))}\n \n \n
\n);\n\nIndicatorSelector.propTypes = {\n indicators: PropTypes.arrayOf(\n PropTypes.shape({\n value: PropTypes.string.isRequired,\n label: PropTypes.string.isRequired\n })\n ).isRequired,\n value: PropTypes.string,\n className: PropTypes.string,\n onChange: PropTypes.func.isRequired\n};\n\nexport default withTranslation()(IndicatorSelector);\n","import React from \"react\";\nimport * as PropTypes from \"prop-types\";\nimport { measurePropType } from \"../../propTypes\";\nimport { withStyles } from \"@material-ui/core/styles\";\nimport Button from \"@material-ui/core/Button\";\nimport Checkbox from \"@material-ui/core/Checkbox\";\nimport FormControlLabel from \"@material-ui/core/FormControlLabel\";\nimport FormGroup from \"@material-ui/core/FormGroup\";\nimport Tooltip from \"@material-ui/core/Tooltip\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { withTranslation } from \"react-i18next\";\n\nconst styles = {\n button: {\n marginRight: 20\n },\n buttonGroup: {\n marginTop: 20\n },\n checkbox: {\n padding: \"4px 12px\"\n },\n subtitle: {\n marginTop: 10\n }\n};\n\nconst ResultsExporter = ({ t, ...rest }) => (\n
\n {t(\"Export results\")}\n\n \n {t(\"Measures to export\")}\n \n\n \n {\n rest.onToggleMeasure(\"percentage\");\n }}\n />\n }\n label={t(\"Percentage\")}\n />\n {\n rest.onToggleMeasure(\"count\");\n }}\n />\n }\n label={t(\"Count\")}\n />\n \n\n \n {t(\"Indicators to export\")}\n \n\n \n {rest.indicators.map(indicator => (\n {\n rest.onToggleIndicator(indicator.value);\n }}\n />\n }\n label={t(indicator.label)}\n />\n ))}\n \n\n
\n \n \n \n {t(\"Download selected results\")}\n \n \n \n\n {rest.comparison && (\n \n \n \n {t(\"Download all results\")}\n \n \n \n )}\n\n {!rest.comparison && (\n \n \n \n {t(\"Download all data\")}\n \n \n \n )}\n
\n
\n);\n\nResultsExporter.propTypes = {\n comparision: PropTypes.bool,\n selectedMeasures: PropTypes.arrayOf(measurePropType),\n indicators: PropTypes.arrayOf(\n PropTypes.shape({\n value: PropTypes.string.isRequired,\n label: PropTypes.string.isRequired\n })\n ).isRequired,\n selectedIndicators: PropTypes.arrayOf(PropTypes.string),\n disableSelectedResultsDownload: PropTypes.bool.isRequired,\n disableAllResultsDownload: PropTypes.bool.isRequired,\n disableAllDataDownload: PropTypes.bool.isRequired,\n onToggleMeasure: PropTypes.func.isRequired,\n onToggleIndicator: PropTypes.func.isRequired,\n onDownloadSelectedResults: PropTypes.func.isRequired,\n onDownloadAllResults: PropTypes.func.isRequired,\n onDownloadAllData: PropTypes.func\n};\n\nResultsExporter.defaultProps = {\n comparison: false,\n selectedMeasures: [],\n selectedIndicators: []\n};\n\nexport default withTranslation()(withStyles(styles)(ResultsExporter));\n","import React from \"react\";\nimport * as PropTypes from \"prop-types\";\nimport { indicatorResultPropType, measurePropType } from \"../../propTypes\";\nimport {\n formatLogicalCell,\n formatNumericCell,\n formatPercentageCell\n} from \"../../utilities\";\nimport classNames from \"classnames\";\nimport { AgGridReact } from \"ag-grid-react\";\nimport \"ag-grid-enterprise\";\nimport \"ag-grid-community/dist/styles/ag-grid.css\";\nimport \"ag-grid-community/dist/styles/ag-theme-material.css\";\nimport { withTranslation } from \"react-i18next\";\nimport { translateGridText } from \"../../i18n\";\n\nconst getFormatter = measure =>\n measure === \"percentage\"\n ? value => formatPercentageCell(value, 1)\n : value => formatNumericCell(value / 1000, 0);\n\nconst getColumnDefinitionsForSingleRun = estimateFormatter => [\n {\n headerName: \"In union?\",\n field: \"isInUnion\",\n valueFormatter: params => formatLogicalCell(params.value)\n },\n {\n headerName: \"Year\",\n field: \"year\",\n type: \"numericColumn\",\n filter: \"agNumberColumnFilter\"\n },\n {\n headerName: \"2.5%\",\n field: \"percentile2pt5\",\n type: \"numericColumn\",\n filter: \"agNumberColumnFilter\",\n valueFormatter: params => estimateFormatter(params.value)\n },\n {\n headerName: \"10%\",\n field: \"percentile10\",\n type: \"numericColumn\",\n filter: \"agNumberColumnFilter\",\n valueFormatter: params => estimateFormatter(params.value)\n },\n {\n headerName: \"Median\",\n field: \"median\",\n type: \"numericColumn\",\n filter: \"agNumberColumnFilter\",\n valueFormatter: params => estimateFormatter(params.value)\n },\n {\n headerName: \"90%\",\n field: \"percentile90\",\n type: \"numericColumn\",\n filter: \"agNumberColumnFilter\",\n valueFormatter: params => estimateFormatter(params.value)\n },\n {\n headerName: \"97.5%\",\n field: \"percentile97pt5\",\n type: \"numericColumn\",\n filter: \"agNumberColumnFilter\",\n valueFormatter: params => estimateFormatter(params.value)\n }\n];\n\nconst getColumnDefinitionsRunComparison = estimateFormatter => [\n {\n headerName: \"In union?\",\n field: \"isInUnion\",\n valueFormatter: params => formatLogicalCell(params.value)\n },\n {\n headerName: \"Year\",\n field: \"year\",\n type: \"numericColumn\",\n filter: \"agNumberColumnFilter\"\n },\n {\n headerName: \"Mean #1\",\n field: \"mean\",\n type: \"numericColumn\",\n filter: \"agNumberColumnFilter\",\n valueFormatter: params => estimateFormatter(params.value)\n },\n {\n headerName: \"Mean #2\",\n field: \"comparisonMean\",\n type: \"numericColumn\",\n filter: \"agNumberColumnFilter\",\n valueFormatter: params => estimateFormatter(params.value)\n },\n {\n headerName: \"Median #1\",\n field: \"median\",\n type: \"numericColumn\",\n filter: \"agNumberColumnFilter\",\n valueFormatter: params => estimateFormatter(params.value)\n },\n {\n headerName: \"Median #2\",\n field: \"comparisonMedian\",\n type: \"numericColumn\",\n filter: \"agNumberColumnFilter\",\n valueFormatter: params => estimateFormatter(params.value)\n }\n];\n\nconst ResultsTable = ({ t, ...rest }) => {\n const columnDefinitions = rest.comparison\n ? getColumnDefinitionsRunComparison(getFormatter(rest.measure))\n : getColumnDefinitionsForSingleRun(getFormatter(rest.measure));\n\n return (\n \n ({\n ...datum,\n headerName: t(datum.headerName)\n }))}\n domLayout=\"autoHeight\"\n defaultColDef={{\n sortable: true,\n filter: true\n }}\n pagination={true}\n paginationPageSize={10}\n suppressColumnVirtualisation={true}\n suppressCellSelection={true}\n overlayNoRowsTemplate=\"\"\n localeTextFunc={translateGridText}\n rowData={rest.results.map(datum => ({\n ...datum,\n year: datum.year + 0.5\n }))}\n onGridReady={params => {\n params.columnApi.autoSizeColumns(\n params.columnApi.getAllColumns().map(column => column.colId)\n );\n }}\n />\n
\n );\n};\n\nResultsTable.propTypes = {\n measure: measurePropType.isRequired,\n results: PropTypes.arrayOf(indicatorResultPropType),\n comparison: PropTypes.bool,\n className: PropTypes.string\n};\n\nResultsTable.defaultProps = {\n results: [],\n comparison: false\n};\n\nexport default withTranslation()(ResultsTable);\n","import React from \"react\";\nimport * as PropTypes from \"prop-types\";\nimport { measurePropType, indicatorResultPropType } from \"../../propTypes\";\nimport { indicators } from \"../../constants\";\nimport { withStyles } from \"@material-ui/core/styles\";\nimport IndicatorSelector from \"./ResultsIndicatorSelector\";\nimport MaritalStatusSelector from \"../MaritalStatusSelector\";\nimport MeasureSelector from \"../MeasureSelector\";\nimport ResultsExporter from \"./ResultsExporter\";\nimport ResultsTable from \"./ResultsTable\";\n\nconst styles = {\n container: {\n marginTop: 20\n },\n gridSelectors: {\n display: \"flex\"\n },\n leftSelector: {\n marginRight: 30\n },\n table: {\n marginTop: 10\n }\n};\n\nconst Results = props => (\n
\n
\n \n \n props.selectedMeasure === \"percentage\" ||\n indicator.value !== \"ratioModernAny\"\n )}\n value={props.selectedIndicator}\n className={props.classes.leftSelector}\n onChange={props.onChangeIndicator}\n />\n \n
\n\n \n\n
\n \n
\n
\n);\n\nResults.propTypes = {\n comparison: PropTypes.bool,\n selectedMeasure: measurePropType.isRequired,\n selectedIndicator: PropTypes.string.isRequired,\n selectedMaritalStatus: PropTypes.string.isRequired,\n results: PropTypes.arrayOf(indicatorResultPropType),\n selectedExportedMeasures: PropTypes.arrayOf(measurePropType),\n selectedExportedIndicators: PropTypes.arrayOf(PropTypes.string),\n disableSelectedResultsDownload: PropTypes.bool.isRequired,\n disableAllResultsDownload: PropTypes.bool.isRequired,\n disableAllDataDownload: PropTypes.bool,\n onChangeMeasure: PropTypes.func.isRequired,\n onChangeIndicator: PropTypes.func.isRequired,\n onChangeMaritalStatus: PropTypes.func.isRequired,\n onToggleExportedMeasure: PropTypes.func.isRequired,\n onToggleExportedIndicator: PropTypes.func.isRequired,\n onDownloadSelectedResults: PropTypes.func.isRequired,\n onDownloadAllResults: PropTypes.func.isRequired,\n onDownloadAllData: PropTypes.func\n};\n\nResults.defaultProps = {\n comparison: false,\n results: [],\n selectedExportedMeasures: [],\n selectedExportedIndicators: [],\n disableAllDataDownload: true\n};\n\nexport default withStyles(styles)(Results);\n","import React from \"react\";\nimport * as PropTypes from \"prop-types\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { withTranslation } from \"react-i18next\";\n\nconst Title = ({ title, t }) => (\n \n {title || t(\"Run has not been fully defined\")}\n \n);\n\nTitle.propTypes = {\n title: PropTypes.string\n};\n\nexport default withTranslation()(Title);\n","import React from \"react\";\nimport * as PropTypes from \"prop-types\";\nimport {\n emuDatumPropType,\n indicatorResultPropType,\n labeledValuePropType,\n measurePropType,\n periodPropType,\n resultPropType,\n surveyDatumPropType\n} from \"../../propTypes\";\nimport { Route, Switch, Redirect } from \"react-router-dom\";\nimport { withStyles } from \"@material-ui/core/styles\";\nimport { withTranslation } from \"react-i18next\";\nimport Charts from \"../Charts/Charts\";\nimport NavigationTab from \"../NavigationTab\";\nimport Results from \"../Results/Results\";\nimport Title from \"../Title\";\n\nconst styles = {\n tabPage: {\n margin: 10\n },\n title: {\n marginBottom: 20\n }\n};\n\nconst CompareRunsMainContent = ({ match, t, ...rest }) => (\n
\n
\n \n </div>\n\n <NavigationTab to=\"/compareruns/results\">{t(\"Results\")}</NavigationTab>\n <NavigationTab to=\"/compareruns/charts\">{t(\"Charts\")}</NavigationTab>\n\n <div className={rest.classes.tabPage}>\n <Switch>\n <Route\n exact\n path={match.path}\n render={() => <Redirect replace to={`${match.path}/results`} />}\n />\n <Route\n path={`${match.path}/results`}\n render={() => (\n <Results\n comparison={true}\n selectedMeasure={rest.selectedResultsMeasure}\n selectedIndicator={rest.selectedResultsIndicator}\n selectedMaritalStatus={rest.selectedResultsMaritalStatus}\n results={rest.tableResults}\n selectedExportedMeasures={rest.selectedExportedResultsMeasures}\n selectedExportedIndicators={\n rest.selectedExportedResultsIndicators\n }\n disableSelectedResultsDownload={\n rest.disableSelectedResultsDownload\n }\n disableAllResultsDownload={rest.disableAllResultsDownload}\n onChangeMeasure={rest.onChangeResultsMeasure}\n onChangeIndicator={rest.onChangeResultsIndicator}\n onChangeMaritalStatus={rest.onChangeResultsMaritalStatus}\n onToggleExportedMeasure={rest.onToggleExportedResultsMeasure}\n onToggleExportedIndicator={rest.onToggleExportedResultsIndicator}\n onDownloadSelectedResults={rest.onDownloadSelectedResults}\n onDownloadAllResults={rest.onDownloadAllResults}\n />\n )}\n />\n <Route\n path={`${match.path}/charts`}\n render={() => (\n <Charts\n comparison={true}\n runName={rest.selectedRunName}\n comparisonRunName={rest.selectedComparisonRunName}\n period={rest.period}\n selectedMeasure={rest.selectedChartsMeasure}\n selectedMaritalStatus={rest.selectedChartsMaritalStatus}\n selectedChartsIndicators={rest.selectedChartsIndicators}\n showSurveyLegend={rest.showSurveyLegend}\n results={rest.chartResults}\n surveyData={rest.chartSurveyData}\n emuData={rest.chartEmuData}\n chartSets={rest.chartSets}\n selectedExportedChartSet={rest.selectedExportedChartSet}\n selectedExportedMeasure={rest.selectedExportedChartsMeasure}\n selectedExportedMaritalStatus={\n rest.selectedExportedChartsMaritalStatus\n }\n disableChartSetDownload={rest.disableChartSetDownload}\n disableSelectedChartsDownload={rest.disableSelectedChartsDownload}\n onChangeMeasure={rest.onChangeChartsMeasure}\n onChangeMaritalStatus={rest.onChangeChartsMaritalStatus}\n onToggleChart={rest.onToggleChart}\n onToggleSurveyLegend={rest.onToggleSurveyLegend}\n onChangeExportedChartSet={rest.onChangeExportedChartSet}\n onChangeExportedMeasure={rest.onChangeExportedChartsMeasure}\n onChangeExportedMaritalStatus={\n rest.onChangeExportedChartsMaritalStatus\n }\n onDownloadChartSet={rest.onDownloadChartSet}\n onDownloadSelectedCharts={rest.onDownloadSelectedCharts}\n />\n )}\n />\n </Switch>\n </div>\n </div>\n);\n\nCompareRunsMainContent.propTypes = {\n period: periodPropType,\n runTitle: PropTypes.string,\n selectedRunName: PropTypes.string,\n selectedComparisonRunName: PropTypes.string,\n selectedResultsMeasure: PropTypes.oneOf([\"percentage\", \"count\"]).isRequired,\n selectedResultsIndicator: PropTypes.string.isRequired,\n selectedResultsMaritalStatus: PropTypes.string.isRequired,\n tableResults: PropTypes.arrayOf(indicatorResultPropType),\n selectedExportedResultsMeasures: PropTypes.arrayOf(measurePropType),\n selectedExportedResultsIndicators: PropTypes.arrayOf(PropTypes.string),\n disableSelectedResultsDownload: PropTypes.bool.isRequired,\n disableAllResultsDownload: PropTypes.bool.isRequired,\n selectedChartsIndicators: PropTypes.arrayOf(PropTypes.string),\n showSurveyLegend: PropTypes.bool,\n chartResults: resultPropType,\n chartSurveyData: PropTypes.arrayOf(surveyDatumPropType),\n chartEmuData: PropTypes.arrayOf(emuDatumPropType),\n chartSets: PropTypes.arrayOf(labeledValuePropType),\n selectedExportedChartSet: PropTypes.string,\n selectedExportedChartsMeasure: PropTypes.string,\n selectedExportedChartsMaritalStatus: PropTypes.string,\n disableChartSetDownload: PropTypes.bool.isRequired,\n disableSelectedChartsDownload: PropTypes.bool.isRequired,\n onChangeResultsMeasure: PropTypes.func.isRequired,\n onChangeResultsIndicator: PropTypes.func.isRequired,\n onChangeResultsMaritalStatus: PropTypes.func.isRequired,\n onToggleExportedResultsMeasure: PropTypes.func.isRequired,\n onToggleExportedResultsIndicator: PropTypes.func.isRequired,\n onDownloadSelectedResults: PropTypes.func.isRequired,\n onDownloadAllResults: PropTypes.func.isRequired,\n onChangeChartsMeasure: PropTypes.func.isRequired,\n onChangeChartsMaritalStatus: PropTypes.func.isRequired,\n onToggleChart: PropTypes.func.isRequired,\n onToggleSurveyLegend: PropTypes.func.isRequired,\n onChangeExportedChartSet: PropTypes.func.isRequired,\n onChangeExportedChartsMeasure: PropTypes.func.isRequired,\n onChangeExportedChartsMaritalStatus: PropTypes.func.isRequired,\n onDownloadChartSet: PropTypes.func.isRequired,\n onDownloadSelectedCharts: PropTypes.func.isRequired\n};\n\nCompareRunsMainContent.defaultProps = {\n tableResults: [],\n selectedChartsIndicators: [],\n showSurveyLegend: false,\n chartSurveyData: [],\n chartEmuData: [],\n chartSets: [],\n selectedExportedResultsMeasures: [],\n selectedExportedResultsIndicators: []\n};\n\nexport default withTranslation()(withStyles(styles)(CompareRunsMainContent));\n","import contentWithDrawer from \"../contentWithDrawer\";\nimport DrawerContent from \"./CompareRunsDrawerContent\";\nimport MainContent from \"./CompareRunsMainContent\";\n\nconst CompareRuns = contentWithDrawer(MainContent, DrawerContent);\n\nexport default CompareRuns;\n","import React, { Component } from \"react\";\nimport { defaultFirstYear, indicators } from \"../constants\";\nimport {\n createSlug,\n getDefaultLastYear,\n toggleSetExistence\n} from \"../utilities\";\nimport {\n convertMaritalStatusToIsInUnion,\n filterResults,\n getPeriod,\n normalizeChartSets,\n normalizeDatabases,\n normalizeEmuData,\n normalizeResults,\n normalizeRuns,\n normalizeSurveyData\n} from \"../data\";\nimport * as api from \"../api/api\";\nimport fileDownload from \"js-file-download\";\nimport { withErrorBoundary } from \"../errors\";\nimport CompareRuns from \"../components/CompareRuns/CompareRuns\";\n\nconst createInitialState = () => {\n return {\n period: {\n firstYear: defaultFirstYear,\n lastYear: getDefaultLastYear()\n },\n selectedResultsMeasure: \"percentage\",\n selectedResultsIndicator: indicators[0].value,\n selectedResultsMaritalStatus: \"married\",\n selectedExportedResultsMeasures: new Set(),\n selectedExportedResultsIndicators: new Set(),\n selectedChartsMeasure: \"percentage\",\n selectedChartsMaritalStatus: \"married\",\n selectedChartsIndicators: new Set(\n indicators\n .filter(indicator => indicator.chart)\n .map(indicator => indicator.value)\n ),\n showSurveyLegend: true,\n chartSets: [\n {\n value: \"complete\",\n label: \"Complete\"\n }\n ],\n selectedExportedChartSet: \"complete\",\n selectedExportedChartsMeasure: \"percentage\",\n selectedExportedChartsMaritalStatus: \"married\"\n };\n};\n\nclass CompareRunsContainer extends Component {\n constructor(props) {\n super(props);\n\n this.signal = api.getSignal();\n\n this.state = createInitialState();\n }\n\n setStateSafely = (state, callback) => {\n if (!this.unmounting) {\n this.setState(state, callback);\n }\n };\n\n getCountries = (runId, comparisonRunId) => {\n if (!runId || !comparisonRunId) {\n return {};\n }\n\n const run = this.state.runs[runId];\n const comparisonRun = this.state.runs[comparisonRunId];\n\n const countryNumericCodes = run.countryNumericCodes.filter(\n countryNumericCode =>\n comparisonRun.countryNumericCodes.includes(countryNumericCode)\n );\n\n const divisions = this.state.databases[run.surveyDatabaseId].divisions;\n\n return countryNumericCodes.reduce((result, countryNumericCode) => {\n if (\n divisions[countryNumericCode] &&\n divisions[countryNumericCode].isCountry\n ) {\n result[countryNumericCode] = {\n numericCode: countryNumericCode,\n ...divisions[countryNumericCode]\n };\n }\n\n return result;\n }, {});\n };\n\n getRegions = (runId, comparisonRunId) => {\n if (!runId || !comparisonRunId) {\n return [];\n }\n\n const runRegions = this.state.runs[runId].regionCodes || [];\n const comparisonRunRegions =\n this.state.runs[comparisonRunId].regionCodes || [];\n\n return runRegions.filter(region => comparisonRunRegions.includes(region));\n };\n\n selectDefaultCountryOrRegion = (runId, comparisonRunId) => {\n const countryNumericCodes = Object.keys(\n this.getCountries(runId, comparisonRunId)\n );\n const regions = this.getRegions(runId, comparisonRunId);\n\n if (countryNumericCodes.length + regions.length === 1) {\n if (countryNumericCodes.length) {\n this.setStateSafely({\n selectedCountryNumericCode: parseInt(countryNumericCodes[0], 10)\n });\n } else {\n this.setStateSafely({\n selectedRegion: regions[0]\n });\n }\n }\n };\n\n getSelectedCountryNumericCodeOrRegion = () =>\n this.state.selectedRegion || this.state.selectedCountryNumericCode;\n\n createRunTitle = () => {\n let countryAlphaCodeOrRegion;\n\n if (this.state.selectedRegion) {\n countryAlphaCodeOrRegion = this.state.selectedRegion;\n } else if (this.state.selectedCountryNumericCode) {\n const selectedRun = this.state.runs[this.state.selectedRunId];\n\n countryAlphaCodeOrRegion = this.state.databases[\n selectedRun.surveyDatabaseId\n ].divisions[this.state.selectedCountryNumericCode].alphaCode;\n }\n\n if (countryAlphaCodeOrRegion) {\n const selectedRun = this.state.runs[this.state.selectedRunId];\n const selectedComparisonRun = this.state.runs[\n this.state.selectedComparisonRunId\n ];\n\n const { firstYear, lastYear } = this.state.period;\n\n return `Run ${selectedRun.name} vs ${\n selectedComparisonRun.name\n } for ${countryAlphaCodeOrRegion} during ${firstYear}-${lastYear}`;\n }\n };\n\n updateRun = (runId, runIdProperty, comparisonRunId) => {\n this.setStateSafely({\n [runIdProperty]: runId\n });\n\n this.selectDefaultCountryOrRegion(runId, comparisonRunId);\n };\n\n getMeasureResultsForPeriod = measure => {\n if (!this.state.results) {\n return;\n }\n\n const measureKey = measure === \"percentage\" ? \"proportions\" : \"populations\";\n\n return filterResults(\n this.state.results[measureKey],\n this.state.period.firstYear,\n this.state.period.lastYear\n );\n };\n\n getTableResults = () => {\n let measureResultsForPeriod = this.getMeasureResultsForPeriod(\n this.state.selectedResultsMeasure\n );\n\n const isInUnion = convertMaritalStatusToIsInUnion(\n this.state.selectedResultsMaritalStatus\n );\n\n return (\n measureResultsForPeriod &&\n measureResultsForPeriod[this.state.selectedResultsIndicator].filter(\n datum => datum.isInUnion === isInUnion\n )\n );\n };\n\n getChartSurveyData = () => {\n if (!this.state.surveyData) {\n return;\n }\n\n const { firstYear, lastYear } = this.state.period;\n\n const isInUnion = convertMaritalStatusToIsInUnion(\n this.state.selectedChartsMaritalStatus\n );\n\n return this.state.surveyData.filter(\n datum =>\n datum.startDate >= firstYear &&\n datum.startDate <= lastYear &&\n datum.isInUnion === isInUnion\n );\n };\n\n getChartResults = () => {\n const measureResultsForPeriod = this.getMeasureResultsForPeriod(\n this.state.selectedChartsMeasure\n );\n\n if (!measureResultsForPeriod) {\n return;\n }\n\n const isInUnion = convertMaritalStatusToIsInUnion(\n this.state.selectedChartsMaritalStatus\n );\n\n const results = Object.keys(measureResultsForPeriod).reduce(\n (result, indicator) => {\n if (this.state.selectedChartsIndicators.has(indicator)) {\n result[indicator] = measureResultsForPeriod[indicator].filter(\n datum => datum.isInUnion === isInUnion\n );\n }\n\n return result;\n },\n {}\n );\n\n if (\n !Object.keys(results).length ||\n !results[Object.keys(results)[0]].length\n ) {\n return;\n }\n\n return results;\n };\n\n onSelectRun = runId => {\n this.updateRun(runId, \"selectedRunId\", this.state.selectedComparisonRunId);\n };\n\n onSelectComparisonRun = runId => {\n this.updateRun(runId, \"selectedComparisonRunId\", this.state.selectedRunId);\n };\n\n onSelectCountry = countryNumericCode => {\n this.setStateSafely({\n selectedCountryNumericCode: countryNumericCode,\n selectedRegion: undefined\n });\n };\n\n onSelectRegion = region => {\n this.setStateSafely({\n selectedRegion: region\n });\n };\n\n onChangePeriod = period => {\n this.setStateSafely({\n period\n });\n };\n\n onCompareRuns = () => {\n const run = this.state.runs[this.state.selectedRunId];\n const comparisonRun = this.state.runs[this.state.selectedComparisonRunId];\n\n const countryNumericCodeOrRegion = this.getSelectedCountryNumericCodeOrRegion();\n\n this.setStateSafely({\n loadingRuns: true\n });\n\n // noinspection JSCheckFunctionSignatures\n Promise.all([\n api.fetchSurveyDatabase(\n run.surveyDatabaseId,\n countryNumericCodeOrRegion,\n this.state.selectedRunId,\n this.signal.token\n ),\n api.fetchSurveyDatabase(\n comparisonRun.surveyDatabaseId,\n countryNumericCodeOrRegion,\n this.state.selectedComparisonRunId,\n this.signal.token\n ),\n run.emuDatabaseId\n ? api.fetchEmuDatabase(\n run.emuDatabaseId,\n countryNumericCodeOrRegion,\n this.signal.token\n )\n : new Promise(resolve =>\n resolve({\n data: []\n })\n ),\n comparisonRun.emuDatabaseId\n ? api.fetchEmuDatabase(\n comparisonRun.emuDatabaseId,\n countryNumericCodeOrRegion,\n this.signal.token\n )\n : new Promise(resolve =>\n resolve({\n data: []\n })\n ),\n api.fetchResults(\n this.state.selectedRunId,\n this.state.selectedComparisonRunId,\n this.getSelectedCountryNumericCodeOrRegion(),\n this.signal.token\n )\n ])\n .then(response => {\n if (!response || response.some(item => !item)) {\n return;\n }\n\n const [\n runSurveyData,\n comparisonRunSurveyData,\n runEmuData,\n comparisonRunEmuData,\n results\n ] = response;\n\n const period = getPeriod(results.data.proportions);\n\n this.setStateSafely({\n period,\n surveyData: normalizeSurveyData([\n ...runSurveyData.data,\n ...comparisonRunSurveyData.data\n ]),\n emuData: normalizeEmuData([\n ...runEmuData.data,\n ...comparisonRunEmuData.data\n ]),\n results: {\n proportions: normalizeResults(results.data.proportions),\n populations: normalizeResults(results.data.populations)\n }\n });\n })\n .finally(() => {\n this.setStateSafely({\n loadingRuns: false\n });\n });\n };\n\n onChangeResultsMeasure = measure => {\n this.setStateSafely({\n selectedResultsMeasure: measure,\n selectedResultsIndicator:\n measure === \"percentage\" ||\n this.state.selectedResultsIndicator !== \"ratioModernAny\"\n ? this.state.selectedResultsIndicator\n : indicators[0].value\n });\n };\n\n onChangeResultsIndicator = indicator => {\n this.setStateSafely({\n selectedResultsIndicator: indicator\n });\n };\n\n onChangeResultsMaritalStatus = martialStatus => {\n this.setStateSafely({\n selectedResultsMaritalStatus: martialStatus\n });\n };\n\n onToggleExportedResultsMeasure = measure => {\n const selectedExportedResultsMeasures = new Set(\n this.state.selectedExportedResultsMeasures\n );\n\n toggleSetExistence(selectedExportedResultsMeasures, measure);\n\n this.setStateSafely({\n selectedExportedResultsMeasures\n });\n };\n\n onToggleExportedResultsIndicator = indicator => {\n const selectedExportedResultsIndicators = new Set(\n this.state.selectedExportedResultsIndicators\n );\n\n toggleSetExistence(selectedExportedResultsIndicators, indicator);\n\n this.setStateSafely({\n selectedExportedResultsIndicators\n });\n };\n\n onDownloadSelectedResults = () => {\n api\n .downloadResults(\n this.state.selectedRunId,\n this.state.selectedComparisonRunId,\n this.getSelectedCountryNumericCodeOrRegion(),\n Array.from(this.state.selectedExportedResultsMeasures),\n Array.from(this.state.selectedExportedResultsIndicators),\n this.signal.token\n )\n .then(response => {\n if (!response) {\n return;\n }\n\n const run = this.state.runs[this.state.selectedRunId];\n\n const comparisonRun = this.state.runs[\n this.state.selectedComparisonRunId\n ];\n\n if (run && comparisonRun) {\n const prefix = `${run.name}_vs_${comparisonRun.name}`;\n\n fileDownload(response.data, createSlug(prefix, \"results.csv\"));\n }\n });\n };\n\n onDownloadAllResults = () => {\n api\n .downloadResults(\n this.state.selectedRunId,\n this.state.selectedComparisonRunId,\n this.getSelectedCountryNumericCodeOrRegion(),\n [\"percentage\", \"count\"],\n indicators.map(indicator => indicator.value),\n this.signal.token\n )\n .then(response => {\n if (!response) {\n return;\n }\n\n const run = this.state.runs[this.state.selectedRunId];\n const comparisonRun = this.state.runs[\n this.state.selectedComparisonRunId\n ];\n\n if (run && comparisonRun) {\n const prefix = `${run.name}_vs_${comparisonRun.name}`;\n\n fileDownload(response.data, createSlug(prefix, \"all_results.csv\"));\n }\n });\n };\n\n onChangeChartsMeasure = measure => {\n this.setStateSafely({\n selectedChartsMeasure: measure\n });\n };\n\n onChangeChartsMaritalStatus = martialStatus => {\n this.setStateSafely({\n selectedChartsMaritalStatus: martialStatus\n });\n };\n\n onToggleChart = chart => {\n const selectedChartsIndicators = new Set(\n this.state.selectedChartsIndicators\n );\n\n toggleSetExistence(selectedChartsIndicators, chart);\n\n this.setStateSafely({\n selectedChartsIndicators\n });\n };\n\n onToggleSurveyLegend = () => {\n this.setStateSafely({\n showSurveyLegend: !this.state.showSurveyLegend\n });\n };\n\n onChangeExportedChartSet = chartSet => {\n this.setStateSafely({\n selectedExportedChartSet: chartSet\n });\n };\n\n onChangeExportedChartsMeasure = measure => {\n this.setStateSafely({\n selectedExportedChartsMeasure: measure\n });\n };\n\n onChangeExportedChartsMaritalStatus = maritalStatus => {\n this.setStateSafely({\n selectedExportedChartsMaritalStatus: maritalStatus\n });\n };\n\n onDownloadChartSet = () => {\n api\n .downloadChartSet(\n this.state.selectedRunId,\n this.state.selectedComparisonRunId,\n this.getSelectedCountryNumericCodeOrRegion(),\n this.state.selectedExportedChartSet,\n this.state.selectedExportedChartsMaritalStatus,\n this.state.selectedExportedChartsMeasure,\n this.signal.token\n )\n .then(response => {\n if (!response) {\n return;\n }\n\n const run = this.state.runs[this.state.selectedRunId];\n\n const comparisonRun = this.state.runs[\n this.state.selectedComparisonRunId\n ];\n\n if (run && comparisonRun) {\n const prefix = `${run.name}_vs_${comparisonRun.name}_${\n this.state.selectedExportedChartSet\n }`;\n\n fileDownload(response.data, createSlug(prefix, \"charts.pdf\"));\n }\n });\n };\n\n onDownloadSelectedCharts = () => {\n api\n .downloadCharts(\n this.state.selectedRunId,\n this.state.selectedComparisonRunId,\n this.getSelectedCountryNumericCodeOrRegion(),\n this.state.selectedExportedChartsMaritalStatus,\n this.state.selectedExportedChartsMeasure,\n Array.from(this.state.selectedChartsIndicators),\n this.signal.token\n )\n .then(response => {\n if (!response) {\n return;\n }\n\n const run = this.state.runs[this.state.selectedRunId];\n\n const comparisonRun = this.state.runs[\n this.state.selectedComparisonRunId\n ];\n\n if (run && comparisonRun) {\n const prefix = `${run.name}_vs_${comparisonRun.name}`;\n\n fileDownload(response.data, createSlug(prefix, \"charts.pdf\"));\n }\n });\n };\n\n componentDidMount() {\n this.setStateSafely({\n loadingData: true\n });\n\n // noinspection JSCheckFunctionSignatures\n Promise.all([\n api.fetchDatabases(this.signal.token),\n api.fetchRuns(false, false, this.signal.token),\n api.fetchChartSets(this.signal.token)\n ])\n .then(response => {\n if (!response || response.some(item => !item)) {\n return;\n }\n\n const [databases, runs, chartSets] = response;\n\n this.setStateSafely({\n databases: normalizeDatabases(databases.data),\n runs: normalizeRuns(runs.data),\n chartSets: normalizeChartSets(chartSets.data)\n });\n })\n .finally(() => {\n this.setStateSafely({\n loadingData: false\n });\n });\n }\n\n componentWillUnmount() {\n this.unmounting = true;\n this.signal.cancel();\n }\n\n render() {\n return (\n <CompareRuns\n match={this.props.match}\n loadingData={this.state.loadingData}\n runs={this.state.runs}\n selectedRunId={this.state.selectedRunId}\n selectedRunName={\n this.state.runs &&\n this.state.selectedRunId &&\n this.state.runs[this.state.selectedRunId].name\n }\n selectedComparisonRunId={this.state.selectedComparisonRunId}\n selectedComparisonRunName={\n this.state.runs &&\n this.state.selectedComparisonRunId &&\n this.state.runs[this.state.selectedComparisonRunId].name\n }\n countries={this.getCountries(\n this.state.selectedRunId,\n this.state.selectedComparisonRunId\n )}\n selectedCountryNumericCode={this.state.selectedCountryNumericCode}\n regions={this.getRegions(\n this.state.selectedRunId,\n this.state.selectedComparisonRunId\n )}\n selectedRegion={this.state.selectedRegion}\n period={this.state.period}\n loadingRuns={this.state.loadingRuns}\n runsTitle={this.createRunTitle()}\n selectedResultsMeasure={this.state.selectedResultsMeasure}\n selectedResultsIndicator={this.state.selectedResultsIndicator}\n selectedResultsMaritalStatus={this.state.selectedResultsMaritalStatus}\n tableResults={this.getTableResults()}\n selectedExportedResultsMeasures={Array.from(\n this.state.selectedExportedResultsMeasures\n )}\n selectedExportedResultsIndicators={Array.from(\n this.state.selectedExportedResultsIndicators\n )}\n disableSelectedResultsDownload={\n !api.createResultsDownloadUrl(\n this.state.selectedRunId,\n this.state.selectedComparisonRunId,\n this.getSelectedCountryNumericCodeOrRegion(),\n Array.from(this.state.selectedExportedResultsMeasures),\n Array.from(this.state.selectedExportedResultsIndicators)\n )\n }\n disableAllResultsDownload={\n !api.createResultsDownloadUrl(\n this.state.selectedRunId,\n this.state.selectedComparisonRunId,\n this.getSelectedCountryNumericCodeOrRegion(),\n [\"percentage\", \"count\"],\n indicators.map(indicator => indicator.value)\n )\n }\n selectedChartsMeasure={this.state.selectedChartsMeasure}\n selectedChartsMaritalStatus={this.state.selectedChartsMaritalStatus}\n selectedChartsIndicators={Array.from(\n this.state.selectedChartsIndicators\n )}\n showSurveyLegend={this.state.showSurveyLegend}\n chartResults={this.getChartResults()}\n chartSurveyData={this.getChartSurveyData()}\n chartEmuData={\n this.state.selectedChartsMaritalStatus === \"married\"\n ? this.state.emuData\n : undefined\n }\n chartSets={this.state.chartSets}\n selectedExportedChartSet={this.state.selectedExportedChartSet}\n selectedExportedChartsMeasure={this.state.selectedExportedChartsMeasure}\n selectedExportedChartsMaritalStatus={\n this.state.selectedExportedChartsMaritalStatus\n }\n disableChartSetDownload={\n !api.createChartSetDownloadUrl(\n this.state.selectedRunId,\n undefined,\n this.getSelectedCountryNumericCodeOrRegion(),\n this.state.selectedExportedChartSet,\n this.state.selectedExportedChartsMaritalStatus,\n this.state.selectedExportedChartsMeasure\n )\n }\n disableSelectedChartsDownload={\n !api.createChartsDownloadUrl(\n this.state.selectedRunId,\n undefined,\n this.getSelectedCountryNumericCodeOrRegion(),\n this.state.selectedExportedChartsMaritalStatus,\n this.state.selectedExportedChartsMeasure,\n Array.from(this.state.selectedChartsIndicators)\n )\n }\n onSelectRun={this.onSelectRun}\n onSelectComparisonRun={this.onSelectComparisonRun}\n onSelectCountry={this.onSelectCountry}\n onSelectRegion={this.onSelectRegion}\n onChangePeriod={this.onChangePeriod}\n onCompareRuns={this.onCompareRuns}\n onChangeResultsMeasure={this.onChangeResultsMeasure}\n onChangeResultsIndicator={this.onChangeResultsIndicator}\n onChangeResultsMaritalStatus={this.onChangeResultsMaritalStatus}\n onToggleExportedResultsMeasure={this.onToggleExportedResultsMeasure}\n onToggleExportedResultsIndicator={this.onToggleExportedResultsIndicator}\n onDownloadSelectedResults={this.onDownloadSelectedResults}\n onDownloadAllResults={this.onDownloadAllResults}\n onChangeChartsMeasure={this.onChangeChartsMeasure}\n onChangeChartsMaritalStatus={this.onChangeChartsMaritalStatus}\n onToggleChart={this.onToggleChart}\n onToggleSurveyLegend={this.onToggleSurveyLegend}\n onChangeExportedChartSet={this.onChangeExportedChartSet}\n onChangeExportedChartsMeasure={this.onChangeExportedChartsMeasure}\n onChangeExportedChartsMaritalStatus={\n this.onChangeExportedChartsMaritalStatus\n }\n onDownloadChartSet={this.onDownloadChartSet}\n onDownloadSelectedCharts={this.onDownloadSelectedCharts}\n />\n );\n }\n}\n\nexport default withErrorBoundary(CompareRunsContainer);\n","import React from \"react\";\nimport SvgIcon from \"@material-ui/core/SvgIcon\";\n\nconst EnIcon = props => (\n <SvgIcon viewBox=\"0 0 399.99942 210.52602\" {...props}>\n <g transform=\"scale(.053981)\">\n <rect width=\"7410\" height=\"3900\" fill=\"#b22234\" />\n <path\n d=\"m0 450h7410m0 600h-7410m0 600h7410m0 600h-7410m0 600h7410m0 600h-7410\"\n stroke=\"#fff\"\n strokeWidth=\"300\"\n />\n <rect width=\"2964\" height=\"2100\" fill=\"#3c3b6e\" />\n <g fill=\"#fff\">\n <g id=\"s18\">\n <g id=\"s9\">\n <g id=\"s5\">\n <g id=\"s4\">\n <path\n id=\"s\"\n d=\"m247 90 70.534 217.08-184.66-134.16h228.25l-184.66 134.16z\"\n />\n <use y=\"420\" width=\"100%\" height=\"100%\" href=\"#s\" />\n <use y=\"840\" width=\"100%\" height=\"100%\" href=\"#s\" />\n <use y=\"1260\" width=\"100%\" height=\"100%\" href=\"#s\" />\n </g>\n <use y=\"1680\" width=\"100%\" height=\"100%\" href=\"#s\" />\n </g>\n <use x=\"247\" y=\"210\" width=\"100%\" height=\"100%\" href=\"#s4\" />\n </g>\n <use x=\"494\" width=\"100%\" height=\"100%\" href=\"#s9\" />\n </g>\n <use x=\"988\" width=\"100%\" height=\"100%\" href=\"#s18\" />\n <use x=\"1976\" width=\"100%\" height=\"100%\" href=\"#s9\" />\n <use x=\"2470\" width=\"100%\" height=\"100%\" href=\"#s5\" />\n </g>\n </g>\n </SvgIcon>\n);\n\nexport default EnIcon;\n","import React from \"react\";\nimport SvgIcon from \"@material-ui/core/SvgIcon\";\n\nconst FrIcon = props => (\n <SvgIcon viewBox=\"0 0 400 210.52632\" {...props}>\n <g transform=\"scale(133.33 105.26)\">\n <rect width=\"3\" height=\"2\" fill=\"#ed2939\" />\n <rect width=\"2\" height=\"2\" fill=\"#fff\" />\n <rect width=\"1\" height=\"2\" fill=\"#002395\" />\n </g>\n </SvgIcon>\n);\n\nexport default FrIcon;\n","import React from \"react\";\nimport * as PropTypes from \"prop-types\";\nimport { withStyles } from \"@material-ui/core\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport EnIcon from \"./EnIcon\";\nimport FrIcon from \"./FrIcon\";\n\nconst styles = theme => ({\n button: {\n padding: 4\n },\n container: {\n whiteSpace: \"nowrap\"\n },\n icon: {\n width: 30\n }\n});\n\nconst LanguageChooser = props => (\n <div className={props.classes.container}>\n <IconButton\n classes={{\n root: props.classes.button\n }}\n onClick={() => {\n props.onChangeLanguage(\"en\");\n }}\n >\n <EnIcon className={props.classes.icon} />\n </IconButton>\n <IconButton\n classes={{\n root: props.classes.button\n }}\n onClick={() => {\n props.onChangeLanguage(\"fr\");\n }}\n >\n <FrIcon className={props.classes.icon} />\n </IconButton>\n </div>\n);\n\nLanguageChooser.propTypes = {\n onChangeLanguage: PropTypes.func.isRequired\n};\n\nexport default withStyles(styles)(LanguageChooser);\n","import React from \"react\";\nimport * as PropTypes from \"prop-types\";\nimport { managedLabeledValuePropType } from \"../../propTypes\";\nimport { withStyles } from \"@material-ui/core/styles\";\nimport Checkbox from \"@material-ui/core/Checkbox\";\nimport List from \"@material-ui/core/List\";\nimport ListItem from \"@material-ui/core/ListItem\";\nimport ListItemText from \"@material-ui/core/ListItemText\";\n\nconst styles = {\n checkBox: {\n padding: 0\n },\n item: {\n padding: \"4px 0\"\n }\n};\n\nconst ManageDataItems = props => (\n <List>\n {props.items.map(item => (\n <ListItem key={item.value} dense={true} className={props.classes.item}>\n <Checkbox\n checked={props.selectedItemValues.includes(item.value)}\n className={props.classes.checkBox}\n onChange={() => {\n props.onToggleItem(item.value);\n }}\n />\n <ListItemText\n primary={\n <>\n <span>{item.label}</span>\n\n {item.isGlobal && <sup>*</sup>}\n {item.isInUse && <sup>†</sup>}\n\n {item.createdAt && (\n <span>{` (${item.createdAt.toLocaleDateString()})`}</span>\n )}\n </>\n }\n />\n </ListItem>\n ))}\n </List>\n);\n\nManageDataItems.propTypes = {\n items: PropTypes.arrayOf(managedLabeledValuePropType).isRequired,\n selectedItemValues: PropTypes.arrayOf(PropTypes.string).isRequired,\n onToggleItem: PropTypes.func.isRequired\n};\n\nexport default withStyles(styles)(ManageDataItems);\n","import React from \"react\";\nimport * as PropTypes from \"prop-types\";\nimport { managedLabeledValuePropType } from \"../../propTypes\";\nimport { withStyles } from \"@material-ui/core/styles\";\nimport Button from \"@material-ui/core/Button\";\nimport { withTranslation } from \"react-i18next\";\nimport ManageDataItems from \"./ManageDataItems\";\n\nconst styles = {\n button: {\n marginRight: 20\n },\n buttonGroup: {\n marginTop: 20\n },\n footnotes: {\n margin: \"1em 0\"\n }\n};\n\nconst ManageDataDatabases = ({ t, ...rest }) => (\n <div>\n <ManageDataItems\n items={rest.databases}\n selectedItemValues={rest.selectedDatabaseIds}\n onToggleItem={rest.onToggleDatabase}\n />\n\n <div className={rest.classes.buttonGroup}>\n <Button\n variant=\"contained\"\n color=\"primary\"\n disabled={!rest.selectedDatabaseIds.length}\n className={rest.classes.button}\n onClick={rest.onDownloadDatabases}\n >\n {t(\"Download selected databases\")}\n </Button>\n\n <Button\n variant=\"contained\"\n color=\"secondary\"\n disabled={\n !rest.selectedDatabaseIds.length ||\n rest.databases.filter(\n database =>\n rest.selectedDatabaseIds.includes(database.value) &&\n (database.isInUse || database.isGlobal)\n ).length > 0\n }\n className={rest.classes.button}\n onClick={rest.onDeleteDatabases}\n >\n {t(\"Delete selected databases\")}\n </Button>\n </div>\n\n <div className={rest.classes.footnotes}>\n <div>\n <sup>*</sup>\n {t(\"Global databases cannot be deleted.\")}\n </div>\n <div>\n <sup>†</sup>\n {t(\"Databases referenced by active runs cannot be deleted.\")}\n </div>\n </div>\n </div>\n);\n\nManageDataDatabases.propTypes = {\n databases: PropTypes.arrayOf(managedLabeledValuePropType).isRequired,\n selectedDatabaseIds: PropTypes.arrayOf(PropTypes.string).isRequired,\n onToggleDatabase: PropTypes.func.isRequired,\n onDownloadDatabases: PropTypes.func.isRequired,\n onDeleteDatabases: PropTypes.func.isRequired\n};\n\nManageDataDatabases.defaultProps = {\n databases: []\n};\n\nexport default withTranslation()(withStyles(styles)(ManageDataDatabases));\n","import React from \"react\";\nimport * as PropTypes from \"prop-types\";\nimport { withStyles } from \"@material-ui/core\";\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\n\nconst styles = theme => ({\n loading: {\n display: \"flex\",\n alignItems: \"center\"\n },\n message: {\n marginLeft: theme.spacing.unit * 2\n }\n});\n\nconst Loading = props => (\n <div>\n {!props.loading ? (\n props.children\n ) : (\n <div className={props.classes.loading}>\n <CircularProgress size={20} />\n <div className={props.classes.message}>{props.message}</div>\n </div>\n )}\n </div>\n);\n\nLoading.propTypes = {\n loading: PropTypes.bool,\n message: PropTypes.string\n};\n\nLoading.defaultProps = {\n loading: false,\n message: \"Loading data...\"\n};\n\nexport default withStyles(styles)(Loading);\n","import React from \"react\";\nimport * as PropTypes from \"prop-types\";\nimport { managedLabeledValuePropType } from \"../../propTypes\";\nimport { withStyles } from \"@material-ui/core/styles\";\nimport Button from \"@material-ui/core/Button\";\nimport { withTranslation } from \"react-i18next\";\nimport ManageDataItems from \"./ManageDataItems\";\n\nconst styles = {\n button: {\n marginRight: 20\n },\n buttonGroup: {\n marginTop: 20\n }\n};\n\nconst ManageDataRuns = ({ t, ...rest }) => (\n <div>\n <ManageDataItems\n items={rest.runs}\n selectedItemValues={rest.selectedRunIds}\n onToggleItem={rest.onToggleRun}\n />\n\n <div className={rest.classes.buttonGroup}>\n <Button\n variant=\"contained\"\n color=\"secondary\"\n disabled={\n !rest.selectedRunIds.length ||\n rest.runs.filter(\n run => rest.selectedRunIds.includes(run.value) && run.isGlobal\n ).length\n }\n className={rest.classes.button}\n onClick={rest.onDeleteRuns}\n >\n {t(\"Delete selected runs\")}\n </Button>\n </div>\n\n <p>\n <sup>*</sup>{t(\"Global runs cannot be deleted.\")}\n </p>\n </div>\n);\n\nManageDataRuns.propTypes = {\n runs: PropTypes.arrayOf(managedLabeledValuePropType),\n selectedRunIds: PropTypes.arrayOf(PropTypes.string).isRequired,\n onToggleRun: PropTypes.func.isRequired,\n onDeleteRuns: PropTypes.func.isRequired\n};\n\nManageDataRuns.defaultProps = {\n runs: []\n};\n\nexport default withTranslation()(withStyles(styles)(ManageDataRuns));\n","import React from \"react\";\nimport * as PropTypes from \"prop-types\";\nimport { managedLabeledValuePropType } from \"../../propTypes\";\nimport { Route, Switch, Redirect } from \"react-router-dom\";\nimport { withStyles } from \"@material-ui/core/styles\";\nimport { withTranslation } from \"react-i18next\";\nimport Databases from \"./ManageDataDatabases\";\nimport Loading from \"../Loading\";\nimport NavigationTab from \"../NavigationTab\";\nimport Runs from \"./ManageDataRuns\";\n\nconst styles = {\n tabPage: {\n margin: 10\n }\n};\n\nconst ManageData = ({ match, t, ...rest }) => (\n <Loading\n loading={rest.loadingData}\n message={t(\"Loading databases and runs...\")}\n >\n <p>\n {t(\n \"Cleaning up data you no longer need allows you to focus on new analyses.\"\n )}\n </p>\n\n <NavigationTab to=\"/managedata/databases\">{t(\"Databases\")}</NavigationTab>\n <NavigationTab to=\"/managedata/runs\">{t(\"Runs\")}</NavigationTab>\n\n <div className={rest.classes.tabPage}>\n <Switch>\n <Route\n exact\n path={match.path}\n render={() => <Redirect replace to={`${match.path}/databases`} />}\n />\n <Route\n path={`${match.path}/databases`}\n render={() => (\n <Databases\n databases={rest.databases}\n selectedDatabaseIds={rest.selectedDatabaseIds}\n onToggleDatabase={rest.onToggleDatabase}\n onDownloadDatabases={rest.onDownloadDatabases}\n onDeleteDatabases={rest.onDeleteDatabases}\n />\n )}\n />\n <Route\n path={`${match.path}/runs`}\n render={() => (\n <Runs\n runs={rest.runs}\n selectedRunIds={rest.selectedRunIds}\n onToggleRun={rest.onToggleRun}\n onDeleteRuns={rest.onDeleteRuns}\n />\n )}\n />\n </Switch>\n </div>\n </Loading>\n);\n\nManageData.propTypes = {\n loadingData: PropTypes.bool,\n databases: PropTypes.arrayOf(managedLabeledValuePropType),\n runs: PropTypes.arrayOf(managedLabeledValuePropType),\n selectedDatabaseIds: PropTypes.arrayOf(PropTypes.string).isRequired,\n selectedRunIds: PropTypes.arrayOf(PropTypes.string).isRequired,\n onToggleDatabase: PropTypes.func.isRequired,\n onDeleteDatabases: PropTypes.func.isRequired,\n onDownloadDatabases: PropTypes.func.isRequired,\n onToggleRun: PropTypes.func.isRequired,\n onDeleteRuns: PropTypes.func.isRequired\n};\n\nManageData.defaultProps = {\n loadingData: false,\n databases: [],\n runs: []\n};\n\nexport default withTranslation()(withStyles(styles)(ManageData));\n","import React, { Component } from \"react\";\nimport { toggleSetExistence } from \"../utilities\";\nimport { normalizeDatabases, normalizeRuns } from \"../data\";\nimport * as api from \"../api/api\";\nimport fileDownload from \"js-file-download\";\nimport { withErrorBoundary } from \"../errors\";\nimport ManageData from \"../components/ManageData/ManageData\";\n\nconst createInitialState = () => ({\n selectedDatabaseIds: new Set(),\n selectedRunIds: new Set()\n});\n\nclass ManageDataContainer extends Component {\n constructor(props) {\n super(props);\n\n this.signal = api.getSignal();\n\n this.state = createInitialState();\n }\n\n setStateSafely = (state, callback) => {\n if (!this.unmounting) {\n this.setState(state, callback);\n }\n };\n\n normalizeDatabases = databases =>\n Object.entries(normalizeDatabases(databases))\n .filter(database => !database.isGlobal)\n .map(([id, database]) => ({\n value: id,\n label: `${database.name} (${database.type})`,\n isGlobal: database.isGlobal,\n isInUse: database.isInUse\n }));\n\n onToggleDatabase = databaseId => {\n // noinspection JSCheckFunctionSignatures\n const selectedDatabaseIds = new Set(this.state.selectedDatabaseIds);\n\n toggleSetExistence(selectedDatabaseIds, databaseId);\n\n this.setStateSafely({\n selectedDatabaseIds\n });\n };\n\n onDownloadDatabases = () => {\n const selectedDatabaseIds = Array.from(this.state.selectedDatabaseIds);\n\n api\n .downloadDatabases(selectedDatabaseIds, this.signal.token)\n .then(response => {\n if (!response) {\n return;\n }\n\n fileDownload(response.data, \"databases.zip\");\n });\n };\n\n onDeleteDatabases = () => {\n api\n .deleteDatabases(\n Array.from(this.state.selectedDatabaseIds),\n this.signal.token\n )\n .then(() => {\n const databases = this.state.databases.filter(\n database => !this.state.selectedDatabaseIds.has(database.value)\n );\n\n this.setStateSafely({\n selectedDatabaseIds: new Set(),\n databases\n });\n });\n };\n\n onToggleRun = runId => {\n // noinspection JSCheckFunctionSignatures\n const selectedRunIds = new Set(this.state.selectedRunIds);\n\n toggleSetExistence(selectedRunIds, runId);\n\n this.setStateSafely({\n selectedRunIds\n });\n };\n\n onDeleteRuns = () => {\n api\n .deleteRuns(Array.from(this.state.selectedRunIds), this.signal.token)\n .then(() => {\n const runs = this.state.runs.filter(\n run => !this.state.selectedRunIds.has(run.value)\n );\n\n this.setStateSafely({\n selectedRunIds: new Set(),\n runs\n });\n\n api.fetchDatabases(this.signal.token).then(response => {\n this.setStateSafely({\n databases: this.normalizeDatabases(response.data)\n });\n });\n });\n };\n\n componentDidMount() {\n this.setStateSafely({\n loadingData: true\n });\n\n // noinspection JSCheckFunctionSignatures\n Promise.all([\n api.fetchDatabases(this.signal.token),\n api.fetchRuns(true, true, this.signal.token)\n ])\n .then(response => {\n if (!response || response.some(item => !item)) {\n return;\n }\n\n const [databases, runs] = response;\n\n this.setStateSafely({\n databases: this.normalizeDatabases(databases.data),\n runs: Object.entries(normalizeRuns(runs.data))\n .filter(run => !run.isGlobal)\n .map(([id, run]) => ({\n value: id,\n label: run.name,\n isGlobal: run.isGlobal,\n createdAt: run.startedAt,\n completed: run.completed,\n failed: run.failed\n }))\n });\n })\n .finally(() => {\n this.setStateSafely({\n loadingData: false\n });\n });\n }\n\n componentWillUnmount() {\n this.unmounting = true;\n this.signal.cancel();\n }\n\n render() {\n return (\n <ManageData\n loadingData={this.state.loadingData}\n match={this.props.match}\n databases={this.state.databases}\n selectedDatabaseIds={Array.from(this.state.selectedDatabaseIds)}\n selectedRunIds={Array.from(this.state.selectedRunIds)}\n runs={this.state.runs}\n onToggleDatabase={this.onToggleDatabase}\n onDeleteDatabases={this.onDeleteDatabases}\n onDownloadDatabases={this.onDownloadDatabases}\n onToggleRun={this.onToggleRun}\n onDeleteRuns={this.onDeleteRuns}\n />\n );\n }\n}\n\nexport default withErrorBoundary(ManageDataContainer);\n","import React from \"react\";\nimport * as PropTypes from \"prop-types\";\nimport { labeledValuePropType } from \"../../propTypes\";\nimport { withStyles } from \"@material-ui/core/styles\";\nimport Button from \"@material-ui/core/Button\";\nimport Select from \"react-select\";\nimport { withTranslation } from \"react-i18next\";\n\nconst styles = {\n actionButton: {\n marginTop: 20\n },\n country: {\n marginLeft: 20\n },\n select: {\n marginTop: 10,\n width: 400\n },\n selectorGroup: {\n display: \"flex\"\n }\n};\n\nconst PrepareDataCountrySelector = ({ t, ...rest }) => (\n <div>\n <div className={rest.classes.selectorGroup}>\n <div>\n <label htmlFor=\"database\">{t(\"Database:\")}</label>\n <Select\n id=\"database\"\n placeholder={t(\"Select database...\")}\n options={rest.databases}\n value={rest.databases.filter(\n ({ value }) => value === rest.selectedDatabaseId\n )}\n className={rest.classes.select}\n onChange={({ value }) => rest.onSelectDatabase(value)}\n />\n </div>\n\n <div className={rest.classes.country}>\n <label htmlFor=\"country\">{t(\"Country:\")}</label>\n <Select\n id=\"country\"\n placeholder={t(\"Select country/population...\")}\n options={rest.countries}\n value={rest.countries.filter(\n ({ value }) =>\n parseInt(value, 10) === rest.selectedCountryNumericCode\n )}\n className={rest.classes.select}\n onChange={({ value }) => rest.onSelectCountry(parseInt(value, 10))}\n />\n </div>\n </div>\n\n <Button\n variant=\"contained\"\n color=\"primary\"\n disabled={!rest.selectedDatabaseId || !rest.selectedCountryNumericCode}\n className={rest.classes.actionButton}\n onClick={rest.onLoadData}\n >\n {t(\"Load existing data\")}\n </Button>\n </div>\n);\n\nPrepareDataCountrySelector.propTypes = {\n databases: PropTypes.arrayOf(labeledValuePropType),\n countries: PropTypes.arrayOf(labeledValuePropType),\n selectedDatabaseId: PropTypes.string,\n selectedCountryNumericCode: PropTypes.number,\n onSelectDatabase: PropTypes.func.isRequired,\n onSelectCountry: PropTypes.func.isRequired,\n onLoadData: PropTypes.func.isRequired\n};\n\nPrepareDataCountrySelector.defaultProps = {\n databases: [],\n countries: []\n};\n\nexport default withTranslation()(\n withStyles(styles)(PrepareDataCountrySelector)\n);\n","import React from \"react\";\nimport * as PropTypes from \"prop-types\";\nimport { withStyles } from \"@material-ui/core/styles\";\nimport Button from \"@material-ui/core/Button\";\nimport TextField from \"@material-ui/core/TextField\";\nimport { withTranslation } from \"react-i18next\";\n\nconst styles = {\n actionButton: {\n marginTop: 20\n },\n name: {\n display: \"block\",\n width: 400\n }\n};\n\nconst PrepareDataSaver = ({ t, ...rest }) => (\n <div>\n <TextField\n label={t(\"Data set name\")}\n placeholder={t(\"Specify name for data set...\")}\n InputLabelProps={{\n shrink: true\n }}\n fullWidth={true}\n value={rest.name || \"\"}\n className={rest.classes.name}\n onChange={e => {\n rest.onChangeName(e.target.value);\n }}\n />\n\n <Button\n variant=\"contained\"\n color=\"primary\"\n disabled={rest.saveDisabled}\n className={rest.classes.actionButton}\n onClick={rest.onSave}\n >\n {t(\"Save\")}\n </Button>\n </div>\n);\n\nPrepareDataSaver.propType = {\n name: PropTypes.string,\n saveDisabled: PropTypes.bool,\n onChangeName: PropTypes.func.isRequired,\n onSave: PropTypes.func.isRequired\n};\n\nPrepareDataSaver.defaultProps = {\n saveDisabled: false\n};\n\nexport default withTranslation()(withStyles(styles)(PrepareDataSaver));\n","import React, { Component } from \"react\";\nimport * as PropTypes from \"prop-types\";\nimport { emuDatumPropType, labeledValuePropType } from \"../../propTypes\";\nimport { maximumYear, minimumYear } from \"../../constants\";\nimport {\n formatNumericCell,\n parseIntegerCell,\n parseNullableAlphaCell,\n parseNumericCell\n} from \"../../utilities\";\nimport { createDefaultEmuDatum } from \"../../data\";\nimport { withStyles } from \"@material-ui/core/styles\";\nimport classNames from \"classnames\";\nimport Button from \"@material-ui/core/Button\";\nimport { AgGridColumn, AgGridReact } from \"ag-grid-react\";\nimport \"ag-grid-enterprise\";\nimport \"ag-grid-community/dist/styles/ag-grid.css\";\nimport \"ag-grid-community/dist/styles/ag-theme-material.css\";\nimport { withTranslation } from \"react-i18next\";\nimport { translateGridText } from \"../../i18n\";\nimport CountrySelector from \"./PrepareDataCountrySelector\";\nimport Saver from \"./PrepareDataSaver\";\n\nconst styles = {\n button: {\n marginRight: 20\n },\n buttonGroup: {\n marginBottom: 20\n },\n regionEditor: {\n margin: \"20px 0 20px\"\n },\n table: {\n margin: \"20px 0\",\n height: 400\n }\n};\n\nclass PrepareDataEmuData extends Component {\n constructor(props) {\n super(props);\n\n this.state = {};\n }\n\n onGridReady = params => {\n this.gridApi = params.api;\n\n params.columnApi.autoSizeColumns(\n params.columnApi.getAllColumns().map(column => column.colId)\n );\n };\n\n onSelectionChanged = () => {\n this.setState({\n rowSelected: this.gridApi.getSelectedRows().length > 0\n });\n };\n\n onAddNewItem = () => {\n const item = createDefaultEmuDatum();\n\n const newRowData = this.gridApi.updateRowData({\n add: [item]\n });\n\n this.gridApi.ensureIndexVisible(newRowData.add[0].childIndex);\n\n this.props.onAddNewItem(item);\n };\n\n onDeleteItem = () => {\n const selectedItemIds = this.gridApi.getSelectedRows().map(item => item.id);\n\n if (!selectedItemIds.length) {\n return;\n }\n\n this.props.onDeleteItem(selectedItemIds[0]);\n\n this.setState({\n rowSelected: false\n });\n };\n\n render() {\n return (\n <div>\n <CountrySelector\n databases={this.props.databases}\n countries={this.props.countries}\n selectedDatabaseId={this.props.selectedDatabaseId}\n selectedCountryNumericCode={this.props.selectedCountryNumericCode}\n onSelectDatabase={this.props.onSelectDatabase}\n onSelectCountry={this.props.onSelectCountry}\n onLoadData={this.props.onLoadCountryData}\n />\n\n <div\n className={classNames(\"ag-theme-material\", this.props.classes.table)}\n >\n <AgGridReact\n defaultColDef={{\n sortable: true,\n editable: true\n }}\n rowSelection=\"single\"\n suppressColumnVirtualisation={true}\n suppressScrollOnNewData={true}\n overlayNoRowsTemplate=\"<span />\"\n localeTextFunc={translateGridText}\n rowData={this.props.data}\n onGridReady={this.onGridReady}\n onSelectionChanged={this.onSelectionChanged}\n onCellValueChanged={params => {\n this.props.onEditItem(params.data);\n }}\n >\n <AgGridColumn\n headerName={this.props.t(\"Region code\")}\n field=\"regionCode\"\n valueParser={params => parseNullableAlphaCell(params)}\n />\n <AgGridColumn\n headerName={this.props.t(\"Year\")}\n field=\"startYear\"\n type=\"numericColumn\"\n filter=\"agNumberColumnFilter\"\n valueParser={params =>\n parseIntegerCell(params, minimumYear, maximumYear)\n }\n />\n <AgGridColumn\n headerName={this.props.t(\"EMU\")}\n field=\"emu\"\n type=\"numericColumn\"\n filter=\"agNumberColumnFilter\"\n valueFormatter={params => formatNumericCell(params.value, 3)}\n valueParser={params => parseNumericCell(params, 0, 1)}\n />\n <AgGridColumn\n headerName={this.props.t(\"Service statistic type\")}\n field=\"serviceStatisticType\"\n cellEditor=\"agRichSelectCellEditor\"\n cellEditorParams={{\n values: [\"clients\", \"facilities\", \"users\", \"visits\"]\n }}\n />\n </AgGridReact>\n </div>\n\n <div className={this.props.classes.buttonGroup}>\n <Button\n variant=\"contained\"\n color=\"primary\"\n className={this.props.classes.button}\n onClick={this.onAddNewItem}\n >\n {this.props.t(\"Add new record\")}\n </Button>\n\n <Button\n variant=\"contained\"\n color=\"secondary\"\n disabled={!this.state.rowSelected}\n className={this.props.classes.button}\n onClick={this.onDeleteItem}\n >\n {this.props.t(\"Delete selected row\")}\n </Button>\n\n <Button\n variant=\"contained\"\n color=\"secondary\"\n className={this.props.classes.button}\n onClick={this.props.onClearData}\n >\n {this.props.t(\"Clear data\")}\n </Button>\n </div>\n\n <Saver\n name={this.props.newDatabaseName}\n saveDisabled={\n (!this.props.regionData &&\n !this.props.selectedCountryNumericCode) ||\n (this.props.regionData &&\n (!this.props.regionNumericCode ||\n !this.props.regionAlphaCode ||\n !this.props.regionName)) ||\n !this.props.newDatabaseName\n }\n onChangeName={this.props.onChangeDatabaseName}\n onSave={this.props.onSave}\n />\n </div>\n );\n }\n}\n\nPrepareDataEmuData.propTypes = {\n databases: PropTypes.arrayOf(labeledValuePropType),\n countries: PropTypes.arrayOf(labeledValuePropType),\n selectedDatabaseId: PropTypes.string,\n selectedCountryNumericCode: PropTypes.number,\n data: PropTypes.arrayOf(emuDatumPropType),\n newDatabaseName: PropTypes.string,\n onSelectDatabase: PropTypes.func.isRequired,\n onSelectCountry: PropTypes.func.isRequired,\n onLoadCountryData: PropTypes.func.isRequired,\n onAddNewItem: PropTypes.func.isRequired,\n onEditItem: PropTypes.func.isRequired,\n onDeleteItem: PropTypes.func.isRequired,\n onClearData: PropTypes.func.isRequired,\n onChangeDatabaseName: PropTypes.func.isRequired,\n onSave: PropTypes.func.isRequired\n};\n\nPrepareDataEmuData.defaultProps = {\n databases: [],\n countries: [],\n data: []\n};\n\nexport default withTranslation()(withStyles(styles)(PrepareDataEmuData));\n","import React from \"react\";\nimport * as PropTypes from \"prop-types\";\nimport { withStyles } from \"@material-ui/core/styles\";\nimport classNames from \"classnames\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport Snackbar from \"@material-ui/core/Snackbar\";\nimport SnackbarContent from \"@material-ui/core/SnackbarContent\";\nimport CheckCircleIcon from \"@material-ui/icons/CheckCircle\";\nimport CloseIcon from \"@material-ui/icons/Close\";\nimport ErrorIcon from \"@material-ui/icons/Error\";\nimport InfoIcon from \"@material-ui/icons/Info\";\nimport WarningIcon from \"@material-ui/icons/Warning\";\nimport amber from \"@material-ui/core/colors/amber\";\nimport green from \"@material-ui/core/colors/green\";\n\nconst variantIcon = {\n success: CheckCircleIcon,\n warning: WarningIcon,\n error: ErrorIcon,\n information: InfoIcon\n};\n\nconst styles = theme => ({\n error: {\n backgroundColor: theme.palette.error.dark\n },\n icon: {\n fontSize: 20\n },\n iconVariant: {\n opacity: 0.9,\n marginRight: theme.spacing.unit\n },\n information: {\n backgroundColor: theme.palette.primary.dark\n },\n margin: {\n margin: theme.spacing.unit\n },\n message: {\n display: \"flex\",\n alignItems: \"center\"\n },\n success: {\n backgroundColor: green[600]\n },\n warning: {\n backgroundColor: amber[700]\n }\n});\n\nconst Notification = props => {\n const Icon = variantIcon[props.variant];\n\n return (\n <Snackbar\n anchorOrigin={{\n vertical: \"bottom\",\n horizontal: \"left\"\n }}\n open={props.open}\n autoHideDuration={props.autoHideDurationMilliseconds}\n className={props.classes.container}\n onClose={props.onClose}\n >\n <SnackbarContent\n message={\n <span id=\"client-snackbar\" className={props.classes.message}>\n <Icon\n className={classNames(\n props.classes.icon,\n props.classes.iconVariant\n )}\n />\n {props.message}\n </span>\n }\n action={[\n <IconButton\n key=\"close\"\n color=\"inherit\"\n aria-label=\"Close\"\n onClick={props.onClose}\n >\n <CloseIcon />\n </IconButton>\n ]}\n className={classNames(\n props.classes.margin,\n props.classes[props.variant]\n )}\n aria-describedby=\"client-snackbar\"\n />\n </Snackbar>\n );\n};\n\nNotification.propTypes = {\n variant: PropTypes.oneOf([\"success\", \"information\", \"warning\", \"error\"]),\n open: PropTypes.bool,\n message: PropTypes.string,\n autoHideDurationMilliseconds: PropTypes.number,\n onClose: PropTypes.func.isRequired\n};\n\nNotification.defaultProps = {\n variant: \"information\",\n open: false,\n message: \"\",\n autoHideDurationMilliseconds: 6000\n};\n\nexport default withStyles(styles)(Notification);\n","import React from \"react\";\nimport * as PropTypes from \"prop-types\";\n\nconst BooleanCellRenderer = props => <span>{props.value ? \"✔\" : \"✘\"}</span>;\n\nBooleanCellRenderer.propTypes = {\n value: PropTypes.bool\n};\n\nexport default BooleanCellRenderer;\n","import React, { Component } from \"react\";\nimport * as PropTypes from \"prop-types\";\nimport { labeledValuePropType, populationDatumPropType } from \"../../propTypes\";\nimport { maximumYear, minimumYear } from \"../../constants\";\nimport { parseIntegerCell, parseNullableAlphaCell } from \"../../utilities\";\nimport { createDefaultPopulationDatum } from \"../../data\";\nimport { withStyles } from \"@material-ui/core/styles\";\nimport classNames from \"classnames\";\nimport Button from \"@material-ui/core/Button\";\nimport { AgGridColumn, AgGridReact } from \"ag-grid-react\";\nimport \"ag-grid-enterprise\";\nimport \"ag-grid-community/dist/styles/ag-grid.css\";\nimport \"ag-grid-community/dist/styles/ag-theme-material.css\";\nimport { withTranslation } from \"react-i18next\";\nimport { translateGridText } from \"../../i18n\";\nimport BooleanCellRenderer from \"../BooleanCellRenderer\";\nimport CountrySelector from \"./PrepareDataCountrySelector\";\nimport Saver from \"./PrepareDataSaver\";\n\nconst styles = {\n button: {\n marginRight: 20\n },\n buttonGroup: {\n marginBottom: 20\n },\n regionEditor: {\n margin: \"20px 0 20px\"\n },\n table: {\n margin: \"20px 0\",\n height: 400\n }\n};\n\nclass PrepareDataPopulationData extends Component {\n constructor(props) {\n super(props);\n\n this.state = {};\n }\n\n onGridReady = params => {\n this.gridApi = params.api;\n\n params.columnApi.autoSizeColumns(\n params.columnApi.getAllColumns().map(column => column.colId)\n );\n };\n\n onSelectionChanged = () => {\n this.setState({\n rowSelected: this.gridApi.getSelectedRows().length > 0\n });\n };\n\n onAddNewItem = () => {\n const item = createDefaultPopulationDatum();\n\n const newRowData = this.gridApi.updateRowData({\n add: [item]\n });\n\n this.gridApi.ensureIndexVisible(newRowData.add[0].childIndex);\n\n this.props.onAddNewItem(item);\n };\n\n onDeleteItem = () => {\n const selectedItemIds = this.gridApi.getSelectedRows().map(item => item.id);\n\n if (!selectedItemIds.length) {\n return;\n }\n\n this.props.onDeleteItem(selectedItemIds[0]);\n\n this.setState({\n rowSelected: false\n });\n };\n\n render() {\n return (\n <div>\n <CountrySelector\n databases={this.props.databases}\n countries={this.props.countries}\n selectedDatabaseId={this.props.selectedDatabaseId}\n selectedCountryNumericCode={this.props.selectedCountryNumericCode}\n onSelectDatabase={this.props.onSelectDatabase}\n onSelectCountry={this.props.onSelectCountry}\n onLoadData={this.props.onLoadCountryData}\n />\n\n <div\n className={classNames(\"ag-theme-material\", this.props.classes.table)}\n >\n <AgGridReact\n defaultColDef={{\n sortable: true,\n editable: true\n }}\n rowSelection=\"single\"\n suppressColumnVirtualisation={true}\n suppressScrollOnNewData={true}\n frameworkComponents={{ booleanCellRenderer: BooleanCellRenderer }}\n overlayNoRowsTemplate=\"<span />\"\n localeTextFunc={translateGridText}\n rowData={this.props.data}\n onGridReady={this.onGridReady}\n onSelectionChanged={this.onSelectionChanged}\n onCellValueChanged={params => {\n this.props.onEditItem(params.data);\n }}\n >\n <AgGridColumn\n headerName={this.props.t(\"Region code\")}\n field=\"regionCode\"\n valueParser={params => parseNullableAlphaCell(params)}\n />\n <AgGridColumn\n headerName={this.props.t(\"In union?\")}\n field=\"isInUnion\"\n cellRenderer=\"booleanCellRenderer\"\n cellEditor=\"agRichSelectCellEditor\"\n cellEditorParams={{\n cellRenderer: \"booleanCellRenderer\",\n values: [true, false]\n }}\n />\n <AgGridColumn\n headerName={this.props.t(\"Age\")}\n field=\"ageRange\"\n cellEditor=\"agRichSelectCellEditor\"\n cellEditorParams={{\n values: [\n \"10-14\",\n \"15-19\",\n \"20-24\",\n \"25-29\",\n \"30-34\",\n \"35-39\",\n \"40-44\",\n \"45-49\",\n \"15-49\"\n ]\n }}\n />\n <AgGridColumn\n headerName={this.props.t(\"Year\")}\n field=\"midYear\"\n type=\"numericColumn\"\n filter=\"agNumberColumnFilter\"\n valueParser={params =>\n parseIntegerCell(params, minimumYear, maximumYear)\n }\n />\n <AgGridColumn\n headerName={this.props.t(\"Population\")}\n field=\"population\"\n type=\"numericColumn\"\n filter=\"agNumberColumnFilter\"\n />\n </AgGridReact>\n </div>\n\n <div className={this.props.classes.buttonGroup}>\n <Button\n variant=\"contained\"\n color=\"primary\"\n className={this.props.classes.button}\n onClick={this.onAddNewItem}\n >\n {this.props.t(\"Add new record\")}\n </Button>\n\n <Button\n variant=\"contained\"\n color=\"secondary\"\n disabled={!this.state.rowSelected}\n className={this.props.classes.button}\n onClick={this.onDeleteItem}\n >\n {this.props.t(\"Delete selected row\")}\n </Button>\n\n <Button\n variant=\"contained\"\n color=\"secondary\"\n className={this.props.classes.button}\n onClick={this.props.onClearData}\n >\n {this.props.t(\"Clear data\")}\n </Button>\n </div>\n\n <Saver\n name={this.props.newDatabaseName}\n saveDisabled={\n (!this.props.regionData &&\n !this.props.selectedCountryNumericCode) ||\n (this.props.regionData &&\n (!this.props.regionNumericCode ||\n !this.props.regionAlphaCode ||\n !this.props.regionName)) ||\n !this.props.newDatabaseName\n }\n onChangeName={this.props.onChangeDatabaseName}\n onSave={this.props.onSave}\n />\n </div>\n );\n }\n}\n\nPrepareDataPopulationData.propTypes = {\n databases: PropTypes.arrayOf(labeledValuePropType),\n countries: PropTypes.arrayOf(labeledValuePropType),\n selectedDatabaseId: PropTypes.string,\n selectedCountryNumericCode: PropTypes.number,\n data: PropTypes.arrayOf(populationDatumPropType),\n newDatabaseName: PropTypes.string,\n onSelectDatabase: PropTypes.func.isRequired,\n onSelectCountry: PropTypes.func.isRequired,\n onLoadCountryData: PropTypes.func.isRequired,\n onAddNewItem: PropTypes.func.isRequired,\n onEditItem: PropTypes.func.isRequired,\n onDeleteItem: PropTypes.func.isRequired,\n onClearData: PropTypes.func.isRequired,\n onChangeDatabaseName: PropTypes.func.isRequired,\n onSave: PropTypes.func.isRequired\n};\n\nPrepareDataPopulationData.defaultProps = {\n databases: [],\n countries: [],\n data: []\n};\n\nexport default withTranslation()(withStyles(styles)(PrepareDataPopulationData));\n","import React, { Component } from \"react\";\nimport * as PropTypes from \"prop-types\";\nimport { labeledValuePropType, surveyDatumPropType } from \"../../propTypes\";\nimport { maximumYear, minimumYear } from \"../../constants\";\nimport {\n formatNumericCell,\n parseNullableAlphaCell,\n parseNullableNumericCell,\n parseNumericCell\n} from \"../../utilities\";\nimport { createDefaultSurveyDatum } from \"../../data\";\nimport { withStyles } from \"@material-ui/core/styles\";\nimport classNames from \"classnames\";\nimport Button from \"@material-ui/core/Button\";\nimport { AgGridColumn, AgGridReact } from \"ag-grid-react\";\nimport \"ag-grid-enterprise\";\nimport \"ag-grid-community/dist/styles/ag-grid.css\";\nimport \"ag-grid-community/dist/styles/ag-theme-material.css\";\nimport { withTranslation } from \"react-i18next\";\nimport { translateGridText } from \"../../i18n\";\nimport BooleanCellRenderer from \"../BooleanCellRenderer\";\nimport CountrySelector from \"./PrepareDataCountrySelector\";\nimport Saver from \"./PrepareDataSaver\";\n\nconst styles = {\n button: {\n marginRight: 20\n },\n buttonGroup: {\n marginBottom: 20\n },\n regionEditor: {\n margin: \"20px 0 20px\"\n },\n table: {\n margin: \"20px 0\",\n height: 400\n }\n};\n\nclass PrepareDataSurveyData extends Component {\n constructor(props) {\n super(props);\n\n this.state = {};\n }\n\n refreshCells = () => {\n this.gridApi.refreshCells();\n };\n\n onGridReady = params => {\n this.gridApi = params.api;\n\n params.columnApi.autoSizeColumns(\n params.columnApi.getAllColumns().map(column => column.colId)\n );\n };\n\n onSelectionChanged = () => {\n this.setState({\n rowSelected: this.gridApi.getSelectedRows().length > 0\n });\n };\n\n onAddNewItem = () => {\n const item = createDefaultSurveyDatum();\n\n const newRowData = this.gridApi.updateRowData({\n add: [item]\n });\n\n this.gridApi.ensureIndexVisible(newRowData.add[0].childIndex);\n\n this.props.onAddNewItem(item);\n };\n\n onDeleteItem = () => {\n const selectedItemIds = this.gridApi.getSelectedRows().map(item => item.id);\n\n if (!selectedItemIds.length) {\n return;\n }\n\n this.props.onDeleteItem(selectedItemIds[0]);\n\n this.setState({\n rowSelected: false\n });\n };\n\n render() {\n return (\n <div>\n <CountrySelector\n databases={this.props.databases}\n countries={this.props.countries}\n selectedDatabaseId={this.props.selectedDatabaseId}\n selectedCountryNumericCode={this.props.selectedCountryNumericCode}\n onSelectDatabase={this.props.onSelectDatabase}\n onSelectCountry={this.props.onSelectCountry}\n onLoadData={this.props.onLoadCountryData}\n />\n\n <div\n className={classNames(\"ag-theme-material\", this.props.classes.table)}\n >\n <AgGridReact\n defaultColDef={{\n sortable: true,\n editable: true\n }}\n rowSelection=\"single\"\n suppressColumnVirtualisation={true}\n suppressScrollOnNewData={true}\n frameworkComponents={{ booleanCellRenderer: BooleanCellRenderer }}\n overlayNoRowsTemplate=\"<span />\"\n localeTextFunc={translateGridText}\n rowData={this.props.data}\n onGridReady={this.onGridReady}\n onSelectionChanged={this.onSelectionChanged}\n onCellValueChanged={params => {\n this.props.onEditItem(\n params.data,\n params.colDef.field,\n this.refreshCells\n );\n }}\n >\n <AgGridColumn\n headerName={this.props.t(\"Include?\")}\n field=\"include\"\n cellRenderer=\"booleanCellRenderer\"\n cellEditor=\"agRichSelectCellEditor\"\n cellEditorParams={{\n cellRenderer: \"booleanCellRenderer\",\n values: [true, false]\n }}\n />\n <AgGridColumn\n headerName={this.props.t(\"Region code\")}\n field=\"regionCode\"\n valueParser={params => parseNullableAlphaCell(params)}\n />\n <AgGridColumn\n headerName={this.props.t(\"Start year\")}\n field=\"startDate\"\n type=\"numericColumn\"\n filter=\"agNumberColumnFilter\"\n valueFormatter={params => formatNumericCell(params.value, 2)}\n valueParser={params =>\n parseNumericCell(\n params,\n minimumYear + 0.5,\n params.node.data.endDate\n )\n }\n />\n <AgGridColumn\n headerName={this.props.t(\"End year\")}\n field=\"endDate\"\n type=\"numericColumn\"\n filter=\"agNumberColumnFilter\"\n valueFormatter={params => formatNumericCell(params.value, 2)}\n valueParser={params =>\n parseNumericCell(\n params,\n params.node.data.startDate,\n maximumYear + 0.5\n )\n }\n />\n <AgGridColumn\n headerName={this.props.t(\"In union?\")}\n field=\"isInUnion\"\n cellRenderer=\"booleanCellRenderer\"\n cellEditor=\"agRichSelectCellEditor\"\n cellEditorParams={{\n cellRenderer: \"booleanCellRenderer\",\n values: [true, false]\n }}\n />\n <AgGridColumn\n headerName={this.props.t(\"Age\")}\n field=\"ageRange\"\n cellEditor=\"agRichSelectCellEditor\"\n cellEditorParams={{\n values: [\n \"10-14\",\n \"15-19\",\n \"20-24\",\n \"25-29\",\n \"30-34\",\n \"35-39\",\n \"40-44\",\n \"45-49\",\n \"15-49\"\n ]\n }}\n />\n <AgGridColumn\n headerName={this.props.t(\"Data series/type\")}\n field=\"dataSeriesType\"\n cellEditor=\"agRichSelectCellEditor\"\n cellEditorParams={{\n values: [\"DHS\", \"MICS\", \"National survey\", \"PMA\", \"Other\"]\n }}\n />\n <AgGridColumn\n headerName={this.props.t(\"Population\")}\n field=\"groupTypeRelativeToBaseline\"\n headerTooltip={this.props.t(\"Group type relative to baseline\")}\n cellEditor=\"agRichSelectCellEditor\"\n cellEditorParams={{\n values: [\"AL\", \"BS\", \"EM\", \"FM\", \"HW\", \"MW\", \"PW\", \"SA\", \"UW\"]\n }}\n />\n <AgGridColumn\n headerName={this.props.t(\"Modern contraceptive use\")}\n field=\"contraceptiveUseModern\"\n type=\"numericColumn\"\n filter=\"agNumberColumnFilter\"\n valueFormatter={params => formatNumericCell(params.value, 3)}\n valueParser={params => parseNumericCell(params, 0, 1)}\n headerTooltip={this.props.t(\"Contraceptive use (modern)\")}\n />\n <AgGridColumn\n headerName={this.props.t(\"Traditional contraceptive use\")}\n field=\"contraceptiveUseTraditional\"\n type=\"numericColumn\"\n filter=\"agNumberColumnFilter\"\n valueFormatter={params => formatNumericCell(params.value, 3)}\n valueParser={params => parseNumericCell(params, 0, 1)}\n headerTooltip={this.props.t(\"Contraceptive use (traditional)\")}\n />\n <AgGridColumn\n headerName={this.props.t(\"All contraceptive use\")}\n field=\"contraceptiveUseAny\"\n type=\"numericColumn\"\n filter=\"agNumberColumnFilter\"\n valueFormatter={params => formatNumericCell(params.value, 3)}\n valueParser={params => parseNumericCell(params, 0, 1)}\n headerTooltip={this.props.t(\"Contraceptive use (all)\")}\n />\n <AgGridColumn\n headerName={this.props.t(\"Modern methods unmet need\")}\n field=\"unmetNeedModern\"\n type=\"numericColumn\"\n filter=\"agNumberColumnFilter\"\n valueFormatter={params => formatNumericCell(params.value, 3)}\n valueParser={params => parseNullableNumericCell(params, 0, 1)}\n headerTooltip={this.props.t(\"Unmet need for modern methods\")}\n />\n <AgGridColumn\n headerName={this.props.t(\"Any method unmet need\")}\n field=\"unmetNeedAny\"\n type=\"numericColumn\"\n filter=\"agNumberColumnFilter\"\n valueFormatter={params => formatNumericCell(params.value, 3)}\n valueParser={params => parseNullableNumericCell(params, 0, 1)}\n headerTooltip={this.props.t(\"Unmet need for any method\")}\n />\n <AgGridColumn\n headerName={this.props.t(\n \"Pertaining to methods used since last pregnancy\"\n )}\n field=\"pertainingToMethodsUsedSinceLastPregnancyReason\"\n />\n <AgGridColumn\n headerName={this.props.t(\"Geographical bias\")}\n field=\"geographicalRegionBiasReason\"\n />\n <AgGridColumn\n headerName={this.props.t(\n \"Non-pregnant and other positive biases\"\n )}\n field=\"nonPregnantAndOtherPositiveBiasesReason\"\n />\n <AgGridColumn\n headerName={this.props.t(\"Age bias\")}\n field=\"ageGroupBias\"\n cellEditor=\"agRichSelectCellEditor\"\n cellEditorParams={{\n values: [\"+\", \"-\", \"?\", \"None\"]\n }}\n />\n <AgGridColumn\n headerName={this.props.t(\"Modern method bias\")}\n field=\"modernMethodBias\"\n cellEditor=\"agRichSelectCellEditor\"\n cellEditorParams={{\n values: [\"+\", \"-\", \"None\"]\n }}\n />\n <AgGridColumn\n headerName={this.props.t(\"Traditional method bias\")}\n field=\"traditionalMethodBiasReason\"\n />\n <AgGridColumn\n headerName={this.props.t(\"Absence of probing question bias?\")}\n field=\"hasAbsenceOfProbingQuestionsBias\"\n cellRenderer=\"booleanCellRenderer\"\n cellEditor=\"agRichSelectCellEditor\"\n cellEditorParams={{\n cellRenderer: \"booleanCellRenderer\",\n values: [true, false]\n }}\n />\n <AgGridColumn\n headerName={this.props.t(\"SE log-ratio modern/no use\")}\n field=\"seLogRModernNoUse\"\n type=\"numericColumn\"\n filter=\"agNumberColumnFilter\"\n valueFormatter={params => formatNumericCell(params.value, 2)}\n valueParser={params =>\n parseNullableNumericCell(params, 0, Number.MAX_VALUE)\n }\n headerTooltip={this.props.t(\n \"Sampling error for the log-ratio of modern contraceptive method use to no use\"\n )}\n />\n <AgGridColumn\n headerName={this.props.t(\"SE log-ratio traditional/no use\")}\n field=\"seLogRTraditionalNoUse\"\n type=\"numericColumn\"\n filter=\"agNumberColumnFilter\"\n valueFormatter={params => formatNumericCell(params.value, 2)}\n valueParser={params =>\n parseNullableNumericCell(params, 0, Number.MAX_VALUE)\n }\n headerTooltip={this.props.t(\n \"Sampling error for the log-ratio of traditional contraceptive method use to no use\"\n )}\n />\n <AgGridColumn\n headerName={this.props.t(\"SE log-ratio unmet/no need\")}\n field=\"seLogRUnmetNoNeed\"\n type=\"numericColumn\"\n filter=\"agNumberColumnFilter\"\n valueFormatter={params => formatNumericCell(params.value, 2)}\n valueParser={params =>\n parseNullableNumericCell(params, 0, Number.MAX_VALUE)\n }\n headerTooltip={this.props.t(\n \"Sampling error for the log-ratio of unmet need (any method) to no need\"\n )}\n />\n <AgGridColumn\n headerName={this.props.t(\"Source ID\")}\n field=\"sourceId\"\n type=\"numericColumn\"\n />\n </AgGridReact>\n </div>\n\n <div className={this.props.classes.buttonGroup}>\n <Button\n variant=\"contained\"\n color=\"primary\"\n className={this.props.classes.button}\n onClick={this.onAddNewItem}\n >\n {this.props.t(\"Add new record\")}\n </Button>\n\n <Button\n variant=\"contained\"\n color=\"secondary\"\n disabled={!this.state.rowSelected}\n className={this.props.classes.button}\n onClick={this.onDeleteItem}\n >\n {this.props.t(\"Delete selected row\")}\n </Button>\n\n <Button\n variant=\"contained\"\n color=\"secondary\"\n className={this.props.classes.button}\n onClick={this.props.onClearData}\n >\n {this.props.t(\"Clear data\")}\n </Button>\n </div>\n\n <Saver\n name={this.props.newDatabaseName}\n saveDisabled={\n (!this.props.regionData &&\n !this.props.selectedCountryNumericCode) ||\n (this.props.regionData &&\n (!this.props.regionNumericCode ||\n !this.props.regionAlphaCode ||\n !this.props.regionName)) ||\n !this.props.newDatabaseName\n }\n onChangeName={this.props.onChangeDatabaseName}\n onSave={this.props.onSave}\n />\n </div>\n );\n }\n}\n\nPrepareDataSurveyData.propTypes = {\n databases: PropTypes.arrayOf(labeledValuePropType),\n countries: PropTypes.arrayOf(labeledValuePropType),\n selectedDatabaseId: PropTypes.string,\n selectedCountryNumericCode: PropTypes.number,\n data: PropTypes.arrayOf(surveyDatumPropType),\n newDatabaseName: PropTypes.string,\n onSelectDatabase: PropTypes.func.isRequired,\n onSelectCountry: PropTypes.func.isRequired,\n onLoadCountryData: PropTypes.func.isRequired,\n onAddNewItem: PropTypes.func.isRequired,\n onEditItem: PropTypes.func.isRequired,\n onDeleteItem: PropTypes.func.isRequired,\n onClearData: PropTypes.func.isRequired,\n onChangeDatabaseName: PropTypes.func.isRequired,\n onSave: PropTypes.func.isRequired\n};\n\nPrepareDataSurveyData.defaultProps = {\n databases: [],\n countries: [],\n data: []\n};\n\nexport default withTranslation()(withStyles(styles)(PrepareDataSurveyData));\n","import React from \"react\";\nimport * as PropTypes from \"prop-types\";\nimport {\n emuDatumPropType,\n populationDatumPropType,\n surveyDatumPropType\n} from \"../../propTypes\";\nimport { Redirect, Route, Switch } from \"react-router-dom\";\nimport { withStyles } from \"@material-ui/core/styles\";\nimport { useTranslation } from \"react-i18next\";\nimport EmuData from \"./PrepareDataEmuData\";\nimport NavigationTab from \"../NavigationTab\";\nimport Notification from \"../Notification\";\nimport PopulationData from \"./PrepareDataPopulationData\";\nimport SurveyData from \"./PrepareDataSurveyData\";\n\nconst styles = {\n tabPage: {\n margin: 10\n }\n};\n\nconst compareDatabases = (a, b) =>\n a.isDefault !== b.isDefault\n ? b.isDefault - a.isDefault\n : a.isGlobal !== b.isGlobal\n ? b.isGlobal - a.isGlobal\n : a.name.localeCompare(b.name);\n\nconst getDatabases = (databases, type) =>\n Object.entries(databases)\n .filter(database => database[1].type === type)\n .sort((a, b) => compareDatabases(a[1], b[1]))\n .map(([id, database]) => ({\n value: id,\n label: database.name\n }));\n\nconst normalizeCountries = countries =>\n Object.entries(countries)\n .map(([numericCode, country]) => ({\n value: numericCode,\n label: country.name\n }))\n .sort((a, b) => a.label.localeCompare(b.label));\n\nconst PrepareData = ({ match, ...rest }) => {\n const surveyDatabases = getDatabases(rest.databases, \"survey\");\n const surveyDatabaseCountries = normalizeCountries(\n rest.surveyDatabaseCountries\n );\n\n const populationDatabases = getDatabases(rest.databases, \"population\");\n const populationDatabaseCountries = normalizeCountries(\n rest.populationDatabaseCountries\n );\n\n const emuDatabases = [\n { value: \"\", label: \"None\" },\n ...getDatabases(rest.databases, \"emu\")\n ];\n const emuDatabaseCountries = normalizeCountries(rest.emuDatabaseCountries);\n\n const { t } = useTranslation();\n\n return (\n <div>\n <NavigationTab to=\"/preparedata/surveys\">\n {t(\"Survey data\")}\n </NavigationTab>\n <NavigationTab to=\"/preparedata/populations\">\n {t(\"Population data\")}\n </NavigationTab>\n <NavigationTab to=\"/preparedata/emu\">\n {t(\"Service statistics\")}\n </NavigationTab>\n\n <div className={rest.classes.tabPage}>\n <Switch>\n <Route\n exact\n path={match.path}\n render={() => <Redirect replace to={`${match.path}/surveys`} />}\n />\n <Route\n path={`${match.path}/surveys`}\n render={() => (\n <SurveyData\n databases={surveyDatabases}\n countries={surveyDatabaseCountries}\n selectedDatabaseId={rest.selectedSurveyDatabaseId}\n selectedCountryNumericCode={\n rest.selectedSurveyDataCountryNumericCode\n }\n data={rest.surveyData}\n regionData={rest.surveyRegionData}\n regionNumericCode={rest.surveyRegionNumericCode}\n regionAlphaCode={rest.surveyRegionAlphaCode}\n regionName={rest.surveyRegionName}\n newDatabaseName={rest.newSurveyDatabaseName}\n onSelectDatabase={rest.onSelectSurveyDatabase}\n onSelectCountry={rest.onSelectSurveyDataCountry}\n onLoadCountryData={rest.onLoadCountrySurveyData}\n onAddNewItem={rest.onAddNewSurveyItem}\n onEditItem={rest.onEditSurveyItem}\n onDeleteItem={rest.onDeleteSurveyItem}\n onClearData={rest.onClearSurveyData}\n onToggleRegionData={rest.onToggleSurveyRegionData}\n onChangeRegionNumericCode={rest.onChangeSurveyRegionNumericCode}\n onChangeRegionAlphaCode={rest.onChangeSurveyRegionAlphaCode}\n onChangeRegionName={rest.onChangeSurveyRegionName}\n onChangeDatabaseName={rest.onChangeSurveyDatabaseName}\n onSave={rest.onSaveSurveyDatabase}\n />\n )}\n />\n <Route\n path={`${match.path}/populations`}\n render={() => (\n <PopulationData\n databases={populationDatabases}\n countries={populationDatabaseCountries}\n selectedDatabaseId={rest.selectedPopulationDatabaseId}\n selectedCountryNumericCode={\n rest.selectedPopulationDataCountryNumericCode\n }\n data={rest.populationData}\n regionData={rest.populationRegionData}\n regionNumericCode={rest.populationRegionNumericCode}\n regionAlphaCode={rest.populationRegionAlphaCode}\n regionName={rest.populationRegionName}\n newDatabaseName={rest.newPopulationDatabaseName}\n onSelectDatabase={rest.onSelectPopulationDatabase}\n onSelectCountry={rest.onSelectPopulationDataCountry}\n onLoadCountryData={rest.onLoadCountryPopulationData}\n onAddNewItem={rest.onAddNewPopulationItem}\n onEditItem={rest.onEditPopulationItem}\n onDeleteItem={rest.onDeletePopulationItem}\n onClearData={rest.onClearPopulationData}\n onToggleRegionData={rest.onTogglePopulationRegionData}\n onChangeRegionNumericCode={\n rest.onChangePopulationRegionNumericCode\n }\n onChangeRegionAlphaCode={rest.onChangePopulationRegionAlphaCode}\n onChangeRegionName={rest.onChangePopulationRegionName}\n onChangeDatabaseName={rest.onChangePopulationDatabaseName}\n onSave={rest.onSavePopulationDatabase}\n />\n )}\n />\n <Route\n path={`${match.path}/emu`}\n render={() => (\n <EmuData\n databases={emuDatabases}\n countries={emuDatabaseCountries}\n selectedDatabaseId={rest.selectedEmuDatabaseId}\n selectedCountryNumericCode={\n rest.selectedEmuDataCountryNumericCode\n }\n data={rest.emuData}\n regionData={rest.emuRegionData}\n regionNumericCode={rest.emuRegionNumericCode}\n regionAlphaCode={rest.emuRegionAlphaCode}\n regionName={rest.emuRegionName}\n newDatabaseName={rest.newEmuDatabaseName}\n onSelectDatabase={rest.onSelectEmuDatabase}\n onSelectCountry={rest.onSelectEmuDataCountry}\n onLoadCountryData={rest.onLoadCountryEmuData}\n onAddNewItem={rest.onAddNewEmuItem}\n onEditItem={rest.onEditEmuItem}\n onDeleteItem={rest.onDeleteEmuItem}\n onClearData={rest.onClearEmuData}\n onToggleRegionData={rest.onToggleEmuRegionData}\n onChangeRegionNumericCode={rest.onChangeEmuRegionNumericCode}\n onChangeRegionAlphaCode={rest.onChangeEmuRegionAlphaCode}\n onChangeRegionName={rest.onChangeEmuRegionName}\n onChangeDatabaseName={rest.onChangeEmuDatabaseName}\n onSave={rest.onSaveEmuDatabase}\n />\n )}\n />\n </Switch>\n </div>\n\n <Notification\n variant={rest.notificationVariant}\n open={rest.notificationOpen}\n message={rest.notificationMessage}\n onClose={rest.onCloseNotification}\n />\n </div>\n );\n};\n\nPrepareData.propTypes = {\n databases: PropTypes.objectOf(\n PropTypes.shape({\n name: PropTypes.string.isRequired\n })\n ),\n surveyDatabaseCountries: PropTypes.objectOf(\n PropTypes.shape({\n name: PropTypes.string.isRequired\n })\n ),\n selectedSurveyDatabaseId: PropTypes.string,\n selectedSurveyDataCountryNumericCode: PropTypes.number,\n surveyData: PropTypes.arrayOf(surveyDatumPropType),\n newSurveyDatabaseName: PropTypes.string,\n populationDatabaseCountries: PropTypes.objectOf(\n PropTypes.shape({\n name: PropTypes.string.isRequired\n })\n ),\n selectedPopulationDatabaseId: PropTypes.string,\n selectedPopulationDataCountryNumericCode: PropTypes.number,\n populationData: PropTypes.arrayOf(populationDatumPropType),\n newPopulationDatabaseName: PropTypes.string,\n emuDatabaseCountries: PropTypes.objectOf(\n PropTypes.shape({\n name: PropTypes.string.isRequired\n })\n ),\n selectedEmuDatabaseId: PropTypes.string,\n selectedEmuDataCountryNumericCode: PropTypes.number,\n emuData: PropTypes.arrayOf(emuDatumPropType),\n newEmuDatabaseName: PropTypes.string,\n notificationVariant: PropTypes.string,\n notificationOpen: PropTypes.bool,\n notificationMessage: PropTypes.string,\n onSelectSurveyDatabase: PropTypes.func.isRequired,\n onSelectSurveyDataCountry: PropTypes.func.isRequired,\n onLoadCountrySurveyData: PropTypes.func.isRequired,\n onAddNewSurveyItem: PropTypes.func.isRequired,\n onEditSurveyItem: PropTypes.func.isRequired,\n onDeleteSurveyItem: PropTypes.func.isRequired,\n onClearSurveyData: PropTypes.func.isRequired,\n onChangeSurveyDatabaseName: PropTypes.func.isRequired,\n onSaveSurveyDatabase: PropTypes.func.isRequired,\n onSelectPopulationDatabase: PropTypes.func.isRequired,\n onSelectPopulationDataCountry: PropTypes.func.isRequired,\n onLoadCountryPopulationData: PropTypes.func.isRequired,\n onAddNewPopulationItem: PropTypes.func.isRequired,\n onEditPopulationItem: PropTypes.func.isRequired,\n onDeletePopulationItem: PropTypes.func.isRequired,\n onClearPopulationData: PropTypes.func.isRequired,\n onChangePopulationDatabaseName: PropTypes.func.isRequired,\n onSavePopulationDatabase: PropTypes.func.isRequired,\n onSelectEmuDatabase: PropTypes.func.isRequired,\n onSelectEmuDataCountry: PropTypes.func.isRequired,\n onLoadCountryEmuData: PropTypes.func.isRequired,\n onAddNewEmuItem: PropTypes.func.isRequired,\n onEditEmuItem: PropTypes.func.isRequired,\n onDeleteEmuItem: PropTypes.func.isRequired,\n onClearEmuData: PropTypes.func.isRequired,\n onChangeEmuDatabaseName: PropTypes.func.isRequired,\n onSaveEmuDatabase: PropTypes.func.isRequired,\n onCloseNotification: PropTypes.func.isRequired\n};\n\nPrepareData.defaultProps = {\n databases: {},\n surveyDatabaseCountries: {},\n surveyData: [],\n populationDatabaseCountries: {},\n populationData: [],\n emuDatabaseCountries: {},\n emuData: [],\n notificationOpen: false\n};\n\nexport default withStyles(styles)(PrepareData);\n","import React, { Component } from \"react\";\nimport { createGuid } from \"../utilities\";\nimport {\n normalizeDatabases,\n normalizePopulationData,\n normalizeSurveyData,\n normalizeEmuData,\n synchonizeContraceptivePrevalence\n} from \"../data\";\nimport * as api from \"../api/api\";\nimport { withErrorBoundary } from \"../errors\";\nimport { withTranslation } from \"react-i18next\";\nimport PrepareData from \"../components/PrepareData/PrepareData\";\n\nconst createInitialState = () => ({\n selectedEmuDatabaseId: \"\"\n});\n\nconst findDefaultDatabaseId = databases => {\n if (!databases) {\n return;\n }\n\n for (let databaseId of Object.keys(databases)) {\n const { type, isDefault } = databases[databaseId];\n\n if (type === \"survey\" && isDefault) {\n return databaseId;\n }\n }\n};\n\nconst getCountries = (databases, databaseId) => {\n if (!databases || !databaseId) {\n return;\n }\n\n const database = databases[databaseId];\n\n return Object.keys(database.divisions).reduce((result, divisionKey) => {\n const division = database.divisions[divisionKey];\n\n if (division.isCountry) {\n result[divisionKey] = division;\n }\n\n return result;\n }, {});\n};\n\nconst findIndex = (data, key, value) =>\n data.map(datum => datum[key]).indexOf(value);\n\nclass PrepareDataContainer extends Component {\n constructor(props) {\n super(props);\n\n this.signal = api.getSignal();\n\n this.state = createInitialState();\n }\n\n setStateSafely = (state, callback) => {\n if (!this.unmounting) {\n this.setState(state, callback);\n }\n };\n\n findDefaultDatabaseId = () => findDefaultDatabaseId(this.state.databases);\n\n getCountries = databaseId => getCountries(this.state.databases, databaseId);\n\n createDatabasePayload = (\n type,\n name,\n databaseId,\n divisionNumericCode,\n data\n ) => ({\n id: createGuid(),\n type,\n databaseId: databaseId || this.findDefaultDatabaseId(),\n divisionNumericCode,\n name,\n data: data.map(datum => ({\n ...datum,\n divisionNumericCode\n }))\n });\n\n createDatabase = databasePayload => ({\n type: databasePayload.type,\n name: databasePayload.name,\n divisions: {\n [databasePayload.divisionNumericCode]: this.state.databases[\n databasePayload.databaseId\n ].divisions[databasePayload.divisionNumericCode]\n }\n });\n\n onSelectSurveyDatabase = databaseId => {\n const countries = this.getCountries(databaseId);\n\n this.setStateSafely({\n selectedSurveyDatabaseId: databaseId,\n selectedSurveyDataCountryNumericCode:\n Object.keys(countries).length !== 1\n ? undefined\n : parseInt(Object.keys(countries)[0], 10)\n });\n };\n\n onSelectSurveyDataCountry = countryNumericCode => {\n this.setStateSafely({\n selectedSurveyDataCountryNumericCode: countryNumericCode\n });\n };\n\n onLoadCountrySurveyData = () => {\n api\n .fetchSurveyDatabase(\n this.state.selectedSurveyDatabaseId,\n this.state.selectedSurveyDataCountryNumericCode,\n undefined,\n this.signal.token\n )\n .then(response => {\n if (!response) {\n return;\n }\n\n this.setStateSafely({\n surveyData: normalizeSurveyData(response.data).map(datum => ({\n ...datum,\n id: createGuid(),\n include: !datum.exclude\n }))\n });\n });\n };\n\n onAddNewSurveyItem = item => {\n this.setStateSafely({\n surveyData: [...(this.state.surveyData || []), item]\n });\n };\n\n onEditSurveyItem = (item, updatedField, callback) => {\n const surveyData = [...this.state.surveyData];\n\n const itemIndex = findIndex(surveyData, \"id\", item.id);\n\n // noinspection JSValidateTypes\n surveyData[itemIndex] = synchonizeContraceptivePrevalence(\n item,\n updatedField\n );\n\n this.setStateSafely(\n {\n surveyData\n },\n callback\n );\n };\n\n onDeleteSurveyItem = itemId => {\n this.setStateSafely({\n surveyData: this.state.surveyData.filter(datum => datum.id !== itemId)\n });\n };\n\n onClearSurveyData = () => {\n this.setStateSafely({\n surveyData: undefined\n });\n };\n\n onChangeSurveyDatabaseName = databaseName => {\n this.setStateSafely({\n newSurveyDatabaseName: databaseName\n });\n };\n\n onSaveSurveyDatabase = () => {\n const databasePayload = this.createDatabasePayload(\n \"survey\",\n this.state.newSurveyDatabaseName,\n this.state.selectedSurveyDatabaseId,\n this.state.selectedSurveyDataCountryNumericCode,\n this.state.surveyData.map(({ include, ...rest }) => ({\n ...rest,\n hasGeographicalRegionBias: !!rest.geographicalRegionBiasReason,\n exclude: !include\n }))\n );\n\n api.saveDatabase(databasePayload, this.signal.token).then(response => {\n const { id } = response.data;\n\n const databases = {\n ...this.state.databases,\n [id]: this.createDatabase(databasePayload)\n };\n\n this.setStateSafely({\n databases,\n notificationVariant: \"success\",\n notificationOpen: true,\n notificationMessage: this.props.t(\n 'Database \"{{databaseName}}\" was saved',\n {\n databaseName: databasePayload.name\n }\n )\n });\n });\n };\n\n onSelectPopulationDatabase = databaseId => {\n const countries = this.getCountries(databaseId);\n\n this.setStateSafely({\n selectedPopulationDatabaseId: databaseId,\n selectedPopulationDataCountryNumericCode:\n Object.keys(countries).length !== 1\n ? undefined\n : parseInt(Object.keys(countries)[0], 10)\n });\n };\n\n onSelectPopulationDataCountry = countryNumericCode => {\n this.setStateSafely({\n selectedPopulationDataCountryNumericCode: countryNumericCode\n });\n };\n\n onLoadCountryPopulationData = () => {\n api\n .fetchPopulationDatabase(\n this.state.selectedPopulationDatabaseId,\n this.state.selectedPopulationDataCountryNumericCode,\n this.signal.token\n )\n .then(response => {\n if (!response) {\n return;\n }\n\n this.setStateSafely({\n populationData: normalizePopulationData(\n response.data.filter(\n datum =>\n datum.divisionNumericCode ===\n this.state.selectedPopulationDataCountryNumericCode &&\n datum.ageRange === \"15-49\"\n )\n ).map(datum => ({\n ...datum,\n id: createGuid()\n }))\n });\n });\n };\n\n onAddNewPopulationItem = item => {\n this.setStateSafely({\n populationData: [...(this.state.populationData || []), item]\n });\n };\n\n onEditPopulationItem = item => {\n const populationData = [...this.state.populationData];\n\n const itemIndex = findIndex(populationData, \"id\", item.id);\n populationData[itemIndex] = item;\n\n this.setStateSafely({\n populationData\n });\n };\n\n onDeletePopulationItem = itemId => {\n this.setStateSafely({\n populationData: this.state.populationData.filter(\n datum => datum.id !== itemId\n )\n });\n };\n\n onClearPopulationData = () => {\n this.setStateSafely({\n populationData: undefined\n });\n };\n\n onChangePopulationDatabaseName = databaseName => {\n this.setStateSafely({\n newPopulationDatabaseName: databaseName\n });\n };\n\n onSavePopulationDatabase = () => {\n const databasePayload = this.createDatabasePayload(\n \"population\",\n this.state.newPopulationDatabaseName,\n this.state.selectedPopulationDatabaseId,\n this.state.selectedPopulationDataCountryNumericCode,\n this.state.populationData\n );\n\n api.saveDatabase(databasePayload, this.signal.token).then(response => {\n const { id } = response.data;\n\n const databases = {\n ...this.state.databases,\n [id]: this.createDatabase(databasePayload)\n };\n\n this.setStateSafely({\n databases,\n notificationVariant: \"success\",\n notificationOpen: true,\n notificationMessage: this.props.t(\n 'Database \"{{databaseName}}\" was saved',\n {\n databaseName: databasePayload.name\n }\n )\n });\n });\n };\n\n onSelectEmuDatabase = databaseId => {\n const countries = this.getCountries(\n databaseId || this.findDefaultDatabaseId()\n );\n\n this.setStateSafely({\n selectedEmuDatabaseId: databaseId,\n selectedEmuDataCountryNumericCode:\n Object.keys(countries).length !== 1\n ? undefined\n : parseInt(Object.keys(countries)[0], 10)\n });\n };\n\n onSelectEmuDataCountry = countryNumericCode => {\n this.setStateSafely({\n selectedEmuDataCountryNumericCode: countryNumericCode\n });\n };\n\n onLoadCountryEmuData = () => {\n api\n .fetchEmuDatabase(\n this.state.selectedEmuDatabaseId,\n this.state.selectedEmuDataCountryNumericCode,\n this.signal.token\n )\n .then(response => {\n if (!response) {\n return;\n }\n\n this.setStateSafely({\n emuData: normalizeEmuData(\n response.data.filter(\n datum =>\n datum.divisionNumericCode ===\n this.state.selectedEmuDataCountryNumericCode\n )\n ).map(datum => ({\n ...datum,\n id: createGuid()\n }))\n });\n });\n };\n\n onAddNewEmuItem = item => {\n this.setStateSafely({\n emuData: [...(this.state.emuData || []), item]\n });\n };\n\n onEditEmuItem = item => {\n const emuData = [...this.state.emuData];\n\n const itemIndex = findIndex(emuData, \"id\", item.id);\n emuData[itemIndex] = item;\n\n this.setStateSafely({\n emuData\n });\n };\n\n onDeleteEmuItem = itemId => {\n this.setStateSafely({\n emuData: this.state.emuData.filter(datum => datum.id !== itemId)\n });\n };\n\n onClearEmuData = () => {\n this.setStateSafely({\n emuData: undefined\n });\n };\n\n onChangeEmuDatabaseName = databaseName => {\n this.setStateSafely({\n newEmuDatabaseName: databaseName\n });\n };\n\n onSaveEmuDatabase = () => {\n const databasePayload = this.createDatabasePayload(\n \"emu\",\n this.state.newEmuDatabaseName,\n this.state.selectedEmuDatabaseId || this.findDefaultDatabaseId(),\n this.state.selectedEmuDataCountryNumericCode,\n this.state.emuData.map(({ startYear, endYear, ...rest }) => ({\n ...rest,\n year: startYear\n }))\n );\n\n api.saveDatabase(databasePayload, this.signal.token).then(response => {\n const { id } = response.data;\n\n const databases = {\n ...this.state.databases,\n [id]: this.createDatabase(databasePayload)\n };\n\n this.setStateSafely({\n databases,\n notificationVariant: \"success\",\n notificationOpen: true,\n notificationMessage: this.props.t(\n 'Database \"{{databaseName}}\" was saved',\n {\n databaseName: databasePayload.name\n }\n )\n });\n });\n };\n\n onCloseNotification = () => {\n this.setStateSafely({\n notificationVariant: undefined,\n notificationOpen: false,\n notificationMessage: undefined\n });\n };\n\n componentDidMount() {\n api.fetchDatabases(this.signal.token).then(response => {\n if (!response) {\n return;\n }\n\n const databases = normalizeDatabases(response.data);\n\n this.setStateSafely({\n databases: databases,\n defaultCountries: getCountries(\n databases,\n findDefaultDatabaseId(databases)\n )\n });\n });\n }\n\n componentWillUnmount() {\n this.unmounting = true;\n this.signal.cancel();\n }\n\n render() {\n return (\n <PrepareData\n match={this.props.match}\n databases={this.state.databases}\n surveyDatabaseCountries={this.getCountries(\n this.state.selectedSurveyDatabaseId\n )}\n selectedSurveyDatabaseId={this.state.selectedSurveyDatabaseId}\n selectedSurveyDataCountryNumericCode={\n this.state.selectedSurveyDataCountryNumericCode\n }\n surveyData={this.state.surveyData}\n newSurveyDatabaseName={this.state.newSurveyDatabaseName}\n populationDatabaseCountries={this.getCountries(\n this.state.selectedPopulationDatabaseId\n )}\n selectedPopulationDatabaseId={this.state.selectedPopulationDatabaseId}\n selectedPopulationDataCountryNumericCode={\n this.state.selectedPopulationDataCountryNumericCode\n }\n populationData={this.state.populationData}\n newPopulationDatabaseName={this.state.newPopulationDatabaseName}\n emuDatabaseCountries={this.getCountries(\n this.state.selectedEmuDatabaseId || this.findDefaultDatabaseId()\n )}\n selectedEmuDatabaseId={this.state.selectedEmuDatabaseId}\n selectedEmuDataCountryNumericCode={\n this.state.selectedEmuDataCountryNumericCode\n }\n emuData={this.state.emuData}\n newEmuDatabaseName={this.state.newEmuDatabaseName}\n notificationVariant={this.state.notificationVariant}\n notificationOpen={this.state.notificationOpen}\n notificationMessage={this.state.notificationMessage}\n onSelectSurveyDatabase={this.onSelectSurveyDatabase}\n onSelectSurveyDataCountry={this.onSelectSurveyDataCountry}\n onLoadCountrySurveyData={this.onLoadCountrySurveyData}\n onAddNewSurveyItem={this.onAddNewSurveyItem}\n onEditSurveyItem={this.onEditSurveyItem}\n onDeleteSurveyItem={this.onDeleteSurveyItem}\n onClearSurveyData={this.onClearSurveyData}\n onChangeSurveyDatabaseName={this.onChangeSurveyDatabaseName}\n onSaveSurveyDatabase={this.onSaveSurveyDatabase}\n onSelectPopulationDatabase={this.onSelectPopulationDatabase}\n onSelectPopulationDataCountry={this.onSelectPopulationDataCountry}\n onLoadCountryPopulationData={this.onLoadCountryPopulationData}\n onAddNewPopulationItem={this.onAddNewPopulationItem}\n onEditPopulationItem={this.onEditPopulationItem}\n onDeletePopulationItem={this.onDeletePopulationItem}\n onClearPopulationData={this.onClearPopulationData}\n onChangePopulationDatabaseName={this.onChangePopulationDatabaseName}\n onSavePopulationDatabase={this.onSavePopulationDatabase}\n onSelectEmuDatabase={this.onSelectEmuDatabase}\n onSelectEmuDataCountry={this.onSelectEmuDataCountry}\n onLoadCountryEmuData={this.onLoadCountryEmuData}\n onAddNewEmuItem={this.onAddNewEmuItem}\n onEditEmuItem={this.onEditEmuItem}\n onDeleteEmuItem={this.onDeleteEmuItem}\n onClearEmuData={this.onClearEmuData}\n onChangeEmuDatabaseName={this.onChangeEmuDatabaseName}\n onSaveEmuDatabase={this.onSaveEmuDatabase}\n onCloseNotification={this.onCloseNotification}\n />\n );\n }\n}\n\nexport default withTranslation()(withErrorBoundary(PrepareDataContainer));\n","import React from \"react\";\nimport * as PropTypes from \"prop-types\";\nimport { formatDateTime } from \"../utilities\";\nimport { Link } from \"react-router-dom\";\nimport { withStyles } from \"@material-ui/core/styles\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport Table from \"@material-ui/core/Table\";\nimport TableBody from \"@material-ui/core/TableBody\";\nimport TableCell from \"@material-ui/core/TableCell\";\nimport TableHead from \"@material-ui/core/TableHead\";\nimport TableRow from \"@material-ui/core/TableRow\";\nimport Tooltip from \"@material-ui/core/Tooltip\";\nimport HourglassFullIcon from \"@material-ui/icons/HourglassFull\";\nimport HourglassEmptyIcon from \"@material-ui/icons/HourglassEmpty\";\nimport InfoIcon from \"@material-ui/icons/Info\";\nimport { withTranslation } from \"react-i18next\";\nimport Loading from \"./Loading\";\nimport Notification from \"./Notification\";\n\nconst styles = {\n button: {\n marginTop: 20\n },\n failed: {\n color: \"red\"\n },\n note: {\n marginBottom: 0\n },\n succeeded: {\n color: \"green\"\n },\n table: {\n width: \"initial\"\n }\n};\n\nconst RunHistory = ({ t, ...rest }) => (\n <Loading loading={rest.loadingData} message={t(\"Loading runs...\")}>\n <p className={rest.classes.note}>\n {t(\"The run history will refresh automatically.\")}\n </p>\n\n <Table className={rest.classes.table}>\n <TableHead>\n <TableRow>\n <TableCell>{t(\"Run name\")}</TableCell>\n <TableCell>{t(\"Started at\")}</TableCell>\n <TableCell />\n <TableCell />\n </TableRow>\n </TableHead>\n\n <TableBody>\n {rest.runs\n .sort((a, b) => b.startedAt - a.startedAt)\n .map(run => (\n <TableRow key={run.name}>\n <TableCell>\n {run.completed && !run.failed ? (\n <Tooltip title={t(\"Load run\")}>\n <Link to={`/viewrun/survey?run=${run.id}`}>{run.name}</Link>\n </Tooltip>\n ) : (\n <span>{run.name}</span>\n )}\n </TableCell>\n <TableCell>{formatDateTime(run.startedAt)}</TableCell>\n <TableCell>\n <Tooltip\n title={\n run.completed\n ? !run.failed\n ? t(\"Run has completed\")\n : t(\"Run failed\")\n : t(\"Run is in progress\")\n }\n >\n {run.completed ? (\n <HourglassFullIcon\n className={\n !run.failed\n ? rest.classes.succeeded\n : rest.classes.failed\n }\n />\n ) : (\n <HourglassEmptyIcon />\n )}\n </Tooltip>\n </TableCell>\n <TableCell>\n <IconButton\n onClick={() => {\n rest.onDownloadRunLog(run.id);\n }}\n >\n <Tooltip title={t(\"Log\")}>\n <InfoIcon />\n </Tooltip>\n </IconButton>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n\n <Notification\n variant={rest.notificationVariant}\n open={rest.notificationOpen}\n message={rest.notificationMessage}\n onClose={rest.onCloseNotification}\n />\n </Loading>\n);\n\nRunHistory.propTypes = {\n loadingData: PropTypes.bool,\n runs: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.string.isRequired,\n name: PropTypes.string.isRequired,\n startedAt: PropTypes.instanceOf(Date).isRequired,\n completed: PropTypes.bool.isRequired\n })\n ),\n notificationVariant: PropTypes.string,\n notificationOpen: PropTypes.bool,\n notificationMessage: PropTypes.string,\n onDownloadRunLog: PropTypes.func.isRequired,\n onCloseNotification: PropTypes.func.isRequired\n};\n\nRunHistory.defaultProps = {\n loadingData: false,\n runs: [],\n notificationOpen: false\n};\n\nexport default withTranslation()(withStyles(styles)(RunHistory));\n","import React, { Component } from \"react\";\nimport { createSlug } from \"../utilities\";\nimport { normalizeRuns } from \"../data\";\nimport * as api from \"../api/api\";\nimport fileDownload from \"js-file-download\";\nimport { withErrorBoundary } from \"../errors\";\nimport { withTranslation } from \"react-i18next\";\nimport RunHistory from \"../components/RunHistory\";\n\nconst createInitialState = () => ({});\n\nconst getNewlyCompletedRunIds = (previousRuns, currentRuns) => {\n if (!previousRuns) {\n return [];\n }\n\n const previouslyCompletedRunIds = new Set(\n (previousRuns || []).filter(run => run.completed).map(run => run.id)\n );\n\n const currentlyCompletedRunIds = (currentRuns || [])\n .filter(run => run.completed)\n .map(run => run.id);\n\n return currentlyCompletedRunIds.filter(\n runId => !previouslyCompletedRunIds.has(runId)\n );\n};\n\nclass RunHistoryContainer extends Component {\n constructor(props) {\n super(props);\n\n this.signal = api.getSignal();\n\n this.state = createInitialState();\n }\n\n setStateSafely = (state, callback) => {\n if (!this.unmounting) {\n this.setState(state, callback);\n }\n };\n\n fetchRuns = refreshing => {\n this.setStateSafely({\n loadingData: !refreshing\n });\n\n api\n .fetchRuns(true, true, this.signal.token)\n .then(response => {\n if (!response) {\n this.runsHash = undefined;\n\n return;\n }\n\n const runs = Object.entries(normalizeRuns(response.data)).map(\n ([id, run]) => ({\n id: id,\n name: run.name,\n startedAt: run.startedAt,\n completed: run.completed,\n failed: run.failed\n })\n );\n\n const newlyCompletedRunIds = getNewlyCompletedRunIds(\n this.state.runs,\n runs\n );\n\n const notification = newlyCompletedRunIds.length && {\n notificationVariant: \"success\",\n notificationOpen: true,\n notificationMessage: this.props.t(\n \"{{runCount}} run(s) recently completed\",\n {\n runCount: newlyCompletedRunIds.length\n }\n )\n };\n\n this.setStateSafely({\n runs: Object.entries(normalizeRuns(response.data)).map(\n ([id, run]) => ({\n id: id,\n name: run.name,\n startedAt: run.startedAt,\n completed: run.completed,\n failed: run.failed\n })\n ),\n ...(notification || {})\n });\n })\n .finally(() => {\n this.setStateSafely({\n loadingData: false\n });\n\n this.refreshTimer = window.setTimeout(\n () => this.fetchRuns(true),\n 60000\n );\n });\n };\n\n onDownloadRunLog = runId => {\n api.fetchRunLog(runId, this.signal.token).then(response => {\n if (!response) {\n return;\n }\n\n const run = this.state.runs.find(run => run.id === runId);\n\n if (run) {\n fileDownload(response.data, createSlug(run.name, \"run.log\"));\n }\n });\n };\n\n onCloseNotification = () => {\n this.setStateSafely({\n notificationOpen: false\n });\n };\n\n componentDidMount() {\n this.fetchRuns(false);\n }\n\n componentWillUnmount() {\n this.unmounting = true;\n\n if (this.refreshTimer) {\n window.clearTimeout(this.refreshTimer);\n }\n\n this.signal.cancel();\n }\n\n render() {\n return (\n <RunHistory\n loadingData={this.state.loadingData}\n runs={this.state.runs}\n notificationVariant={this.state.notificationVariant}\n notificationOpen={this.state.notificationOpen}\n notificationMessage={this.state.notificationMessage}\n onDownloadRunLog={this.onDownloadRunLog}\n onCloseNotification={this.onCloseNotification}\n />\n );\n }\n}\n\nexport default withTranslation()(withErrorBoundary(RunHistoryContainer));\n","import React from \"react\";\nimport * as PropTypes from \"prop-types\";\nimport { withStyles } from \"@material-ui/core/styles\";\nimport classNames from \"classnames\";\nimport Button from \"@material-ui/core/Button\";\nimport InputLabel from \"@material-ui/core/InputLabel\";\nimport LinearProgress from \"@material-ui/core/LinearProgress\";\nimport { withTranslation } from \"react-i18next\";\n\nconst styles = {\n additionalButton: {\n marginTop: 10\n },\n button: {\n width: \"100%\"\n },\n externalDatabasePath: {\n marginTop: 10\n },\n fileInput: {\n display: \"none\"\n },\n inputLabel: {\n fontSize: \"75%\"\n }\n};\n\nconst StartRunDatabaseUploader = ({ t, ...rest }) => (\n <div>\n {!rest.databaseName ? (\n <div>\n <input\n id=\"external-database-file\"\n type=\"file\"\n accept=\".csv\"\n className={rest.classes.fileInput}\n onChange={e => rest.onSelectDatabase(e.target.files[0])}\n />\n <label htmlFor=\"external-database-file\">\n <Button\n variant=\"contained\"\n component=\"span\"\n className={rest.classes.button}\n >\n {t(\"Choose database\")}\n </Button>\n </label>\n </div>\n ) : (\n undefined\n )}\n\n {rest.databaseName && !rest.uploadingDatabase ? (\n <div>\n <Button\n variant=\"contained\"\n color=\"primary\"\n className={rest.classes.button}\n onClick={rest.onUpload}\n >\n {t(\"Upload database\")}\n </Button>\n\n <Button\n variant=\"contained\"\n color=\"secondary\"\n className={classNames(\n rest.classes.button,\n rest.classes.additionalButton\n )}\n onClick={rest.onCancelUpload}\n >\n {t(\"Cancel\")}\n </Button>\n </div>\n ) : (\n undefined\n )}\n\n {rest.uploadingDatabase ? (\n <div>\n <LinearProgress\n variant=\"determinate\"\n value={rest.databaseUploadProgress}\n />\n </div>\n ) : (\n undefined\n )}\n\n <div className={rest.classes.externalDatabasePath}>\n <InputLabel className={rest.classes.inputLabel}>\n {t(\"Database to upload\")}\n </InputLabel>\n\n <div>{rest.databaseName || t(\"No database chosen\")}</div>\n </div>\n </div>\n);\n\nStartRunDatabaseUploader.propTypes = {\n databaseName: PropTypes.string,\n uploadingDatabase: PropTypes.bool,\n databaseUploadProgress: PropTypes.number,\n onSelectDatabase: PropTypes.func.isRequired,\n onUpload: PropTypes.func.isRequired,\n onCancelUpload: PropTypes.func.isRequired\n};\n\nStartRunDatabaseUploader.defaultProps = {\n uploadingDatabase: false,\n databaseUploadProgress: 0\n};\n\nexport default withTranslation()(withStyles(styles)(StartRunDatabaseUploader));\n","import React, { Component } from \"react\";\nimport * as PropTypes from \"prop-types\";\nimport { databasePropType, databaseTypePropType } from \"../../propTypes\";\nimport { withStyles } from \"@material-ui/core/styles\";\nimport FormControl from \"@material-ui/core/FormControl\";\nimport FormControlLabel from \"@material-ui/core/FormControlLabel\";\nimport InputLabel from \"@material-ui/core/InputLabel\";\nimport Radio from \"@material-ui/core/Radio\";\nimport RadioGroup from \"@material-ui/core/RadioGroup\";\nimport Select from \"react-select\";\nimport { withTranslation } from \"react-i18next\";\nimport DatabaseUploader from \"./StartRunDatabaseUploader\";\n\nconst styles = {\n dataTypeSpecificComponents: {\n margin: \"10px 0\"\n },\n inputLabel: {\n fontSize: \"75%\"\n },\n radio: {\n padding: \"2px 12px\"\n },\n select: {\n marginTop: 10\n }\n};\n\nclass StartRunDatabasePicker extends Component {\n getDatabaseTypeSpecificComponents = () => {\n switch (this.props.databaseType) {\n case \"default\":\n const defaultDatabases = this.props.defaultDatabases.map(\n ({ id, name }) => ({\n value: id,\n label: name\n })\n );\n\n return (\n <div>\n <InputLabel className={this.props.classes.inputLabel}>\n {this.props.t(\"Choose default database\")}\n </InputLabel>\n\n <Select\n placeholder={this.props.t(\"Select database...\")}\n options={defaultDatabases}\n value={defaultDatabases.filter(\n ({ value }) => value === this.props.selectedDatabaseId\n )}\n noOptionsMessage={() =>\n this.props.t(\"No default databases available\")\n }\n className={this.props.classes.select}\n onChange={({ value }) => this.props.onSelectDatabase(value)}\n />\n </div>\n );\n\n case \"custom\":\n const customDatabases = this.props.customDatabases.map(\n ({ id, name }) => ({\n value: id,\n label: name\n })\n );\n\n return (\n <div>\n <InputLabel className={this.props.classes.inputLabel}>\n Choose custom database\n </InputLabel>\n\n <Select\n placeholder={this.props.t(\"Select database...\")}\n options={customDatabases}\n value={customDatabases.filter(\n ({ value }) => value === this.props.selectedDatabaseId\n )}\n noOptionsMessage={() =>\n this.props.t(\"No custom databases available\")\n }\n className={this.props.classes.select}\n onChange={({ value }) => this.props.onSelectDatabase(value)}\n />\n </div>\n );\n\n case \"external\":\n return (\n <DatabaseUploader\n databaseName={this.props.uploadedDatabaseName}\n uploadingDatabase={this.props.uploadingDatabase}\n databaseUploadProgress={this.props.databaseUploadProgress}\n onSelectDatabase={this.props.onSelectDatabaseFile}\n onUpload={this.props.onUploadDatabase}\n onCancelUpload={this.props.onCancelDatabaseUpload}\n />\n );\n\n default:\n console.error(`${this.props.databaseType} is an unknown database type`);\n\n break;\n }\n };\n\n render() {\n return (\n <div>\n <FormControl component=\"fieldset\">\n <RadioGroup\n aria-label=\"Database type\"\n value={this.props.databaseType}\n onChange={(_, value) => this.props.onChangeDatabaseType(value)}\n >\n {this.props.variant !== \"emu\" && (\n <FormControlLabel\n value=\"default\"\n control={<Radio className={this.props.classes.radio} />}\n label={this.props.t(\"Default\")}\n />\n )}\n <FormControlLabel\n value=\"custom\"\n control={<Radio className={this.props.classes.radio} />}\n label={this.props.t(\"Custom\")}\n />\n <FormControlLabel\n value=\"external\"\n control={<Radio className={this.props.classes.radio} />}\n label={this.props.t(\"External\")}\n />\n </RadioGroup>\n </FormControl>\n\n <div className={this.props.classes.dataTypeSpecificComponents}>\n {this.getDatabaseTypeSpecificComponents()}\n </div>\n </div>\n );\n }\n}\n\nStartRunDatabasePicker.propTypes = {\n variant: PropTypes.oneOf([\"default\", \"emu\"]),\n databaseType: databaseTypePropType,\n defaultDatabases: PropTypes.arrayOf(databasePropType),\n customDatabases: PropTypes.arrayOf(databasePropType).isRequired,\n selectedDatabaseId: PropTypes.string,\n uploadedDatabaseName: PropTypes.string,\n uploadingDatabase: PropTypes.bool,\n databaseUploadProgress: PropTypes.number,\n onChangeDatabaseType: PropTypes.func.isRequired,\n onSelectDatabase: PropTypes.func.isRequired,\n onSelectDatabaseFile: PropTypes.func.isRequired,\n onUploadDatabase: PropTypes.func.isRequired,\n onCancelDatabaseUpload: PropTypes.func.isRequired\n};\n\nStartRunDatabasePicker.defaultProps = {\n variant: \"default\",\n databaseType: \"default\",\n defaultDatabases: [],\n uploadingDatabase: false\n};\n\nexport default withTranslation()(withStyles(styles)(StartRunDatabasePicker));\n","import React from \"react\";\nimport * as PropTypes from \"prop-types\";\nimport { databaseTypePropType, periodPropType } from \"../../propTypes\";\nimport { withStyles } from \"@material-ui/core/styles\";\nimport Button from \"@material-ui/core/Button\";\nimport Divider from \"@material-ui/core/Divider\";\nimport InputLabel from \"@material-ui/core/InputLabel\";\nimport LinearProgress from \"@material-ui/core/LinearProgress\";\nimport TextField from \"@material-ui/core/TextField\";\nimport Select from \"react-select\";\nimport { useTranslation } from \"react-i18next\";\nimport DatabasePicker from \"./StartRunDatabasePicker\";\nimport PeriodSelector from \"../PeriodSelector/PeriodSelector\";\nimport ProgressButton from \"../ProgressButton\";\n\nconst styles = {\n actionButton: {\n display: \"inline-flex\",\n minHeight: 36,\n marginTop: 10\n },\n divider: {\n margin: \"10px 0\"\n },\n drawerItem: {\n flexShrink: 0\n },\n instruction: {\n margin: \"10px 0\",\n fontWeight: \"bold\"\n },\n periodSelector: {\n margin: \"40px 10px\"\n },\n periodSelectorGroup: {\n marginTop: 10,\n zIndex: -1\n },\n periodSelectorLabel: {\n fontSize: \"75%\"\n },\n progress: {\n margin: \"15px 0 5px\"\n },\n select: {\n marginBottom: 10\n }\n};\n\nconst groupDatabases = databases => {\n const denormalizedDatabases = Object.entries(databases).map(\n ([id, database]) => ({\n id,\n ...database\n })\n );\n\n return {\n surveyDatabases: denormalizedDatabases.filter(\n database => database.type === \"survey\" && database.isGlobal\n ),\n customSurveyDatabases: denormalizedDatabases.filter(\n database => database.type === \"survey\" && !database.isGlobal\n ),\n populationDatabases: denormalizedDatabases.filter(\n database => database.type === \"population\" && database.isGlobal\n ),\n customPopulationDatabases: denormalizedDatabases.filter(\n database => database.type === \"population\" && !database.isGlobal\n ),\n emuDatabases: denormalizedDatabases.filter(\n database => database.type === \"emu\" && database.isGlobal\n ),\n customEmuDatabases: denormalizedDatabases.filter(\n database => database.type === \"emu\" && !database.isGlobal\n )\n };\n};\n\nconst StartRunDrawerContent = props => {\n const {\n surveyDatabases,\n customSurveyDatabases,\n populationDatabases,\n customPopulationDatabases,\n customEmuDatabases\n } = groupDatabases(props.databases);\n\n const countries = Object.entries(props.countries || {})\n .map(([numericCode, country]) => ({\n value: parseInt(numericCode, 10),\n label: country.name\n }))\n .sort((a, b) => a.label.localeCompare(b.label));\n\n const regions = props.regions.map((region, index) => ({\n value: -index - 1,\n label: region\n }));\n\n const selectedRegion = regions.find(\n region => region.label === props.selectedRegion\n );\n\n const selectedRegionValue = selectedRegion && selectedRegion.value;\n\n const countriesAndRegions = countries.concat(regions);\n\n const { t } = useTranslation();\n\n return (\n <>\n {props.loadingData && (\n <div className={props.classes.progress}>\n <LinearProgress />\n </div>\n )}\n\n <div className={props.classes.instruction}>\n 1a. {t(\"Select survey database\")}\n </div>\n\n <DatabasePicker\n databaseType={props.surveyDatabaseType}\n defaultDatabases={surveyDatabases}\n customDatabases={customSurveyDatabases}\n selectedDatabaseId={props.selectedSurveyDatabaseId}\n uploadedDatabaseName={props.uploadedSurveyDatabaseName}\n databaseUploadProgress={props.surveyDatabaseUploadProgress}\n uploadingDatabase={props.uploadingSurveyDatabase}\n onChangeDatabaseType={props.onChangeSurveyDatabaseType}\n onSelectDatabase={props.onSelectSurveyDatabase}\n onSelectDatabaseFile={props.onSelectSurveyDatabaseFile}\n onUploadDatabase={props.onUploadSurveyDatabase}\n onCancelDatabaseUpload={props.onCancelSurveyDatabaseUpload}\n />\n\n <Divider className={props.classes.divider} />\n\n <div className={props.classes.instruction}>\n 1b. {t(\"Select population database\")}\n </div>\n\n <DatabasePicker\n databaseType={props.populationDatabaseType}\n defaultDatabases={populationDatabases}\n customDatabases={customPopulationDatabases}\n selectedDatabaseId={props.selectedPopulationDatabaseId}\n uploadedDatabaseName={props.uploadedPopulationDatabaseName}\n databaseUploadProgress={props.populationDatabaseUploadProgress}\n uploadingDatabase={props.uploadingPopulationDatabase}\n onChangeDatabaseType={props.onChangePopulationDatabaseType}\n onSelectDatabase={props.onSelectPopulationDatabase}\n onSelectDatabaseFile={props.onSelectPopulationDatabaseFile}\n onUploadDatabase={props.onUploadPopulationDatabase}\n onCancelDatabaseUpload={props.onCancelPopulationDatabaseUpload}\n />\n\n <Divider className={props.classes.divider} />\n\n <div className={props.classes.instruction}>\n 2. {t(\"Select service statistics\")}\n </div>\n\n <DatabasePicker\n variant=\"emu\"\n databaseType={props.emuDatabaseType}\n customDatabases={[{ id: \"\", name: t(\"None\") }, ...customEmuDatabases]}\n selectedDatabaseId={props.selectedEmuDatabaseId}\n uploadedDatabaseName={props.uploadedEmuDatabaseName}\n databaseUploadProgress={props.emuDatabaseUploadProgress}\n uploadingDatabase={props.uploadingEmuDatabase}\n onChangeDatabaseType={props.onChangeEmuDatabaseType}\n onSelectDatabase={props.onSelectEmuDatabase}\n onSelectDatabaseFile={props.onSelectEmuDatabaseFile}\n onUploadDatabase={props.onUploadEmuDatabase}\n onCancelDatabaseUpload={props.onCancelEmuDatabaseUpload}\n />\n\n <Divider className={props.classes.divider} />\n\n <div className={props.classes.instruction}>\n 3. {t(\"Select country/population\")}\n </div>\n\n <Select\n placeholder={t(\"Select country/population\")}\n options={countriesAndRegions}\n value={countriesAndRegions.filter(\n ({ value }) =>\n value === (selectedRegionValue || props.selectedCountryNumericCode)\n )}\n noOptionsMessage={() => \"No countries available\"}\n className={props.classes.select}\n onChange={({ value }) => {\n if (value >= 0) {\n props.onSelectCountry(value);\n } else {\n props.onSelectRegion(\n regions.find(region => region.value === value).label\n );\n }\n }}\n />\n\n <Divider className={props.classes.divider} />\n\n <div className={props.classes.instruction}>\n 4. {t(\"Input run settings\")}\n </div>\n\n <TextField\n label={t(\"Run name\")}\n placeholder={t(\"Enter run name...\")}\n InputLabelProps={{\n shrink: true,\n required: true\n }}\n value={props.runName || \"\"}\n className={props.classes.drawerItem}\n onChange={e => {\n props.onRunNameChanged(e.target.value);\n }}\n />\n\n <div className={props.classes.periodSelectorGroup}>\n <div className=\"hidden\">\n <InputLabel className={props.classes.periodSelectorLabel}>\n {t(\"Estimate years\")}\n </InputLabel>\n\n <div className={props.classes.periodSelector}>\n <PeriodSelector\n period={props.period}\n onChange={props.onChangePeriod}\n />\n </div>\n </div>\n </div>\n\n <Divider className={props.classes.divider} />\n\n <ProgressButton\n variant=\"contained\"\n disabled={!(props.selectedCountryNumericCode || props.selectedRegion)}\n loading={props.loadingTables}\n className={props.classes.actionButton}\n onClick={props.onReviewData}\n >\n {t(\"Review data\")}\n </ProgressButton>\n\n <Button\n variant=\"contained\"\n color=\"primary\"\n disabled={\n !(props.selectedCountryNumericCode || props.selectedRegion) ||\n !props.runName\n }\n className={props.classes.actionButton}\n onClick={props.onStartRun}\n >\n {t(\"Start run\")}\n </Button>\n </>\n );\n};\n\nStartRunDrawerContent.propTypes = {\n loadingData: PropTypes.bool,\n databases: PropTypes.objectOf(\n PropTypes.shape({\n name: PropTypes.string.isRequired\n })\n ),\n surveyDatabaseType: databaseTypePropType,\n selectedSurveyDatabaseId: PropTypes.string,\n uploadedSurveyDatabaseName: PropTypes.string,\n uploadingSurveyDatabase: PropTypes.bool,\n surveyDatabaseUploadProgress: PropTypes.number,\n populationDatabaseType: databaseTypePropType,\n selectedPopulationDatabaseId: PropTypes.string,\n uploadedPopulationDatabaseName: PropTypes.string,\n uploadingPopulationDatabase: PropTypes.bool,\n populationDatabaseUploadProgress: PropTypes.number,\n emuDatabaseType: databaseTypePropType,\n selectedEmuDatabaseId: PropTypes.string,\n uploadedEmuDatabaseName: PropTypes.string,\n uploadingEmuDatabase: PropTypes.bool,\n emuDatabaseUploadProgress: PropTypes.number,\n countries: PropTypes.objectOf(\n PropTypes.shape({\n name: PropTypes.string.isRequired\n })\n ),\n selectedCountryNumericCode: PropTypes.number,\n regions: PropTypes.arrayOf(PropTypes.string),\n selectedRegion: PropTypes.string,\n runName: PropTypes.string,\n period: periodPropType,\n loadingTables: PropTypes.bool,\n onChangeSurveyDatabaseType: PropTypes.func.isRequired,\n onSelectSurveyDatabase: PropTypes.func.isRequired,\n onSelectSurveyDatabaseFile: PropTypes.func.isRequired,\n onUploadSurveyDatabase: PropTypes.func.isRequired,\n onCancelSurveyDatabaseUpload: PropTypes.func.isRequired,\n onChangePopulationDatabaseType: PropTypes.func.isRequired,\n onSelectPopulationDatabase: PropTypes.func.isRequired,\n onSelectPopulationDatabaseFile: PropTypes.func.isRequired,\n onUploadPopulationDatabase: PropTypes.func.isRequired,\n onCancelPopulationDatabaseUpload: PropTypes.func.isRequired,\n onChangeEmuDatabaseType: PropTypes.func.isRequired,\n onSelectEmuDatabase: PropTypes.func.isRequired,\n onSelectEmuDatabaseFile: PropTypes.func.isRequired,\n onUploadEmuDatabase: PropTypes.func.isRequired,\n onCancelEmuDatabaseUpload: PropTypes.func.isRequired,\n onSelectCountry: PropTypes.func.isRequired,\n onSelectRegion: PropTypes.func.isRequired,\n onRunNameChanged: PropTypes.func.isRequired,\n onChangePeriod: PropTypes.func.isRequired,\n onReviewData: PropTypes.func.isRequired,\n onStartRun: PropTypes.func.isRequired\n};\n\nStartRunDrawerContent.defaultProps = {\n loadingData: false,\n databases: {},\n surveyDatabaseType: \"default\",\n uploadingSurveyDatabase: false,\n populationDatabaseType: \"default\",\n uploadingPopulationDatabase: false,\n emuDatabaseType: \"default\",\n uploadingEmuDatabase: false,\n regions: [],\n loadingTables: false\n};\n\nexport default withStyles(styles)(StartRunDrawerContent);\n","import React from \"react\";\nimport * as PropTypes from \"prop-types\";\nimport { formatNumericCell } from \"../utilities\";\nimport { AgGridColumn, AgGridReact } from \"ag-grid-react\";\nimport \"ag-grid-enterprise\";\nimport \"ag-grid-community/dist/styles/ag-grid.css\";\nimport \"ag-grid-community/dist/styles/ag-theme-material.css\";\nimport { withTranslation } from \"react-i18next\";\nimport { translateGridText } from \"../i18n\";\n\nconst EmuData = ({ t, ...rest }) => (\n <div className=\"ag-theme-material\">\n <AgGridReact\n domLayout=\"autoHeight\"\n defaultColDef={{\n sortable: true,\n filter: true\n }}\n pagination={true}\n paginationPageSize={10}\n suppressColumnVirtualisation={true}\n suppressCellSelection={true}\n overlayNoRowsTemplate=\"<span />\"\n localeTextFunc={translateGridText}\n rowData={rest.data}\n onGridReady={params => {\n params.columnApi.autoSizeColumns(\n params.columnApi.getAllColumns().map(column => column.colId)\n );\n }}\n >\n <AgGridColumn headerName={t(\"Region code\")} field=\"regionCode\" />\n <AgGridColumn\n headerName={t(\"Year\")}\n field=\"startYear\"\n type=\"numericColumn\"\n filter=\"agNumberColumnFilter\"\n />\n <AgGridColumn\n headerName={t(\"EMU\")}\n field=\"emu\"\n type=\"numericColumn\"\n filter=\"agNumberColumnFilter\"\n valueFormatter={params => formatNumericCell(params.value, 3)}\n />\n <AgGridColumn\n headerName={t(\"Service statistic type\")}\n field=\"serviceStatisticType\"\n />\n <AgGridColumn />\n <AgGridColumn />\n </AgGridReact>\n </div>\n);\n\nEmuData.propTypes = {\n data: PropTypes.array\n};\n\nEmuData.defaultProps = {\n data: []\n};\n\nexport default withTranslation()(EmuData);\n","import React from \"react\";\nimport * as PropTypes from \"prop-types\";\nimport { populationDatumPropType } from \"../propTypes\";\nimport { formatLogicalCell } from \"../utilities\";\nimport { AgGridColumn, AgGridReact } from \"ag-grid-react\";\nimport \"ag-grid-enterprise\";\nimport \"ag-grid-community/dist/styles/ag-grid.css\";\nimport \"ag-grid-community/dist/styles/ag-theme-material.css\";\nimport { withTranslation } from \"react-i18next\";\nimport { translateGridText } from \"../i18n\";\n\nconst PopulationData = ({ t, ...rest }) => (\n <div className=\"ag-theme-material\">\n <AgGridReact\n domLayout=\"autoHeight\"\n defaultColDef={{\n sortable: true,\n filter: true\n }}\n pagination={true}\n paginationPageSize={10}\n suppressColumnVirtualisation={true}\n suppressCellSelection={true}\n overlayNoRowsTemplate=\"<span />\"\n localeTextFunc={translateGridText}\n rowData={rest.data}\n onGridReady={params => {\n params.columnApi.autoSizeColumns(\n params.columnApi.getAllColumns().map(column => column.colId)\n );\n }}\n >\n <AgGridColumn headerName={t(\"Region code\")} field=\"regionCode\" />\n <AgGridColumn\n headerName={t(\"In union?\")}\n field=\"isInUnion\"\n valueFormatter={params => formatLogicalCell(params.value)}\n />\n <AgGridColumn headerName=\"Age\" field=\"ageRange\" />\n <AgGridColumn\n headerName={t(\"Year\")}\n field=\"midYear\"\n type=\"numericColumn\"\n filter=\"agNumberColumnFilter\"\n />\n <AgGridColumn\n headerName={t(\"Population\")}\n field=\"population\"\n type=\"numericColumn\"\n filter=\"agNumberColumnFilter\"\n />\n </AgGridReact>\n </div>\n);\n\nPopulationData.propTypes = {\n data: PropTypes.arrayOf(populationDatumPropType)\n};\n\nPopulationData.defaultProps = {\n data: []\n};\n\nexport default withTranslation()(PopulationData);\n","import React from \"react\";\nimport * as PropTypes from \"prop-types\";\nimport { surveyDatumPropType } from \"../propTypes\";\nimport { formatLogicalCell, formatNumericCell } from \"../utilities\";\nimport { AgGridColumn, AgGridReact } from \"ag-grid-react\";\nimport \"ag-grid-enterprise\";\nimport \"ag-grid-community/dist/styles/ag-grid.css\";\nimport \"ag-grid-community/dist/styles/ag-theme-material.css\";\nimport { useTranslation } from \"react-i18next\";\nimport { translateGridText } from \"../i18n\";\n\nconst SurveyData = props => {\n const { t } = useTranslation();\n\n return (\n <div className=\"ag-theme-material\">\n <AgGridReact\n domLayout=\"autoHeight\"\n defaultColDef={{\n sortable: true,\n filter: true\n }}\n pagination={true}\n paginationPageSize={10}\n suppressColumnVirtualisation={true}\n suppressCellSelection={true}\n overlayNoRowsTemplate=\"<span />\"\n localeTextFunc={translateGridText}\n rowData={props.data}\n onGridReady={params => {\n params.columnApi.autoSizeColumns(\n params.columnApi.getAllColumns().map(column => column.colId)\n );\n }}\n >\n <AgGridColumn headerName={t(\"Region code\")} field=\"regionCode\" />\n <AgGridColumn\n headerName={t(\"Start year\")}\n field=\"startDate\"\n type=\"numericColumn\"\n filter=\"agNumberColumnFilter\"\n valueFormatter={params => formatNumericCell(params.value, 2)}\n />\n <AgGridColumn\n headerName={t(\"End year\")}\n field=\"endDate\"\n type=\"numericColumn\"\n filter=\"agNumberColumnFilter\"\n valueFormatter={params => formatNumericCell(params.value, 2)}\n />\n <AgGridColumn\n headerName={t(\"In union?\")}\n field=\"isInUnion\"\n valueFormatter={params => formatLogicalCell(params.value)}\n />\n <AgGridColumn headerName={t(\"Age\")} field=\"ageRange\" />\n <AgGridColumn\n headerName={t(\"Data series/type\")}\n field=\"dataSeriesType\"\n />\n <AgGridColumn\n headerName={t(\"Population\")}\n field=\"groupTypeRelativeToBaseline\"\n headerTooltip={t(\"Group type relative to baseline\")}\n />\n <AgGridColumn\n headerName={t(\"Modern contraceptive use\")}\n field=\"contraceptiveUseModern\"\n type=\"numericColumn\"\n filter=\"agNumberColumnFilter\"\n valueFormatter={params => formatNumericCell(params.value, 3)}\n headerTooltip={t(\"Contraceptive use (modern)\")}\n />\n <AgGridColumn\n headerName={t(\"Traditional contraceptive use\")}\n field=\"contraceptiveUseTraditional\"\n type=\"numericColumn\"\n filter=\"agNumberColumnFilter\"\n valueFormatter={params => formatNumericCell(params.value, 3)}\n headerTooltip={t(\"Contraceptive use (traditional)\")}\n />\n <AgGridColumn\n headerName={t(\"All contraceptive use\")}\n field=\"contraceptiveUseAny\"\n type=\"numericColumn\"\n filter=\"agNumberColumnFilter\"\n valueFormatter={params => formatNumericCell(params.value, 3)}\n headerTooltip={t(\"Contraceptive use (all)\")}\n />\n <AgGridColumn\n headerName={t(\"Modern methods unmet need\")}\n field=\"unmetNeedModern\"\n type=\"numericColumn\"\n filter=\"agNumberColumnFilter\"\n valueFormatter={params => formatNumericCell(params.value, 3)}\n headerTooltip={t(\"Unmet need for modern methods\")}\n />\n <AgGridColumn\n headerName={t(\"Any method unmet need\")}\n field=\"unmetNeedAny\"\n type=\"numericColumn\"\n filter=\"agNumberColumnFilter\"\n valueFormatter={params => formatNumericCell(params.value, 3)}\n headerTooltip={t(\"Unmet need for any method\")}\n />\n <AgGridColumn\n headerName={t(\"Pertaining to methods used since last pregnancy\")}\n field=\"pertainingToMethodsUsedSinceLastPregnancyReason\"\n />\n <AgGridColumn\n headerName={t(\"Geographical bias\")}\n field=\"geographicalRegionBiasReason\"\n />\n <AgGridColumn\n headerName={t(\"Non-pregnant and other positive biases\")}\n field=\"nonPregnantAndOtherPositiveBiasesReason\"\n />\n <AgGridColumn headerName={t(\"Age bias\")} field=\"ageGroupBias\" />\n <AgGridColumn\n headerName={t(\"Modern method bias\")}\n field=\"modernMethodBias\"\n />\n <AgGridColumn\n headerName={t(\"Traditional method bias\")}\n field=\"traditionalMethodBiasReason\"\n />\n <AgGridColumn\n headerName={t(\"Absence of probing question bias?\")}\n field=\"hasAbsenceOfProbingQuestionsBias\"\n valueFormatter={params => formatLogicalCell(params.value)}\n />\n <AgGridColumn\n headerName={t(\"SE log-ratio modern/no use\")}\n field=\"seLogRModernNoUse\"\n type=\"numericColumn\"\n filter=\"agNumberColumnFilter\"\n valueFormatter={params => formatNumericCell(params.value, 2)}\n headerTooltip={t(\n \"Sampling error for the log-ratio of modern contraceptive method use to no use\"\n )}\n />\n <AgGridColumn\n headerName={t(\"SE log-ratio traditional/no use\")}\n field=\"seLogRTraditionalNoUse\"\n type=\"numericColumn\"\n filter=\"agNumberColumnFilter\"\n valueFormatter={params => formatNumericCell(params.value, 2)}\n headerTooltip={t(\n \"Sampling error for the log-ratio of traditional contraceptive method use to no use\"\n )}\n />\n <AgGridColumn\n headerName={t(\"SE log-ratio unmet/no need\")}\n field=\"seLogRUnmetNoNeed\"\n type=\"numericColumn\"\n filter=\"agNumberColumnFilter\"\n valueFormatter={params => formatNumericCell(params.value, 2)}\n headerTooltip={t(\n \"Sampling error for the log-ratio of unmet need (any method) to no need\"\n )}\n />\n <AgGridColumn\n headerName={t(\"Source ID\")}\n field=\"sourceId\"\n type=\"numericColumn\"\n />\n </AgGridReact>\n </div>\n );\n};\n\nSurveyData.propTypes = {\n data: PropTypes.arrayOf(surveyDatumPropType)\n};\n\nSurveyData.defaultProps = {\n data: []\n};\n\nexport default SurveyData;\n","import React from \"react\";\nimport * as PropTypes from \"prop-types\";\nimport {\n emuDatumPropType,\n populationDatumPropType,\n surveyDatumPropType\n} from \"../../propTypes\";\nimport { Route, Switch, Redirect } from \"react-router-dom\";\nimport { withStyles } from \"@material-ui/core/styles\";\nimport { withTranslation } from \"react-i18next\";\nimport EmuData from \"../EmuData\";\nimport PopulationData from \"../PopulationData\";\nimport NavigationTab from \"../NavigationTab\";\nimport SurveyData from \"../SurveyData\";\nimport Title from \"../Title\";\n\nconst styles = {\n tabPage: {\n margin: 10\n },\n title: {\n marginBottom: 20\n }\n};\n\nconst StartRunMainContent = ({ match, t, ...rest }) => (\n <div>\n <div className={rest.classes.title}>\n <Title title={rest.runTitle} />\n </div>\n\n <NavigationTab to=\"/startrun/survey\">{t(\"Survey data\")}</NavigationTab>\n <NavigationTab to=\"/startrun/population\">\n {t(\"Population data\")}\n </NavigationTab>\n <NavigationTab to=\"/startrun/emu\">{t(\"Service statistics\")}</NavigationTab>\n\n <div className={rest.classes.tabPage}>\n <Switch>\n <Route\n exact\n path={match.path}\n render={() => <Redirect replace to={`${match.path}/survey`} />}\n />\n <Route\n path={`${match.path}/survey`}\n render={() => <SurveyData data={rest.surveyData} />}\n />\n <Route\n path={`${match.path}/population`}\n render={() => <PopulationData data={rest.populationData} />}\n />\n <Route\n path={`${match.path}/emu`}\n render={() => <EmuData data={rest.emuData} />}\n />\n </Switch>\n </div>\n </div>\n);\n\nStartRunMainContent.propTypes = {\n runTitle: PropTypes.string,\n surveyData: PropTypes.arrayOf(surveyDatumPropType),\n populationData: PropTypes.arrayOf(populationDatumPropType),\n emuData: PropTypes.arrayOf(emuDatumPropType)\n};\n\nStartRunMainContent.defaultProps = {\n surveyData: [],\n populationData: [],\n emuData: []\n};\n\nexport default withTranslation()(withStyles(styles)(StartRunMainContent));\n","import React from \"react\";\nimport * as PropTypes from \"prop-types\";\nimport contentWithDrawer from \"../contentWithDrawer\";\nimport DrawerContent from \"./StartRunDrawerContent\";\nimport MainContent from \"./StartRunMainContent\";\nimport Notification from \"../Notification\";\n\nconst Component = contentWithDrawer(MainContent, DrawerContent);\n\nconst StartRun = ({\n notificationVariant,\n notificationOpen,\n notificationMessage,\n onCloseNotification,\n ...rest\n}) => (\n <div>\n <Component {...rest} />\n\n <Notification\n variant={notificationVariant}\n open={notificationOpen}\n message={notificationMessage}\n onClose={onCloseNotification}\n />\n </div>\n);\n\nStartRun.propTypes = {\n notificationVariant: PropTypes.string,\n notificationOpen: PropTypes.bool,\n notificationMessage: PropTypes.string,\n onCloseNotification: PropTypes.func.isRequired\n};\n\nStartRun.defaultProps = {\n notificationOpen: false\n};\n\nexport default StartRun;\n","import React, { Component } from \"react\";\nimport { defaultFirstYear, minimumYear, maximumYear } from \"../constants\";\nimport { getDefaultLastYear } from \"../utilities\";\nimport * as api from \"../api/api\";\nimport {\n filterPopulationData,\n filterSurveyData,\n normalizeDatabases,\n normalizeEmuData,\n normalizePopulationData,\n normalizeSurveyData\n} from \"../data\";\nimport { withErrorBoundary } from \"../errors\";\nimport { withTranslation } from \"react-i18next\";\nimport StartRun from \"../components/StartRun/StartRun\";\n\nconst createInitialState = () => {\n return {\n emuDatabaseType: \"custom\",\n period: {\n firstYear: defaultFirstYear,\n lastYear: getDefaultLastYear()\n }\n };\n};\n\nconst removeFileExtension = filename => filename.replace(/\\.[^/.]+$/, \"\");\n\nconst getDatabaseName = file => file && removeFileExtension(file.name);\n\nclass StartRunContainer extends Component {\n constructor(props) {\n super(props);\n\n this.signal = api.getSignal();\n\n this.state = createInitialState();\n }\n\n setStateSafely = (state, callback) => {\n if (!this.unmounting) {\n this.setState(state, callback);\n }\n };\n\n uploadDatabase = (file, databaseType, onProgress) => {\n const data = new FormData();\n\n data.append(\"file\", file, file.name);\n\n return api.uploadDatabase(\n data,\n databaseType,\n onProgress,\n this.signal.token\n );\n };\n\n getCountryIntersection = (\n surveyDatabaseId,\n populationDatabaseId,\n emuDatabaseId\n ) => {\n if (!surveyDatabaseId || !populationDatabaseId) {\n return {};\n }\n\n const surveyDatabase = this.state.databases[surveyDatabaseId];\n const populationDatabase = this.state.databases[populationDatabaseId];\n const emuDatabase = emuDatabaseId && this.state.databases[emuDatabaseId];\n\n return Object.keys(surveyDatabase.divisions).reduce(\n (result, divisionNumericCode) => {\n const division = surveyDatabase.divisions[divisionNumericCode];\n\n if (\n division.isCountry &&\n populationDatabase.divisions[divisionNumericCode] &&\n (!emuDatabase || emuDatabase.divisions[divisionNumericCode])\n ) {\n result[divisionNumericCode] = division;\n }\n\n return result;\n },\n {}\n );\n };\n\n getRegionIntersection = (\n surveyDatabaseId,\n populationDatabaseId,\n emuDatabaseId\n ) => {\n if (!surveyDatabaseId || !populationDatabaseId) {\n return [];\n }\n\n const surveyRegions =\n this.state.databases[surveyDatabaseId].regionCodes || [];\n\n const populationRegionSet = new Set(\n this.state.databases[populationDatabaseId].regionCodes || []\n );\n\n const emuRegionSet =\n emuDatabaseId &&\n new Set(this.state.databases[emuDatabaseId].regionCodes || []);\n\n return surveyRegions.reduce((result, region) => {\n if (\n populationRegionSet.has(region) &&\n (!emuRegionSet || emuRegionSet.has(region))\n ) {\n result.push(region);\n }\n\n return result;\n }, []);\n };\n\n selectDefaultCountryOrRegion = (\n surveyDatabaseId,\n populationDatabaseId,\n emuDatabaseId\n ) => {\n const countries = this.getCountryIntersection(\n surveyDatabaseId,\n populationDatabaseId,\n emuDatabaseId\n );\n\n const countryNumericCodes = Object.keys(countries);\n\n const regions = this.getRegionIntersection(\n surveyDatabaseId,\n populationDatabaseId,\n emuDatabaseId\n );\n\n if (countryNumericCodes.length + regions.length === 1) {\n if (countryNumericCodes.length) {\n this.setStateSafely({\n selectedCountryNumericCode: parseInt(countryNumericCodes[0], 10)\n });\n } else {\n this.setStateSafely({\n selectedRegion: regions[0]\n });\n }\n }\n };\n\n createRunTitle = () => {\n let countryAlphaCodeOrRegion;\n\n if (this.state.selectedRegion) {\n countryAlphaCodeOrRegion = this.state.selectedRegion;\n } else if (this.state.selectedCountryNumericCode) {\n countryAlphaCodeOrRegion = this.state.databases[\n this.state.selectedSurveyDatabaseId\n ].divisions[this.state.selectedCountryNumericCode].alphaCode;\n }\n\n if (countryAlphaCodeOrRegion) {\n const { firstYear, lastYear } = this.state.period;\n\n return this.props.t(\n \"Defining run for {{countryAlphaCodeOrRegion}} during {{firstYear}}-{{lastYear}}\",\n {\n countryAlphaCodeOrRegion,\n firstYear,\n lastYear\n }\n );\n }\n };\n\n showNotification = (variant, message) => {\n this.setStateSafely({\n notificationVariant: variant,\n notificationOpen: true,\n notificationMessage: message\n });\n };\n\n onChangeSurveyDatabaseType = type => {\n this.setStateSafely({\n surveyDatabaseType: type,\n selectedSurveyDatabaseId: undefined,\n selectedCountryNumericCode: undefined,\n selectedRegion: undefined\n });\n };\n\n onSelectSurveyDatabase = databaseId => {\n this.setStateSafely({\n selectedSurveyDatabaseId: databaseId,\n selectedCountryNumericCode: undefined,\n selectedRegion: undefined\n });\n\n this.selectDefaultCountryOrRegion(\n databaseId,\n this.state.selectedPopulationDatabaseId,\n this.state.selectedEmuDatabaseId\n );\n };\n\n onSelectSurveyDatabaseFile = file => {\n this.setStateSafely({\n uploadedSurveyDatabaseFile: file\n });\n };\n\n onUploadSurveyDatabase = () => {\n const file = this.state.uploadedSurveyDatabaseFile;\n\n this.setStateSafely({\n uploadingSurveyDatabase: true\n });\n\n this.uploadDatabase(file, \"survey\", this.onProgressSurveyDatabaseUpload)\n .then(uploadDatabaseResponse => {\n return api\n .fetchDatabases(this.signal.token)\n .then(fetchDatabasesResponse => {\n const database = uploadDatabaseResponse.data;\n\n this.setStateSafely({\n databases: normalizeDatabases(fetchDatabasesResponse.data),\n selectedSurveyDatabaseId: database.id,\n surveyDatabaseType: \"custom\"\n });\n });\n })\n .catch(error => {\n const filename = this.state.uploadedSurveyDatabaseFile.name;\n\n this.showNotification(\"error\", `Failed to upload \"${filename}\"`);\n\n throw error;\n })\n .finally(() => {\n this.setStateSafely({\n uploadedSurveyDatabaseFile: undefined,\n uploadingSurveyDatabase: false\n });\n });\n };\n\n onProgressSurveyDatabaseUpload = progressEvent => {\n this.setState({\n surveyDatabaseUploadProgress:\n (progressEvent.loaded / progressEvent.total) * 100\n });\n };\n\n onCancelSurveyDatabaseUpload = () => {\n this.setStateSafely({\n uploadedSurveyDatabaseFile: undefined\n });\n };\n\n onChangePopulationDatabaseType = type => {\n this.setStateSafely({\n populationDatabaseType: type,\n selectedPopulationDatabaseId: undefined,\n selectedCountryNumericCode: undefined,\n selectedRegion: undefined\n });\n };\n\n onSelectPopulationDatabase = databaseId => {\n this.setStateSafely({\n selectedPopulationDatabaseId: databaseId,\n selectedCountryNumericCode: undefined,\n selectedRegion: undefined\n });\n\n this.selectDefaultCountryOrRegion(\n this.state.selectedSurveyDatabaseId,\n databaseId,\n this.state.selectedEmuDatabaseId\n );\n };\n\n onSelectPopulationDatabaseFile = file => {\n this.setStateSafely({\n uploadedPopulationDatabaseFile: file\n });\n };\n\n onUploadPopulationDatabase = () => {\n const file = this.state.uploadedPopulationDatabaseFile;\n\n this.setStateSafely({\n uploadingPopulationDatabase: true\n });\n\n this.uploadDatabase(\n file,\n \"population\",\n this.onProgressPopulationDatabaseUpload\n )\n .then(uploadDatabaseResponse => {\n return api\n .fetchDatabases(this.signal.token)\n .then(fetchDatabasesResponse => {\n const database = uploadDatabaseResponse.data;\n\n this.setStateSafely({\n databases: normalizeDatabases(fetchDatabasesResponse.data),\n selectedPopulationDatabaseId: database.id,\n populationDatabaseType: \"custom\"\n });\n });\n })\n .catch(error => {\n const filename = this.state.uploadedPopulationDatabaseFile.name;\n\n this.showNotification(\"error\", `Failed to upload \"${filename}\"`);\n\n throw error;\n })\n .finally(() => {\n this.setStateSafely({\n uploadedPopulationDatabaseFile: undefined,\n uploadingPopulationDatabase: false\n });\n });\n };\n\n onProgressPopulationDatabaseUpload = progressEvent => {\n this.setState({\n populationDatabaseUploadProgress:\n (progressEvent.loaded / progressEvent.total) * 100\n });\n };\n\n onCancelPopulationDatabaseUpload = () => {\n this.setStateSafely({\n uploadedPopulationDatabaseFile: undefined\n });\n };\n\n onChangeEmuDatabaseType = type => {\n this.setStateSafely({\n emuDatabaseType: type,\n selectedEmuDatabaseId: undefined,\n selectedCountryNumericCode: undefined,\n selectedRegion: undefined\n });\n };\n\n onSelectEmuDatabase = databaseId => {\n this.setStateSafely({\n selectedEmuDatabaseId: databaseId,\n selectedCountryNumericCode: undefined,\n selectedRegion: undefined\n });\n\n this.selectDefaultCountryOrRegion(\n this.state.selectedSurveyDatabaseId,\n this.state.selectedPopulationDatabaseId,\n databaseId\n );\n };\n\n onSelectEmuDatabaseFile = file => {\n this.setStateSafely({\n uploadedEmuDatabaseFile: file\n });\n };\n\n onUploadEmuDatabase = () => {\n const file = this.state.uploadedEmuDatabaseFile;\n\n this.setStateSafely({\n uploadingEmuDatabase: true\n });\n\n this.uploadDatabase(file, \"emu\", this.onProgressEmuDatabaseUpload)\n .then(uploadDatabaseResponse => {\n return api\n .fetchDatabases(this.signal.token)\n .then(fetchDatabasesResponse => {\n const database = uploadDatabaseResponse.data;\n\n this.setStateSafely({\n databases: normalizeDatabases(fetchDatabasesResponse.data),\n selectedEmuDatabaseId: database.id,\n emuDatabaseType: \"custom\"\n });\n });\n })\n .catch(error => {\n const filename = this.state.uploadedEmuDatabaseFile.name;\n\n this.showNotification(\"error\", `Failed to upload \"${filename}\"`);\n\n throw error;\n })\n .finally(() => {\n this.setStateSafely({\n uploadedEmuDatabaseFile: undefined,\n uploadingEmuDatabase: false\n });\n });\n };\n\n onProgressEmuDatabaseUpload = progressEvent => {\n this.setState({\n emuDatabaseUploadProgress:\n (progressEvent.loaded / progressEvent.total) * 100\n });\n };\n\n onCancelEmuDatabaseUpload = () => {\n this.setStateSafely({\n uploadedEmuDatabaseFile: undefined\n });\n };\n\n onSelectCountry = countryNumericCode => {\n this.setStateSafely({\n selectedCountryNumericCode: countryNumericCode,\n selectedRegion: undefined\n });\n };\n\n onSelectRegion = region => {\n this.setStateSafely({\n selectedRegion: region\n });\n };\n\n onRunNameChanged = runName => {\n this.setStateSafely({\n runName\n });\n };\n\n onChangePeriod = period => {\n this.setStateSafely({\n period\n });\n };\n\n onReviewData = () => {\n const countryNumericCodeOrRegion =\n this.state.selectedRegion ||\n this.state.selectedCountryNumericCode.toString();\n\n this.setStateSafely({\n loadingTables: true\n });\n\n // noinspection JSCheckFunctionSignatures\n Promise.all([\n api.fetchSurveyDatabase(\n this.state.selectedSurveyDatabaseId,\n countryNumericCodeOrRegion,\n undefined,\n this.signal.token\n ),\n api.fetchPopulationDatabase(\n this.state.selectedPopulationDatabaseId,\n countryNumericCodeOrRegion,\n this.signal.token\n ),\n this.state.selectedEmuDatabaseId\n ? api.fetchEmuDatabase(\n this.state.selectedEmuDatabaseId,\n countryNumericCodeOrRegion,\n this.signal.token\n )\n : new Promise(resolve =>\n resolve({\n data: []\n })\n )\n ])\n .then(response => {\n if (!response || response.some(item => !item)) {\n return;\n }\n\n const [surveyData, populationData, emuData] = response;\n\n this.setStateSafely({\n surveyData: normalizeSurveyData(surveyData.data),\n populationData: normalizePopulationData(populationData.data),\n emuData: normalizeEmuData(emuData.data)\n });\n })\n .finally(() => {\n this.setStateSafely({\n loadingTables: false\n });\n });\n };\n\n onStartRun = () => {\n api\n .startRun(\n this.state.runName,\n this.state.selectedSurveyDatabaseId,\n this.state.selectedPopulationDatabaseId,\n this.state.selectedEmuDatabaseId || undefined,\n this.state.selectedCountryNumericCode,\n this.state.selectedRegion,\n this.state.period\n )\n .then(() => {\n this.props.history.push(\"/history\");\n });\n };\n\n onCloseNotification = () => {\n this.setStateSafely({\n notificationOpen: false\n });\n };\n\n componentDidMount() {\n this.setStateSafely({\n loadingData: true\n });\n\n api\n .fetchDatabases(this.signal.token)\n .then(response => {\n if (!response) {\n return;\n }\n\n this.setStateSafely({\n databases: normalizeDatabases(response.data)\n });\n })\n .finally(() => {\n this.setStateSafely({\n loadingData: false\n });\n });\n }\n\n componentWillUnmount() {\n this.unmounting = true;\n this.signal.cancel();\n }\n\n render() {\n const countries = this.getCountryIntersection(\n this.state.selectedSurveyDatabaseId,\n this.state.selectedPopulationDatabaseId,\n this.state.selectedEmuDatabaseId\n );\n\n const regions = this.getRegionIntersection(\n this.state.selectedSurveyDatabaseId,\n this.state.selectedPopulationDatabaseId,\n this.state.selectedEmuDatabaseId\n );\n\n const { firstYear, lastYear } = {\n firstYear: minimumYear,\n lastYear: maximumYear\n };\n\n const surveyData = filterSurveyData(\n this.state.surveyData,\n firstYear,\n lastYear\n );\n\n const populationData = filterPopulationData(\n this.state.populationData,\n firstYear,\n lastYear\n );\n\n return (\n <StartRun\n match={this.props.match}\n loadingData={this.state.loadingData}\n databases={this.state.databases}\n surveyDatabaseType={this.state.surveyDatabaseType}\n selectedSurveyDatabaseId={this.state.selectedSurveyDatabaseId}\n uploadedSurveyDatabaseName={getDatabaseName(\n this.state.uploadedSurveyDatabaseFile\n )}\n uploadingSurveyDatabase={this.state.uploadingSurveyDatabase}\n surveyDatabaseUploadProgress={this.state.surveyDatabaseUploadProgress}\n populationDatabaseType={this.state.populationDatabaseType}\n selectedPopulationDatabaseId={this.state.selectedPopulationDatabaseId}\n uploadedPopulationDatabaseName={getDatabaseName(\n this.state.uploadedPopulationDatabaseFile\n )}\n uploadingPopulationDatabase={this.state.uploadingPopulationDatabase}\n populationDatabaseUploadProgress={\n this.state.populationDatabaseUploadProgress\n }\n emuDatabaseType={this.state.emuDatabaseType}\n selectedEmuDatabaseId={this.state.selectedEmuDatabaseId}\n uploadedEmuDatabaseName={getDatabaseName(\n this.state.uploadedEmuDatabaseFile\n )}\n uploadingEmuDatabase={this.state.uploadingEmuDatabase}\n emuDatabaseUploadProgress={this.state.emuDatabaseUploadProgress}\n countries={countries}\n selectedCountryNumericCode={this.state.selectedCountryNumericCode}\n regions={regions}\n selectedRegion={this.state.selectedRegion}\n runName={this.state.runName}\n period={this.state.period}\n runTitle={this.createRunTitle()}\n loadingTables={this.state.loadingTables}\n surveyData={surveyData}\n populationData={populationData}\n emuData={this.state.emuData}\n notificationVariant={this.state.notificationVariant}\n notificationOpen={this.state.notificationOpen}\n notificationMessage={this.state.notificationMessage}\n onChangeSurveyDatabaseType={this.onChangeSurveyDatabaseType}\n onSelectSurveyDatabase={this.onSelectSurveyDatabase}\n onSelectSurveyDatabaseFile={this.onSelectSurveyDatabaseFile}\n onUploadSurveyDatabase={this.onUploadSurveyDatabase}\n onCancelSurveyDatabaseUpload={this.onCancelSurveyDatabaseUpload}\n onChangePopulationDatabaseType={this.onChangePopulationDatabaseType}\n onSelectPopulationDatabase={this.onSelectPopulationDatabase}\n onSelectPopulationDatabaseFile={this.onSelectPopulationDatabaseFile}\n onUploadPopulationDatabase={this.onUploadPopulationDatabase}\n onCancelPopulationDatabaseUpload={this.onCancelPopulationDatabaseUpload}\n onChangeEmuDatabaseType={this.onChangeEmuDatabaseType}\n onSelectEmuDatabase={this.onSelectEmuDatabase}\n onSelectEmuDatabaseFile={this.onSelectEmuDatabaseFile}\n onUploadEmuDatabase={this.onUploadEmuDatabase}\n onCancelEmuDatabaseUpload={this.onCancelEmuDatabaseUpload}\n onSelectCountry={this.onSelectCountry}\n onSelectRegion={this.onSelectRegion}\n onRunNameChanged={this.onRunNameChanged}\n onChangePeriod={this.onChangePeriod}\n onReviewData={this.onReviewData}\n onStartRun={this.onStartRun}\n onCloseNotification={this.onCloseNotification}\n />\n );\n }\n}\n\nexport default withTranslation()(withErrorBoundary(StartRunContainer));\n","import React from \"react\";\nimport * as PropTypes from \"prop-types\";\nimport { periodPropType } from \"../../propTypes\";\nimport { withStyles } from \"@material-ui/core/styles\";\nimport Divider from \"@material-ui/core/Divider\";\nimport LinearProgress from \"@material-ui/core/LinearProgress\";\nimport Select from \"react-select\";\nimport { useTranslation } from \"react-i18next\";\nimport PeriodSelector from \"../PeriodSelector/PeriodSelector\";\nimport ProgressButton from \"../ProgressButton\";\n\nconst styles = {\n actionButton: {\n display: \"inline-flex\",\n margin: \"10px 0\"\n },\n countrySelector: {\n display: \"none\"\n },\n divider: {\n margin: \"10px 0\"\n },\n instruction: {\n margin: \"10px 0\",\n fontWeight: \"bold\"\n },\n periodSelector: {\n margin: \"30px 20px 40px\",\n zIndex: -1\n },\n progress: {\n margin: \"15px 0 5px\"\n },\n select: {\n marginBottom: 10\n },\n stepNumber: {\n display: \"none\"\n }\n};\n\nconst ViewRunDrawerContent = props => {\n const runs = Object.entries(props.runs).map(([id, run]) => ({\n value: id,\n label: run.name\n }));\n\n const countries = Object.entries(props.countries)\n .map(([numericCode, country]) => ({\n value: parseInt(numericCode, 10),\n label: country.name\n }))\n .sort((a, b) => a.label.localeCompare(b.label));\n\n const regions = props.regions.map((region, index) => ({\n value: -index - 1,\n label: region\n }));\n\n const selectedRegion = regions.find(\n region => region.label === props.selectedRegion\n );\n\n const selectedRegionValue = selectedRegion && selectedRegion.value;\n\n const countriesAndRegions = countries.concat(regions);\n\n const { t } = useTranslation();\n\n return (\n <>\n {props.loadingData && (\n <div className={props.classes.progress}>\n <LinearProgress />\n </div>\n )}\n\n <div className={props.classes.instruction}>\n <span className={props.classes.stepNumber}>1.</span>{\" \"}\n {t(\"Select existing run\")}\n </div>\n\n <Select\n placeholder={t(\"Select run...\")}\n options={runs}\n value={runs.filter(({ value }) => value === props.selectedRunId)}\n className={props.classes.select}\n onChange={({ value }) => props.onSelectRun(value)}\n />\n\n <div className={props.classes.countrySelector}>\n <Divider className={props.classes.divider} />\n\n <div className={props.classes.instruction}>\n 2. {t(\"Select country/population to view\")}\n </div>\n\n <Select\n placeholder={t(\"Select country/population...\")}\n options={countriesAndRegions}\n value={countriesAndRegions.filter(\n ({ value }) =>\n value ===\n (selectedRegionValue || props.selectedCountryNumericCode)\n )}\n className={props.classes.select}\n onChange={({ value }) => {\n if (value >= 0) {\n props.onSelectCountry(value);\n } else {\n props.onSelectRegion(\n regions.find(region => region.value === value).label\n );\n }\n }}\n />\n\n <Divider className={props.classes.divider} />\n </div>\n\n <ProgressButton\n variant=\"contained\"\n color=\"primary\"\n disabled={!(props.selectedCountryNumericCode || props.selectedRegion)}\n loading={props.loadingRun}\n className={props.classes.actionButton}\n onClick={props.onViewRun}\n >\n {t(\"View run\")}\n </ProgressButton>\n\n <Divider className={props.classes.divider} />\n\n <div className={props.classes.instruction}>\n {t(\"Select years for display/export of results\")}\n </div>\n\n <div className={props.classes.periodSelector}>\n <PeriodSelector period={props.period} onChange={props.onChangePeriod} />\n </div>\n </>\n );\n};\n\nViewRunDrawerContent.propTypes = {\n loadingData: PropTypes.bool,\n runs: PropTypes.objectOf(\n PropTypes.shape({\n name: PropTypes.string.isRequired\n })\n ),\n selectedRunId: PropTypes.string,\n countries: PropTypes.objectOf(\n PropTypes.shape({\n name: PropTypes.string.isRequired\n })\n ),\n selectedCountryNumericCode: PropTypes.number,\n regions: PropTypes.arrayOf(PropTypes.string),\n selectedRegion: PropTypes.string,\n period: periodPropType,\n loadingRun: PropTypes.bool,\n onSelectRun: PropTypes.func.isRequired,\n onSelectCountry: PropTypes.func.isRequired,\n onSelectRegion: PropTypes.func.isRequired,\n onViewRun: PropTypes.func.isRequired\n};\n\nViewRunDrawerContent.defaultProps = {\n loadingData: false,\n runs: {},\n countries: {},\n regions: [],\n loadingRun: false\n};\n\nexport default withStyles(styles)(ViewRunDrawerContent);\n","import React from \"react\";\nimport * as PropTypes from \"prop-types\";\nimport { maritalStatusPropType } from \"../propTypes\";\nimport NativeSelect from \"@material-ui/core/NativeSelect\";\n\nconst SentenceMaritalStatusSelector = props => (\n <NativeSelect\n value={props.value}\n className={props.className}\n onChange={e => {\n props.onChange(e.target.value);\n }}\n >\n <option value=\"married\">married</option>\n <option value=\"unmarried\">unmarried</option>\n <option value=\"all_women\">all</option>\n </NativeSelect>\n);\n\nSentenceMaritalStatusSelector.propTypes = {\n value: maritalStatusPropType,\n className: PropTypes.string,\n onChange: PropTypes.func.isRequired\n};\n\nexport default SentenceMaritalStatusSelector;\n","import React from \"react\";\nimport * as PropTypes from \"prop-types\";\nimport { maritalStatusPropType } from \"../../propTypes\";\nimport { maximumYear, minimumYear } from \"../../constants\";\nimport { withStyles } from \"@material-ui/core/styles\";\nimport classNames from \"classnames\";\nimport NativeSelect from \"@material-ui/core/NativeSelect\";\nimport TextField from \"@material-ui/core/TextField\";\nimport MaritalStatusSelector from \"../SentenceMaritalStatusSelector\";\n\nconst styles = {\n container: {\n display: \"inline-flex\",\n flexWrap: \"wrap\",\n alignItems: \"baseline\"\n },\n input: {\n margin: \"0 0.5em\"\n },\n year: {\n width: \"4rem\"\n }\n};\n\nconst ProgressContraceptionMethodSpecification = props => (\n <div>\n <span>The change in the number of</span>\n\n <MaritalStatusSelector\n value={props.maritalStatus}\n className={props.classes.input}\n onChange={props.onSelectMaritalStatus}\n />\n\n <span>women</span>\n\n <NativeSelect\n value={props.contraceptiveMethod}\n className={props.classes.input}\n onChange={e => {\n props.onSelectContraceptiveMethod(e.target.value);\n }}\n >\n {props.contraceptiveMethods.map(contraceptiveMethod => (\n <option\n key={contraceptiveMethod.value}\n value={contraceptiveMethod.value}\n >\n {contraceptiveMethod.label}\n </option>\n ))}\n </NativeSelect>\n\n <span>from the year</span>\n\n <TextField\n type=\"number\"\n margin=\"dense\"\n inputProps={{\n min: minimumYear,\n max: maximumYear\n }}\n value={(props.period && props.period.firstYear) || \"\"}\n className={classNames(props.classes.input, props.classes.year)}\n onChange={e => {\n props.onChangeFirstYear(parseInt(e.target.value, 10) || undefined);\n }}\n onBlur={e => {\n props.onChangeFirstYear(\n parseInt(e.target.value, 10) || undefined,\n true\n );\n }}\n />\n\n <span>to the year</span>\n\n <TextField\n type=\"number\"\n margin=\"dense\"\n inputProps={{\n min: minimumYear,\n max: maximumYear\n }}\n value={(props.period && props.period.lastYear) || \"\"}\n className={classNames(props.classes.input, props.classes.year)}\n onChange={e => {\n props.onChangeLastYear(parseInt(e.target.value, 10) || undefined);\n }}\n onBlur={e => {\n props.onChangeLastYear(parseInt(e.target.value, 10) || undefined, true);\n }}\n />\n\n <span>is...</span>\n </div>\n);\n\nProgressContraceptionMethodSpecification.propTypes = {\n contraceptiveMethods: PropTypes.arrayOf(\n PropTypes.shape({\n value: PropTypes.string.isRequired,\n label: PropTypes.string.isRequired\n })\n ).isRequired,\n maritalStatus: maritalStatusPropType,\n contraceptiveMethod: PropTypes.string.isRequired,\n onSelectMaritalStatus: PropTypes.func.isRequired,\n onSelectContraceptiveMethod: PropTypes.func.isRequired,\n onChangeFirstYear: PropTypes.func.isRequired,\n onChangeLastYear: PropTypes.func.isRequired\n};\n\nexport default withStyles(styles)(ProgressContraceptionMethodSpecification);\n","import React from \"react\";\nimport * as PropTypes from \"prop-types\";\nimport { maritalStatusPropType } from \"../../propTypes\";\nimport { maximumYear, minimumYear } from \"../../constants\";\nimport { withStyles } from \"@material-ui/core/styles\";\nimport classNames from \"classnames\";\nimport NativeSelect from \"@material-ui/core/NativeSelect\";\nimport TextField from \"@material-ui/core/TextField\";\nimport MaritalStatusSelector from \"../SentenceMaritalStatusSelector\";\n\nconst styles = {\n container: {\n display: \"inline-flex\",\n flexWrap: \"wrap\",\n alignItems: \"baseline\"\n },\n input: {\n margin: \"0 0.5em\"\n },\n year: {\n width: \"4rem\"\n }\n};\n\nconst ProgressIndicatorSpecification = props => (\n <div className={props.classes.container}>\n <span>The change in</span>\n\n <NativeSelect\n value={props.indicator}\n className={props.classes.input}\n onChange={e => {\n props.onSelectIndicator(e.target.value);\n }}\n >\n {props.indicators.map(indicator => (\n <option key={indicator.value} value={indicator.value}>\n {indicator.label}\n </option>\n ))}\n </NativeSelect>\n\n <span>among</span>\n\n <MaritalStatusSelector\n value={props.maritalStatus}\n className={props.classes.input}\n onChange={props.onSelectMaritalStatus}\n />\n\n <span>women from the year</span>\n\n <TextField\n type=\"number\"\n margin=\"dense\"\n inputProps={{\n min: minimumYear,\n max: maximumYear\n }}\n value={(props.period && props.period.firstYear) || \"\"}\n className={classNames(props.classes.input, props.classes.year)}\n onChange={e => {\n props.onChangeFirstYear(parseInt(e.target.value, 10) || undefined);\n }}\n onBlur={e => {\n props.onChangeFirstYear(\n parseInt(e.target.value, 10) || undefined,\n true\n );\n }}\n />\n\n <span>to the year</span>\n\n <TextField\n type=\"number\"\n margin=\"dense\"\n inputProps={{\n min: minimumYear,\n max: maximumYear\n }}\n value={(props.period && props.period.lastYear) || \"\"}\n className={classNames(props.classes.input, props.classes.year)}\n onChange={e => {\n props.onChangeLastYear(parseInt(e.target.value, 10) || undefined);\n }}\n onBlur={e => {\n props.onChangeLastYear(parseInt(e.target.value, 10) || undefined, true);\n }}\n />\n\n <span>is...</span>\n </div>\n);\n\nProgressIndicatorSpecification.propTypes = {\n indicators: PropTypes.arrayOf(\n PropTypes.shape({\n value: PropTypes.string.isRequired,\n label: PropTypes.string.isRequired\n })\n ).isRequired,\n indicator: PropTypes.string.isRequired,\n maritalStatus: maritalStatusPropType,\n period: PropTypes.shape({\n firstYear: PropTypes.number,\n lastYear: PropTypes.number\n }),\n onSelectIndicator: PropTypes.func.isRequired,\n onSelectMaritalStatus: PropTypes.func.isRequired,\n onChangeFirstYear: PropTypes.func.isRequired,\n onChangeLastYear: PropTypes.func.isRequired\n};\n\nexport default withStyles(styles)(ProgressIndicatorSpecification);\n","import React from \"react\";\nimport * as PropTypes from \"prop-types\";\nimport { maritalStatusPropType } from \"../../propTypes\";\nimport { formatPercentage } from \"../../utilities\";\nimport { withStyles } from \"@material-ui/core/styles\";\nimport Divider from \"@material-ui/core/Divider\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { withTranslation } from \"react-i18next\";\nimport ProgressButton from \"../ProgressButton\";\nimport ProgressContraceptionMethodSpecification from \"./ProgressContraceptionMethodSpecification\";\nimport ProgressIndicatorSpecification from \"./ProgressIndicatorSpecification\";\n\nconst styles = {\n answer: {\n fontWeight: \"bold\"\n },\n button: {\n display: \"table\",\n marginTop: 20\n },\n panel: {\n margin: \"20px 0 33px\"\n }\n};\n\nconst formatQuantiles = (\n [lower, median, upper],\n percentages,\n includeConfidenceIntervals = false\n) => {\n const formattedMedian = percentages\n ? formatPercentage(median, 1)\n : median.toFixed(0);\n\n const formattedLower = percentages\n ? formatPercentage(lower, 1)\n : lower.toFixed(0);\n\n const formattedUpper = percentages\n ? formatPercentage(upper, 1)\n : upper.toFixed(0);\n\n return includeConfidenceIntervals\n ? `${formattedMedian} (${formattedLower}, ${formattedUpper})`\n : formattedMedian;\n};\n\nconst Progress = ({ t, ...rest }) => (\n <div>\n <Typography variant=\"h5\">\n {t(\"Information for measuring progress\")}\n </Typography>\n\n <p>\n {t(\n \"These options tell you the difference between two selected years for median estimates of either prevalence or number of women.\"\n )}\n </p>\n\n <Divider />\n\n <div className={rest.classes.panel}>\n <ProgressIndicatorSpecification\n indicators={rest.indicators}\n indicator={rest.indicatorProgressParameters.indicator}\n maritalStatus={rest.indicatorProgressParameters.maritalStatus}\n period={rest.indicatorProgressParameters.period}\n onSelectIndicator={rest.onSelectIndicatorProgressIndicator}\n onSelectMaritalStatus={rest.onSelectIndicatorProgressMaritalStatus}\n onChangeFirstYear={rest.onChangeIndicatorProgressFirstYear}\n onChangeLastYear={rest.onChangeIndicatorProgressLastYear}\n />\n <p className={rest.classes.answer}>\n {rest.indicatorProgress != null\n ? formatQuantiles(rest.indicatorProgress, true)\n : \"???\"}\n </p>\n </div>\n\n <Divider />\n\n <div className={rest.classes.panel}>\n <ProgressContraceptionMethodSpecification\n contraceptiveMethods={rest.contraceptiveMethods}\n maritalStatus={rest.contraceptiveMethodProgressParameters.maritalStatus}\n contraceptiveMethod={\n rest.contraceptiveMethodProgressParameters.contraceptiveMethod\n }\n period={rest.contraceptiveMethodProgressParameters.period}\n onSelectMaritalStatus={\n rest.onSelectContraceptiveMethodProgressMaritalStatus\n }\n onSelectContraceptiveMethod={\n rest.onSelectContraceptiveMethodProgressContraceptiveMethod\n }\n onChangeFirstYear={rest.onChangeContraceptiveMethodProgressFirstYear}\n onChangeLastYear={rest.onChangeContraceptiveMethodProgressLastYear}\n />\n <p className={rest.classes.answer}>\n {rest.contraceptiveMethodProgress != null\n ? formatQuantiles(rest.contraceptiveMethodProgress, false)\n : \"???\"}\n </p>\n </div>\n\n <Divider />\n\n <ProgressButton\n variant=\"contained\"\n color=\"primary\"\n disabled={!rest.valid}\n loading={rest.calculating}\n className={rest.classes.button}\n onClick={rest.onCalculate}\n >\n {t(\"Calculate\")}\n </ProgressButton>\n </div>\n);\n\nProgress.propTypes = {\n indicators: PropTypes.arrayOf(\n PropTypes.shape({\n value: PropTypes.string.isRequired,\n label: PropTypes.string.isRequired\n })\n ).isRequired,\n contraceptiveMethods: PropTypes.arrayOf(\n PropTypes.shape({\n value: PropTypes.string.isRequired,\n label: PropTypes.string.isRequired\n })\n ).isRequired,\n indicatorProgressParameters: PropTypes.shape({\n indicator: PropTypes.string.isRequired,\n maritalStatus: maritalStatusPropType,\n period: PropTypes.shape({\n firstYear: PropTypes.number,\n lastYear: PropTypes.number\n })\n }).isRequired,\n indicatorProgress: PropTypes.arrayOf(PropTypes.number),\n contraceptiveMethodProgressParameters: PropTypes.shape({\n maritalStatus: maritalStatusPropType,\n contraceptiveMethod: PropTypes.string.isRequired,\n period: PropTypes.shape({\n firstYear: PropTypes.number,\n lastYear: PropTypes.number\n })\n }).isRequired,\n contraceptiveMethodProgress: PropTypes.arrayOf(PropTypes.number),\n valid: PropTypes.bool.isRequired,\n calculating: PropTypes.bool,\n onSelectIndicatorProgressIndicator: PropTypes.func.isRequired,\n onSelectIndicatorProgressMaritalStatus: PropTypes.func.isRequired,\n onChangeIndicatorProgressFirstYear: PropTypes.func.isRequired,\n onChangeIndicatorProgressLastYear: PropTypes.func.isRequired,\n onSelectContraceptiveMethodProgressMaritalStatus: PropTypes.func.isRequired,\n onSelectContraceptiveMethodProgressContraceptiveMethod:\n PropTypes.func.isRequired,\n onChangeContraceptiveMethodProgressFirstYear: PropTypes.func.isRequired,\n onChangeContraceptiveMethodProgressLastYear: PropTypes.func.isRequired,\n onCalculate: PropTypes.func.isRequired\n};\n\nProgress.defaultProps = {\n calculating: false\n};\n\nexport default withTranslation()(withStyles(styles)(Progress));\n","import React, { Component } from \"react\";\nimport * as PropTypes from \"prop-types\";\nimport { contraceptiveMethods, indicators } from \"../constants\";\nimport { trimYearToRange } from \"../utilities\";\nimport * as api from \"../api/api\";\nimport Progress from \"../components/Progress/Progress\";\n\nconst createInitialState = () => {\n return {\n indicatorProgressParameters: {\n indicator: indicators[0].value,\n maritalStatus: \"married\"\n },\n contraceptiveMethodProgressParameters: {\n maritalStatus: \"married\",\n contraceptiveMethod: contraceptiveMethods[0].value\n }\n };\n};\n\nconst validatePeriod = period =>\n period &&\n period.firstYear &&\n period.lastYear &&\n period.firstYear <= period.lastYear;\n\nconst createPayload = state => {\n const payload = {};\n\n if (validatePeriod(state.indicatorProgressParameters.period)) {\n payload.indicatorProgressParameters = state.indicatorProgressParameters;\n }\n\n if (validatePeriod(state.contraceptiveMethodProgressParameters.period)) {\n payload.contraceptiveMethodProgressParameters =\n state.contraceptiveMethodProgressParameters;\n }\n\n return payload;\n};\n\nclass ProgressContainer extends Component {\n constructor(props) {\n super(props);\n\n this.signal = api.getSignal();\n\n this.state = createInitialState();\n }\n\n setStateSafely = (state, callback) => {\n if (!this.unmounting) {\n this.setState(state, callback);\n }\n };\n\n onSelectIndicatorProgressIndicator = indicator => {\n this.setStateSafely({\n indicatorProgressParameters: {\n ...this.state.indicatorProgressParameters,\n indicator\n }\n });\n };\n\n onSelectIndicatorProgressMaritalStatus = maritalStatus => {\n this.setStateSafely({\n indicatorProgressParameters: {\n ...this.state.indicatorProgressParameters,\n maritalStatus\n }\n });\n };\n\n onChangeIndicatorProgressFirstYear = (firstYear, enforceRange) => {\n firstYear = trimYearToRange(firstYear, enforceRange);\n\n this.setStateSafely({\n indicatorProgressParameters: {\n ...this.state.indicatorProgressParameters,\n period: {\n ...this.state.indicatorProgressParameters.period,\n firstYear\n }\n }\n });\n };\n\n onChangeIndicatorProgressLastYear = (lastYear, enforceRange) => {\n lastYear = trimYearToRange(lastYear, enforceRange);\n\n this.setStateSafely({\n indicatorProgressParameters: {\n ...this.state.indicatorProgressParameters,\n period: {\n ...this.state.indicatorProgressParameters.period,\n lastYear\n }\n }\n });\n };\n\n onSelectContraceptiveMethodProgressMaritalStatus = maritalStatus => {\n this.setStateSafely({\n contraceptiveMethodProgressParameters: {\n ...this.state.contraceptiveMethodProgressParameters,\n maritalStatus\n }\n });\n };\n\n onSelectContraceptiveMethodProgressContraceptiveMethod = contraceptiveMethod => {\n this.setStateSafely({\n contraceptiveMethodProgressParameters: {\n ...this.state.contraceptiveMethodProgressParameters,\n contraceptiveMethod\n }\n });\n };\n\n onChangeContraceptiveMethodProgressFirstYear = (firstYear, enforceRange) => {\n firstYear = trimYearToRange(firstYear, enforceRange);\n\n this.setStateSafely({\n contraceptiveMethodProgressParameters: {\n ...this.state.contraceptiveMethodProgressParameters,\n period: {\n ...this.state.contraceptiveMethodProgressParameters.period,\n firstYear\n }\n }\n });\n };\n\n onChangeContraceptiveMethodProgressLastYear = (lastYear, enforceRange) => {\n lastYear = trimYearToRange(lastYear, enforceRange);\n\n this.setStateSafely({\n contraceptiveMethodProgressParameters: {\n ...this.state.contraceptiveMethodProgressParameters,\n period: {\n ...this.state.contraceptiveMethodProgressParameters.period,\n lastYear\n }\n }\n });\n };\n\n onCalculate = () => {\n this.setStateSafely({\n calculating: true\n });\n\n const countryNumericCodeOrRegion =\n this.props.countryNumericCode || this.props.region;\n\n api\n .calculateProgress(\n this.props.runId,\n countryNumericCodeOrRegion,\n createPayload(this.state),\n this.signal.token\n )\n .then(response => {\n if (!response) {\n return;\n }\n this.setStateSafely({\n ...response.data\n });\n })\n .finally(() => {\n this.setStateSafely({\n calculating: false\n });\n });\n };\n\n componentWillUnmount() {\n this.unmounting = true;\n this.signal.cancel();\n }\n\n render() {\n return (\n <Progress\n indicators={indicators}\n contraceptiveMethods={contraceptiveMethods}\n indicatorProgressParameters={this.state.indicatorProgressParameters}\n indicatorProgress={this.state.indicatorProgress}\n contraceptiveMethodProgressParameters={\n this.state.contraceptiveMethodProgressParameters\n }\n contraceptiveMethodProgress={this.state.contraceptiveMethodProgress}\n valid={\n (!!this.props.countryNumericCode || !!this.props.region) &&\n Object.keys(createPayload(this.state)).length > 0\n }\n calculating={this.state.calculating}\n onSelectIndicatorProgressIndicator={\n this.onSelectIndicatorProgressIndicator\n }\n onSelectIndicatorProgressMaritalStatus={\n this.onSelectIndicatorProgressMaritalStatus\n }\n onChangeIndicatorProgressFirstYear={\n this.onChangeIndicatorProgressFirstYear\n }\n onChangeIndicatorProgressLastYear={\n this.onChangeIndicatorProgressLastYear\n }\n onSelectContraceptiveMethodProgressMaritalStatus={\n this.onSelectContraceptiveMethodProgressMaritalStatus\n }\n onSelectContraceptiveMethodProgressContraceptiveMethod={\n this.onSelectContraceptiveMethodProgressContraceptiveMethod\n }\n onChangeContraceptiveMethodProgressFirstYear={\n this.onChangeContraceptiveMethodProgressFirstYear\n }\n onChangeContraceptiveMethodProgressLastYear={\n this.onChangeContraceptiveMethodProgressLastYear\n }\n onCalculate={this.onCalculate}\n />\n );\n }\n}\n\nProgressContainer.propTypes = {\n runId: PropTypes.string,\n countryNumericCode: PropTypes.number,\n region: PropTypes.string\n};\n\nexport default ProgressContainer;\n","import React from \"react\";\nimport * as PropTypes from \"prop-types\";\nimport { maximumYear, minimumYear } from \"../../constants\";\nimport {\n directionPropType,\n labeledValuePropType,\n maritalStatusPropType\n} from \"../../propTypes\";\nimport { withStyles } from \"@material-ui/core/styles\";\nimport classNames from \"classnames\";\nimport NativeSelect from \"@material-ui/core/NativeSelect\";\nimport TextField from \"@material-ui/core/TextField\";\nimport MaritalStatusSelector from \"../SentenceMaritalStatusSelector\";\n\nconst styles = {\n container: {\n display: \"inline-flex\",\n flexWrap: \"wrap\",\n alignItems: \"baseline\"\n },\n input: {\n margin: \"0 0.5em\"\n },\n probability: {\n width: \"5rem\"\n },\n year: {\n width: \"4rem\"\n }\n};\n\nconst TargetsIndicatorLevelSpecification = props => (\n <div className={props.classes.container}>\n <span>What target of</span>\n\n <NativeSelect\n value={props.indicator}\n className={props.classes.input}\n onChange={e => {\n props.onSelectIndicator(e.target.value);\n }}\n >\n {props.indicators.map(indicator => (\n <option key={indicator.value} value={indicator.value}>\n {indicator.label}\n </option>\n ))}\n </NativeSelect>\n\n <span>among</span>\n\n <MaritalStatusSelector\n value={props.maritalStatus}\n className={props.classes.input}\n onChange={props.onSelectMaritalStatus}\n />\n\n <span>women in the year</span>\n\n <TextField\n type=\"number\"\n margin=\"dense\"\n inputProps={{\n min: minimumYear,\n max: maximumYear\n }}\n value={props.year || \"\"}\n className={classNames(props.classes.input, props.classes.year)}\n onChange={e => {\n props.onChangeYear(parseInt(e.target.value, 10) || undefined);\n }}\n onBlur={e => {\n props.onChangeYear(parseInt(e.target.value, 10) || undefined, true);\n }}\n />\n\n <span>corresponds to an attainment probability of</span>\n\n <TextField\n value={props.probability || \"\"}\n margin=\"dense\"\n className={classNames(props.classes.input, props.classes.probability)}\n onChange={e => {\n props.onChangeProbability(e.target.value || undefined);\n }}\n />\n\n <span>\n where attainment probability refers to the probability of an outcome\n </span>\n\n <NativeSelect\n value={props.direction}\n className={props.classes.input}\n onChange={e => {\n props.onSelectDirection(e.target.value);\n }}\n >\n <option value=\"greaterThan\">greater</option>\n <option value=\"lessThan\">smaller</option>\n </NativeSelect>\n\n <span>than the target value?</span>\n </div>\n);\n\nTargetsIndicatorLevelSpecification.propTypes = {\n indicators: PropTypes.arrayOf(labeledValuePropType).isRequired,\n indicator: PropTypes.string.isRequired,\n maritalStatus: maritalStatusPropType,\n year: PropTypes.number,\n probability: PropTypes.string,\n direction: directionPropType,\n level: PropTypes.number,\n onSelectIndicator: PropTypes.func.isRequired,\n onSelectMaritalStatus: PropTypes.func.isRequired,\n onChangeYear: PropTypes.func.isRequired,\n onChangeProbability: PropTypes.func.isRequired,\n onSelectDirection: PropTypes.func.isRequired\n};\n\nexport default withStyles(styles)(TargetsIndicatorLevelSpecification);\n","import React from \"react\";\nimport * as PropTypes from \"prop-types\";\nimport {\n directionPropType,\n labeledValuePropType,\n maritalStatusPropType,\n} from \"../../propTypes\";\nimport { maximumYear, minimumYear } from \"../../constants\";\nimport { withStyles } from \"@material-ui/core/styles\";\nimport classNames from \"classnames\";\nimport Input from \"@material-ui/core/Input\";\nimport InputAdornment from \"@material-ui/core/InputAdornment\";\nimport NativeSelect from \"@material-ui/core/NativeSelect\";\nimport MaritalStatusSelector from \"../SentenceMaritalStatusSelector\";\n\nconst styles = {\n container: {\n display: \"inline-flex\",\n flexWrap: \"wrap\",\n alignItems: \"baseline\",\n },\n input: {\n margin: \"0 0.5em\",\n },\n percentage: {\n width: \"5rem\",\n },\n year: {\n width: \"4rem\",\n },\n};\n\nconst TargetsIndicatorProbabilitySpecification = (props) => (\n <div className={props.classes.container}>\n <span>What is the probability that</span>\n\n <NativeSelect\n value={props.indicator}\n className={props.classes.input}\n onChange={(e) => {\n props.onSelectIndicator(e.target.value);\n }}\n >\n {props.indicators.map((indicator) => (\n <option key={indicator.value} value={indicator.value}>\n {indicator.label}\n </option>\n ))}\n </NativeSelect>\n\n <span>among</span>\n\n <MaritalStatusSelector\n value={props.maritalStatus}\n className={props.classes.input}\n onChange={props.onSelectMaritalStatus}\n />\n\n <span>women in the year</span>\n\n <Input\n type=\"number\"\n margin=\"dense\"\n inputProps={{\n min: minimumYear,\n max: maximumYear,\n }}\n value={props.year || \"\"}\n className={classNames(props.classes.input, props.classes.year)}\n onChange={(e) => {\n props.onChangeYear(parseInt(e.target.value, 10) || undefined);\n }}\n onBlur={(e) => {\n props.onChangeYear(parseInt(e.target.value, 10) || undefined, true);\n }}\n />\n\n <span>is</span>\n\n <NativeSelect\n value={props.direction}\n className={props.classes.input}\n onChange={(e) => {\n props.onSelectDirection(e.target.value);\n }}\n >\n <option value=\"greaterThan\">above</option>\n <option value=\"lessThan\">below</option>\n </NativeSelect>\n\n <Input\n type=\"number\"\n margin=\"dense\"\n inputProps={{\n min: 0,\n max: 100,\n }}\n endAdornment={<InputAdornment position=\"start\">%</InputAdornment>}\n value={props.level || \"\"}\n className={classNames(props.classes.input, props.classes.percentage)}\n onChange={(e) => {\n props.onChangeLevel(parseFloat(e.target.value) || undefined);\n }}\n />\n\n <span>?</span>\n </div>\n);\n\nTargetsIndicatorProbabilitySpecification.propTypes = {\n indicators: PropTypes.arrayOf(labeledValuePropType).isRequired,\n indicator: PropTypes.string.isRequired,\n maritalStatus: maritalStatusPropType,\n year: PropTypes.number,\n direction: directionPropType,\n level: PropTypes.number,\n probability: PropTypes.number,\n onSelectIndicator: PropTypes.func.isRequired,\n onSelectMaritalStatus: PropTypes.func.isRequired,\n onChangeYear: PropTypes.func.isRequired,\n onSelectDirection: PropTypes.func.isRequired,\n onChangeLevel: PropTypes.func.isRequired,\n};\n\nexport default withStyles(styles)(TargetsIndicatorProbabilitySpecification);\n","import React from \"react\";\nimport * as PropTypes from \"prop-types\";\nimport { maximumYear, minimumYear } from \"../../constants\";\nimport { withStyles } from \"@material-ui/core/styles\";\nimport classNames from \"classnames\";\nimport NativeSelect from \"@material-ui/core/NativeSelect\";\nimport TextField from \"@material-ui/core/TextField\";\nimport MaritalStatusSelector from \"../SentenceMaritalStatusSelector\";\nimport {\n deltaPropType,\n directionPropType,\n maritalStatusPropType\n} from \"../../propTypes\";\n\nconst styles = {\n container: {\n display: \"inline-flex\",\n flexWrap: \"wrap\",\n alignItems: \"baseline\"\n },\n input: {\n margin: \"0 0.5em\"\n },\n probability: {\n width: \"5rem\"\n },\n year: {\n width: \"4rem\"\n }\n};\n\nconst TargetsPopulationLevelSpecification = props => (\n <div className={props.classes.container}>\n <span>What target of</span>\n\n <NativeSelect\n value={props.delta}\n className={props.classes.input}\n onChange={e => {\n props.onSelectDelta(e.target.value);\n }}\n >\n <option value=\"total\">total</option>\n <option value=\"additional\">additional</option>\n </NativeSelect>\n\n {props.delta === \"additional\" && (\n <>\n <span>(relative to the year</span>\n\n <TextField\n type=\"number\"\n margin=\"dense\"\n inputProps={{\n min: minimumYear,\n max: maximumYear\n }}\n value={props.relativeToYear || \"\"}\n className={classNames(props.classes.input, props.classes.year)}\n onChange={e => {\n props.onChangeRelativeToYear(\n parseInt(e.target.value, 10) || undefined\n );\n }}\n onBlur={e => {\n props.onChangeRelativeToYear(\n parseInt(e.target.value, 10) || undefined,\n true\n );\n }}\n />\n </>\n )}\n\n <span>{`${props.delta === \"additional\" ? \") \" : \"\"}number of`}</span>\n\n <MaritalStatusSelector\n value={props.maritalStatus}\n className={props.classes.input}\n onChange={props.onSelectMaritalStatus}\n />\n\n <span>women</span>\n\n <NativeSelect\n value={props.contraceptiveMethod}\n className={props.classes.input}\n onChange={e => {\n props.onSelectContraceptiveMethod(e.target.value);\n }}\n >\n {props.contraceptiveMethods.map(indicator => (\n <option key={indicator.value} value={indicator.value}>\n {indicator.label}\n </option>\n ))}\n </NativeSelect>\n\n <span>in the year</span>\n\n <TextField\n type=\"number\"\n margin=\"dense\"\n inputProps={{\n min: minimumYear,\n max: maximumYear\n }}\n value={props.year || \"\"}\n className={classNames(props.classes.input, props.classes.year)}\n onChange={e => {\n props.onChangeYear(parseInt(e.target.value, 10) || undefined);\n }}\n onBlur={e => {\n props.onChangeYear(parseInt(e.target.value, 10) || undefined, true);\n }}\n />\n\n <span>corresponds to an attainment probability of</span>\n\n <TextField\n value={props.probability || \"\"}\n margin=\"dense\"\n className={classNames(props.classes.input, props.classes.probability)}\n onChange={e => {\n props.onChangeProbability(e.target.value || undefined);\n }}\n />\n\n <span>\n where attainment probability refers to the probability of an outcome\n </span>\n\n <NativeSelect\n value={props.direction}\n className={props.classes.input}\n onChange={e => {\n props.onSelectDirection(e.target.value);\n }}\n >\n <option value=\"greaterThan\">greater</option>\n <option value=\"lessThan\">smaller</option>\n </NativeSelect>\n\n <span>than the target value?</span>\n </div>\n);\n\nTargetsPopulationLevelSpecification.propTypes = {\n contraceptiveMethods: PropTypes.arrayOf(\n PropTypes.shape({\n value: PropTypes.string.isRequired,\n label: PropTypes.string.isRequired\n })\n ).isRequired,\n delta: deltaPropType,\n relativeToYear: PropTypes.number,\n maritalStatus: maritalStatusPropType,\n contraceptiveMethod: PropTypes.string.isRequired,\n year: PropTypes.number,\n probability: PropTypes.string,\n direction: directionPropType,\n level: PropTypes.number,\n onSelectDelta: PropTypes.func.isRequired,\n onSelectMaritalStatus: PropTypes.func.isRequired,\n onChangeRelativeToYear: PropTypes.func.isRequired,\n onSelectContraceptiveMethod: PropTypes.func.isRequired,\n onChangeYear: PropTypes.func.isRequired,\n onChangeProbability: PropTypes.func.isRequired,\n onSelectDirection: PropTypes.func.isRequired\n};\n\nexport default withStyles(styles)(TargetsPopulationLevelSpecification);\n","import React from \"react\";\nimport * as PropTypes from \"prop-types\";\nimport {\n deltaPropType,\n directionPropType,\n maritalStatusPropType\n} from \"../../propTypes\";\nimport { maximumYear, minimumYear } from \"../../constants\";\nimport { withStyles } from \"@material-ui/core/styles\";\nimport classNames from \"classnames\";\nimport NativeSelect from \"@material-ui/core/NativeSelect\";\nimport TextField from \"@material-ui/core/TextField\";\nimport MaritalStatusSelector from \"../SentenceMaritalStatusSelector\";\n\nconst styles = {\n container: {\n display: \"inline-flex\",\n flexWrap: \"wrap\",\n alignItems: \"baseline\"\n },\n input: {\n margin: \"0 0.5em\"\n },\n level: {\n width: \"8rem\"\n },\n year: {\n width: \"4rem\"\n }\n};\n\nconst TargetsPopulationProbabilitySpecification = props => (\n <div className={props.classes.container}>\n <span>What is the probability that the</span>\n\n <NativeSelect\n value={props.delta}\n className={props.classes.input}\n onChange={e => {\n props.onSelectDelta(e.target.value);\n }}\n >\n <option value=\"total\">total</option>\n <option value=\"additional\">additional</option>\n </NativeSelect>\n\n {props.delta === \"additional\" && (\n <>\n <span>(relative to the year</span>\n\n <TextField\n type=\"number\"\n margin=\"dense\"\n inputProps={{\n min: minimumYear,\n max: maximumYear\n }}\n value={props.relativeToYear || \"\"}\n className={classNames(props.classes.input, props.classes.year)}\n onChange={e => {\n props.onChangeRelativeToYear(\n parseInt(e.target.value, 10) || undefined\n );\n }}\n onBlur={e => {\n props.onChangeRelativeToYear(\n parseInt(e.target.value, 10) || undefined,\n true\n );\n }}\n />\n </>\n )}\n\n <span>{`${props.delta === \"additional\" ? \") \" : \"\"}number of`}</span>\n\n <MaritalStatusSelector\n value={props.maritalStatus}\n className={props.classes.input}\n onChange={props.onSelectMaritalStatus}\n />\n\n <span>women</span>\n\n <NativeSelect\n value={props.contraceptiveMethod}\n className={props.classes.input}\n onChange={e => {\n props.onSelectContraceptiveMethod(e.target.value);\n }}\n >\n {props.contraceptiveMethods.map(indicator => (\n <option key={indicator.value} value={indicator.value}>\n {indicator.label}\n </option>\n ))}\n </NativeSelect>\n\n <span>in the year</span>\n\n <TextField\n type=\"number\"\n margin=\"dense\"\n inputProps={{\n min: minimumYear,\n max: maximumYear\n }}\n value={props.year || \"\"}\n className={classNames(props.classes.input, props.classes.year)}\n onChange={e => {\n props.onChangeYear(parseInt(e.target.value, 10) || undefined);\n }}\n onBlur={e => {\n props.onChangeYear(parseInt(e.target.value, 10) || undefined, true);\n }}\n />\n\n <span>is</span>\n\n <NativeSelect\n value={props.direction}\n className={props.classes.input}\n onChange={e => {\n props.onSelectrDirection(e.target.value);\n }}\n >\n <option value=\"greaterThan\">above</option>\n <option value=\"lessThan\">below</option>\n </NativeSelect>\n\n <TextField\n type=\"number\"\n margin=\"dense\"\n inputProps={{\n min: 0\n }}\n value={props.level || \"\"}\n className={classNames(props.classes.input, props.classes.level)}\n onChange={e => {\n props.onChangeLevel(e.target.value || undefined);\n }}\n />\n\n <span>?</span>\n </div>\n);\n\nTargetsPopulationProbabilitySpecification.propTypes = {\n contraceptiveMethods: PropTypes.arrayOf(\n PropTypes.shape({\n value: PropTypes.string.isRequired,\n label: PropTypes.string.isRequired\n })\n ).isRequired,\n delta: deltaPropType,\n relativeToYear: PropTypes.number,\n maritalStatus: maritalStatusPropType,\n contraceptiveMethod: PropTypes.string.isRequired,\n year: PropTypes.number,\n level: PropTypes.number,\n direction: directionPropType,\n probability: PropTypes.number,\n onSelectDelta: PropTypes.func.isRequired,\n onChangeRelativeToYear: PropTypes.func.isRequired,\n onSelectMaritalStatus: PropTypes.func.isRequired,\n onSelectContraceptiveMethod: PropTypes.func.isRequired,\n onChangeYear: PropTypes.func.isRequired,\n onSelectDirection: PropTypes.func.isRequired,\n onChangeLevel: PropTypes.func.isRequired\n};\n\nexport default withStyles(styles)(TargetsPopulationProbabilitySpecification);\n","import React from \"react\";\nimport * as PropTypes from \"prop-types\";\nimport {\n deltaPropType,\n directionPropType,\n maritalStatusPropType,\n} from \"../../propTypes\";\nimport { withStyles } from \"@material-ui/core/styles\";\nimport Divider from \"@material-ui/core/Divider\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { withTranslation } from \"react-i18next\";\nimport ProgressButton from \"../ProgressButton\";\nimport TargetsIndicatorLevelSpecification from \"./TargetsIndicatorLevelSpecification\";\nimport TargetsIndicatorProbabilitySpecification from \"./TargetsIndicatorProbabilitySpecification\";\nimport TargetsPopulationLevelSpecification from \"./TargetsPopulationLevelSpecification\";\nimport TargetsPopulationProbabilitySpecification from \"./TargetsPopulationProbabilitySpecification\";\n\nconst styles = {\n answer: {\n fontWeight: \"bold\",\n },\n button: {\n display: \"table\",\n marginTop: 20,\n },\n panel: {\n margin: \"20px 0 33px\",\n },\n};\n\nconst Targets = ({ t, ...rest }) => (\n <div>\n <Typography variant=\"h5\">{t(\"Information for target setting\")}</Typography>\n\n <p>\n {t(\n \"Select entries below to find a probability associated with a given level of an indicator of interest and vice versa.\"\n )}\n </p>\n\n <Divider />\n\n <p>\n {t(\n \"What is this target? If you have a prevalence goal, you can use this option to find out the probability of meeting that goal. For example, you may want to know the probability that mCPR is above 32% in 2030, and the answer is .4, this means there is a 40% change the mCPR will be above 32% and a 60% chance the mCPR will be below 32% in 2030.\"\n )}\n </p>\n\n <div className={rest.classes.panel}>\n <TargetsIndicatorProbabilitySpecification\n indicators={rest.indicators}\n indicator={rest.indicatorProbabilityParameters.indicator}\n maritalStatus={rest.indicatorProbabilityParameters.maritalStatus}\n year={rest.indicatorProbabilityParameters.year}\n direction={rest.indicatorProbabilityParameters.direction}\n level={rest.indicatorProbabilityParameters.level}\n probability={rest.indicatorProbabilityParameters.probability}\n onSelectIndicator={rest.onSelectIndicatorProbabilityIndicator}\n onSelectMaritalStatus={rest.onSelectIndicatorProbabilityMaritalStatus}\n onChangeYear={rest.onChangeIndicatorProbabilityYear}\n onSelectDirection={rest.onSelectIndicatorProbabilityDirection}\n onChangeLevel={rest.onChangeIndicatorProbabilityLevel}\n />\n <p className={rest.classes.answer}>\n The probability is{\" \"}\n {rest.indicatorProbability != null\n ? `${(rest.indicatorProbability * 100).toFixed(0)}%`\n : \"???\"}\n </p>\n </div>\n\n <Divider />\n\n <p>\n {t(\n 'What is this target? If you want to set a target/objective for your country that is ambitious, yet still obtainable, you would use this option. For example, if you wanted to have a target that you only had a 25% chance of achieving (a 75% chance of not achieving), you would enter as your attainment probability \".25\" and choose an outcome \"greater\" than the target value. This would tell you what prevalence you have a 25% chance of reaching.'\n )}\n </p>\n\n <div className={rest.classes.panel}>\n <TargetsIndicatorLevelSpecification\n indicators={rest.indicators}\n indicator={rest.indicatorLevelParameters.indicator}\n maritalStatus={rest.indicatorLevelParameters.maritalStatus}\n year={rest.indicatorLevelParameters.year}\n probability={rest.indicatorLevelParameters.probability}\n direction={rest.indicatorLevelParameters.direction}\n level={rest.indicatorLevelParameters.level}\n onSelectIndicator={rest.onSelectIndicatorLevelIndicator}\n onSelectMaritalStatus={rest.onSelectIndicatorLevelMaritalStatus}\n onChangeYear={rest.onChangeIndicatorLevelYear}\n onChangeProbability={rest.onChangeIndicatorLevelProbability}\n onSelectDirection={rest.onSelectIndicatorLevelDirection}\n />\n <p className={rest.classes.answer}>\n {rest.indicatorLevel != null\n ? `${(rest.indicatorLevel * 100).toFixed(2)}%`\n : \"???\"}\n </p>\n </div>\n\n <Divider />\n\n <p>\n {t(\n \"What is this target? This option is similar to the first option, but instead of a prevalence, it is for number of women. If you want to know the probability of having more than 1 million women using contraception, you would use this option, and it would give you a percent chance of having 1 million or more women using contraception.\"\n )}\n </p>\n\n <div className={rest.classes.panel}>\n <TargetsPopulationProbabilitySpecification\n contraceptiveMethods={rest.contraceptiveMethods}\n delta={rest.populationProbabilityParameters.delta}\n maritalStatus={rest.populationProbabilityParameters.maritalStatus}\n relativeToYear={rest.populationProbabilityParameters.relativeToYear}\n contraceptiveMethod={\n rest.populationProbabilityParameters.contraceptiveMethod\n }\n year={rest.populationProbabilityParameters.year}\n direction={rest.populationProbabilityParameters.direction}\n level={rest.populationProbabilityParameters.level}\n probability={rest.populationProbabilityParameters.probability}\n onSelectDelta={rest.onSelectPopulationProbabilityDelta}\n onSelectMaritalStatus={rest.onSelectPopulationProbabilityMaritalStatus}\n onChangeRelativeToYear={\n rest.onChangePopulationProbabilityRelativeToYear\n }\n onSelectContraceptiveMethod={\n rest.onSelectPopulationProbabilityContraceptiveMethod\n }\n onChangeYear={rest.onChangePopulationProbabilityYear}\n onSelectDirection={rest.onSelectPopulationProbabilityDirection}\n onChangeLevel={rest.onChangePopulationProbabilityLevel}\n />\n <p className={rest.classes.answer}>\n The probability is{\" \"}\n {rest.populationProbability != null\n ? `${(rest.populationProbability * 100).toFixed(0)}%`\n : \"???\"}\n </p>\n </div>\n\n <Divider />\n\n <p>\n {t(\n \"What is this target? This option is similar to the second option, but instead of a prevalence, it is for number of women. If you want to set a goal of the number of women using family planning, and you want it to be ambitious yet attainable, you could enter in an attainment probably of .25 (you only have a 25% probability of meeting this number), and FPET will tell you how many women you would reach.\"\n )}\n </p>\n\n <div className={rest.classes.panel}>\n <TargetsPopulationLevelSpecification\n contraceptiveMethods={rest.contraceptiveMethods}\n delta={rest.populationLevelParameters.delta}\n maritalStatus={rest.populationLevelParameters.maritalStatus}\n relativeToYear={rest.populationLevelParameters.relativeToYear}\n contraceptiveMethod={rest.populationLevelParameters.contraceptiveMethod}\n year={rest.populationLevelParameters.year}\n direction={rest.populationLevelParameters.direction}\n level={rest.populationLevelParameters.level}\n probability={rest.populationLevelParameters.probability}\n onSelectDelta={rest.onSelectPopulationLevelDelta}\n onSelectMaritalStatus={rest.onSelectPopulationLevelMaritalStatus}\n onChangeRelativeToYear={rest.onChangePopulationLevelRelativeToYear}\n onSelectContraceptiveMethod={\n rest.onSelectPopulationLevelContraceptiveMethod\n }\n onChangeYear={rest.onChangePopulationLevelYear}\n onSelectDirection={rest.onSelectPopulationLevelDirection}\n onChangeProbability={rest.onChangePopulationLevelProbability}\n />\n <p className={rest.classes.answer}>\n {rest.populationLevel != null ? rest.populationLevel.toFixed(0) : \"???\"}\n </p>\n </div>\n\n <Divider />\n\n <ProgressButton\n variant=\"contained\"\n color=\"primary\"\n disabled={!rest.valid}\n loading={rest.calculating}\n className={rest.classes.button}\n onClick={rest.onCalculate}\n >\n {t(\"Calculate\")}\n </ProgressButton>\n </div>\n);\n\nTargets.propTypes = {\n indicators: PropTypes.array.isRequired,\n indicatorProbabilityParameters: PropTypes.shape({\n indicator: PropTypes.string.isRequired,\n maritalStatus: maritalStatusPropType,\n year: PropTypes.number,\n direction: directionPropType,\n level: PropTypes.number,\n }).isRequired,\n indicatorProbability: PropTypes.number,\n indicatorLevelParameters: PropTypes.shape({\n indicator: PropTypes.string.isRequired,\n maritalStatus: maritalStatusPropType,\n year: PropTypes.number,\n probability: PropTypes.string,\n direction: directionPropType,\n }).isRequired,\n indicatorLevel: PropTypes.number,\n populationProbabilityParameters: PropTypes.shape({\n delta: deltaPropType,\n maritalStatus: maritalStatusPropType,\n contraceptiveMethod: PropTypes.string.isRequired,\n year: PropTypes.number,\n direction: directionPropType,\n level: PropTypes.number,\n }).isRequired,\n populationProbability: PropTypes.number,\n populationLevelParameters: PropTypes.shape({\n delta: deltaPropType,\n maritalStatus: maritalStatusPropType,\n contraceptiveMethod: PropTypes.string.isRequired,\n year: PropTypes.number,\n probability: PropTypes.string,\n direction: directionPropType,\n }).isRequired,\n populationLevel: PropTypes.number,\n valid: PropTypes.bool.isRequired,\n calculating: PropTypes.bool,\n onSelectIndicatorProbabilityIndicator: PropTypes.func.isRequired,\n onSelectIndicatorProbabilityMaritalStatus: PropTypes.func.isRequired,\n onChangeIndicatorProbabilityYear: PropTypes.func.isRequired,\n onSelectIndicatorProbabilityDirection: PropTypes.func.isRequired,\n onChangeIndicatorProbabilityLevel: PropTypes.func.isRequired,\n onSelectIndicatorLevelIndicator: PropTypes.func.isRequired,\n onSelectIndicatorLevelMaritalStatus: PropTypes.func.isRequired,\n onChangeIndicatorLevelYear: PropTypes.func.isRequired,\n onChangeIndicatorLevelProbability: PropTypes.func.isRequired,\n onSelectIndicatorLevelDirection: PropTypes.func.isRequired,\n onSelectPopulationProbabilityDelta: PropTypes.func.isRequired,\n onSelectPopulationProbabilityMaritalStatus: PropTypes.func.isRequired,\n onChangePopulationProbabilityRelativeToYear: PropTypes.func.isRequired,\n onSelectPopulationProbabilityContraceptiveMethod: PropTypes.func.isRequired,\n onChangePopulationProbabilityYear: PropTypes.func.isRequired,\n onSelectPopulationProbabilityDirection: PropTypes.func.isRequired,\n onChangePopulationProbabilityLevel: PropTypes.func.isRequired,\n onSelectPopulationLevelDelta: PropTypes.func.isRequired,\n onSelectPopulationLevelMaritalStatus: PropTypes.func.isRequired,\n onChangePopulationLevelRelativeToYear: PropTypes.func.isRequired,\n onSelectPopulationLevelContraceptiveMethod: PropTypes.func.isRequired,\n onChangePopulationLevelYear: PropTypes.func.isRequired,\n onChangePopulationLevelProbability: PropTypes.func.isRequired,\n onSelectPopulationLevelDirection: PropTypes.func.isRequired,\n onCalculate: PropTypes.func.isRequired,\n};\n\nTargets.defaultProps = {\n calculating: false,\n};\n\nexport default withTranslation()(withStyles(styles)(Targets));\n","import React, { Component } from \"react\";\nimport * as PropTypes from \"prop-types\";\nimport { contraceptiveMethods, indicators } from \"../constants\";\nimport { trimToRange, trimYearToRange } from \"../utilities\";\nimport * as api from \"../api/api\";\nimport Targets from \"../components/Targets/Targets\";\n\nconst createInitialState = () => ({\n indicatorProbabilityParameters: {\n indicator: indicators[0].value,\n maritalStatus: \"married\",\n direction: \"greaterThan\"\n },\n indicatorLevelParameters: {\n indicator: indicators[0].value,\n maritalStatus: \"married\",\n direction: \"greaterThan\"\n },\n populationProbabilityParameters: {\n delta: \"total\",\n maritalStatus: \"married\",\n contraceptiveMethod: contraceptiveMethods[0].value,\n direction: \"greaterThan\"\n },\n populationLevelParameters: {\n delta: \"total\",\n maritalStatus: \"married\",\n contraceptiveMethod: contraceptiveMethods[0].value,\n direction: \"greaterThan\"\n }\n});\n\nconst createPayload = state => {\n const payload = {};\n\n if (\n state.indicatorProbabilityParameters.year &&\n !isNaN(state.indicatorProbabilityParameters.level)\n ) {\n payload.indicatorProbabilityParameters = {\n ...state.indicatorProbabilityParameters,\n level: state.indicatorProbabilityParameters.level / 100\n };\n }\n\n if (\n state.indicatorLevelParameters.year &&\n !isNaN(state.indicatorLevelParameters.probability)\n ) {\n payload.indicatorLevelParameters = state.indicatorLevelParameters;\n }\n\n if (\n state.populationProbabilityParameters.year &&\n !isNaN(state.populationProbabilityParameters.level)\n ) {\n payload.populationProbabilityParameters =\n state.populationProbabilityParameters;\n }\n\n if (\n state.populationLevelParameters.year &&\n !isNaN(state.populationLevelParameters.probability)\n ) {\n payload.populationLevelParameters = state.populationLevelParameters;\n }\n\n return payload;\n};\n\nclass TargetsContainer extends Component {\n constructor(props) {\n super(props);\n\n this.signal = api.getSignal();\n\n this.state = createInitialState();\n }\n\n setStateSafely = (state, callback) => {\n if (!this.unmounting) {\n this.setState(state, callback);\n }\n };\n\n onSelectIndicatorProbabilityIndicator = indicator => {\n this.setStateSafely({\n indicatorProbabilityParameters: {\n ...this.state.indicatorProbabilityParameters,\n indicator\n }\n });\n };\n\n onSelectIndicatorProbabilityMaritalStatus = maritalStatus => {\n this.setStateSafely({\n indicatorProbabilityParameters: {\n ...this.state.indicatorProbabilityParameters,\n maritalStatus\n }\n });\n };\n\n onChangeIndicatorProbabilityYear = (year, enforceRange) => {\n year = trimYearToRange(year, enforceRange);\n\n this.setStateSafely({\n indicatorProbabilityParameters: {\n ...this.state.indicatorProbabilityParameters,\n year\n }\n });\n };\n\n onSelectIndicatorProbabilityDirection = direction => {\n this.setStateSafely({\n indicatorProbabilityParameters: {\n ...this.state.indicatorProbabilityParameters,\n direction\n }\n });\n };\n\n onChangeIndicatorProbabilityLevel = level => {\n level = trimToRange(level, 0, 100);\n\n this.setStateSafely({\n indicatorProbabilityParameters: {\n ...this.state.indicatorProbabilityParameters,\n level\n }\n });\n };\n\n onSelectIndicatorLevelIndicator = indicator => {\n this.setStateSafely({\n indicatorLevelParameters: {\n ...this.state.indicatorLevelParameters,\n indicator\n }\n });\n };\n\n onSelectIndicatorLevelMaritalStatus = maritalStatus => {\n this.setStateSafely({\n indicatorLevelParameters: {\n ...this.state.indicatorLevelParameters,\n maritalStatus\n }\n });\n };\n\n onChangeIndicatorLevelYear = (year, enforceRange) => {\n year = trimYearToRange(year, enforceRange);\n\n this.setStateSafely({\n indicatorLevelParameters: {\n ...this.state.indicatorLevelParameters,\n year\n }\n });\n };\n\n onChangeIndicatorLevelProbability = probability => {\n if (!probability) {\n probability = \"\";\n } else if (!probability.match(/^(0?(\\.\\d*)?|1)$/)) {\n probability = this.state.indicatorLevelParameters.probability;\n }\n\n this.setStateSafely({\n indicatorLevelParameters: {\n ...this.state.indicatorLevelParameters,\n probability\n }\n });\n };\n\n onSelectIndicatorLevelDirection = direction => {\n this.setStateSafely({\n indicatorLevelParameters: {\n ...this.state.indicatorLevelParameters,\n direction\n }\n });\n };\n\n onSelectPopulationProbabilityDelta = delta => {\n this.setStateSafely({\n populationProbabilityParameters: {\n ...this.state.populationProbabilityParameters,\n delta\n }\n });\n };\n\n onSelectPopulationProbabilityMaritalStatus = maritalStatus => {\n this.setStateSafely({\n populationProbabilityParameters: {\n ...this.state.populationProbabilityParameters,\n maritalStatus\n }\n });\n };\n\n onChangePopulationProbabilityRelativeToYear = (year, enforceRange) => {\n year = trimYearToRange(year, enforceRange);\n\n this.setStateSafely({\n populationProbabilityParameters: {\n ...this.state.populationProbabilityParameters,\n relativeToYear: year\n }\n });\n };\n\n onSelectPopulationProbabilityContraceptiveMethod = contraceptiveMethod => {\n this.setStateSafely({\n populationProbabilityParameters: {\n ...this.state.populationProbabilityParameters,\n contraceptiveMethod\n }\n });\n };\n\n onChangePopulationProbabilityYear = (year, enforceRange) => {\n year = trimYearToRange(year, enforceRange);\n\n this.setStateSafely({\n populationProbabilityParameters: {\n ...this.state.populationProbabilityParameters,\n year\n }\n });\n };\n\n onSelectPopulationProbabilityDirection = direction => {\n this.setStateSafely({\n populationProbabilityParameters: {\n ...this.state.populationProbabilityParameters,\n direction\n }\n });\n };\n\n onChangePopulationProbabilityLevel = level => {\n level = trimToRange(level, 0, Number.MAX_VALUE);\n\n this.setStateSafely({\n populationProbabilityParameters: {\n ...this.state.populationProbabilityParameters,\n level\n }\n });\n };\n\n onSelectPopulationLevelDelta = delta => {\n this.setStateSafely({\n populationLevelParameters: {\n ...this.state.populationLevelParameters,\n delta\n }\n });\n };\n\n onSelectPopulationLevelMaritalStatus = maritalStatus => {\n this.setStateSafely({\n populationLevelParameters: {\n ...this.state.populationLevelParameters,\n maritalStatus\n }\n });\n };\n\n onChangePopulationLevelRelativeToYear = (year, enforceRange) => {\n year = trimYearToRange(year, enforceRange);\n\n this.setStateSafely({\n populationLevelParameters: {\n ...this.state.populationLevelParameters,\n relativeToYear: year\n }\n });\n };\n\n onSelectPopulationLevelContraceptiveMethod = contraceptiveMethod => {\n this.setStateSafely({\n populationLevelParameters: {\n ...this.state.populationLevelParameters,\n contraceptiveMethod\n }\n });\n };\n\n onChangePopulationLevelYear = (year, enforceRange) => {\n year = trimYearToRange(year, enforceRange);\n\n this.setStateSafely({\n populationLevelParameters: {\n ...this.state.populationLevelParameters,\n year\n }\n });\n };\n\n onChangePopulationLevelProbability = probability => {\n if (!probability) {\n probability = \"\";\n } else if (!probability.match(/^(0?(\\.\\d*)?|1)$/)) {\n probability = this.state.populationLevelParameters.probability;\n }\n\n this.setStateSafely({\n populationLevelParameters: {\n ...this.state.populationLevelParameters,\n probability\n }\n });\n };\n\n onSelectPopulationLevelDirection = direction => {\n this.setStateSafely({\n populationLevelParameters: {\n ...this.state.populationLevelParameters,\n direction\n }\n });\n };\n\n onCalculate = () => {\n this.setStateSafely({\n calculating: true\n });\n\n const countryNumericCodeOrRegion =\n this.props.countryNumericCode || this.props.region;\n\n api\n .calculateTargets(\n this.props.runId,\n countryNumericCodeOrRegion,\n createPayload(this.state),\n this.signal.token\n )\n .then(response => {\n if (!response) {\n return;\n }\n\n this.setStateSafely({\n ...response.data\n });\n })\n .finally(() => {\n this.setStateSafely({\n calculating: false\n });\n });\n };\n\n componentWillUnmount() {\n this.unmounting = true;\n this.signal.cancel();\n }\n\n render() {\n return (\n <Targets\n indicators={indicators}\n contraceptiveMethods={contraceptiveMethods}\n indicatorProbabilityParameters={\n this.state.indicatorProbabilityParameters\n }\n indicatorProbability={this.state.indicatorProbability}\n indicatorLevelParameters={this.state.indicatorLevelParameters}\n indicatorLevel={this.state.indicatorLevel}\n populationProbabilityParameters={\n this.state.populationProbabilityParameters\n }\n populationProbability={this.state.populationProbability}\n populationLevelParameters={this.state.populationLevelParameters}\n populationLevel={this.state.populationLevel}\n valid={\n (!!this.props.countryNumericCode || !!this.props.region) &&\n Object.keys(createPayload(this.state)).length > 0\n }\n calculating={this.state.calculating}\n onSelectIndicatorProbabilityIndicator={\n this.onSelectIndicatorProbabilityIndicator\n }\n onSelectIndicatorProbabilityMaritalStatus={\n this.onSelectIndicatorProbabilityMaritalStatus\n }\n onChangeIndicatorProbabilityYear={this.onChangeIndicatorProbabilityYear}\n onSelectIndicatorProbabilityDirection={\n this.onSelectIndicatorProbabilityDirection\n }\n onChangeIndicatorProbabilityLevel={\n this.onChangeIndicatorProbabilityLevel\n }\n onSelectIndicatorLevelIndicator={this.onSelectIndicatorLevelIndicator}\n onSelectIndicatorLevelMaritalStatus={\n this.onSelectIndicatorLevelMaritalStatus\n }\n onChangeIndicatorLevelYear={this.onChangeIndicatorLevelYear}\n onChangeIndicatorLevelProbability={\n this.onChangeIndicatorLevelProbability\n }\n onSelectIndicatorLevelDirection={this.onSelectIndicatorLevelDirection}\n onSelectPopulationProbabilityDelta={\n this.onSelectPopulationProbabilityDelta\n }\n onSelectPopulationProbabilityMaritalStatus={\n this.onSelectPopulationProbabilityMaritalStatus\n }\n onChangePopulationProbabilityRelativeToYear={\n this.onChangePopulationProbabilityRelativeToYear\n }\n onSelectPopulationProbabilityContraceptiveMethod={\n this.onSelectPopulationProbabilityContraceptiveMethod\n }\n onChangePopulationProbabilityYear={\n this.onChangePopulationProbabilityYear\n }\n onSelectPopulationProbabilityDirection={\n this.onSelectPopulationProbabilityDirection\n }\n onChangePopulationProbabilityLevel={\n this.onChangePopulationProbabilityLevel\n }\n onSelectPopulationLevelDelta={this.onSelectPopulationLevelDelta}\n onSelectPopulationLevelMaritalStatus={\n this.onSelectPopulationLevelMaritalStatus\n }\n onChangePopulationLevelRelativeToYear={\n this.onChangePopulationLevelRelativeToYear\n }\n onSelectPopulationLevelContraceptiveMethod={\n this.onSelectPopulationLevelContraceptiveMethod\n }\n onChangePopulationLevelYear={this.onChangePopulationLevelYear}\n onChangePopulationLevelProbability={\n this.onChangePopulationLevelProbability\n }\n onSelectPopulationLevelDirection={this.onSelectPopulationLevelDirection}\n onCalculate={this.onCalculate}\n />\n );\n }\n}\n\nTargetsContainer.propTypes = {\n runId: PropTypes.string,\n countryNumericCode: PropTypes.number,\n region: PropTypes.string\n};\n\nexport default TargetsContainer;\n","import React from \"react\";\nimport * as PropTypes from \"prop-types\";\nimport {\n emuDatumPropType,\n indicatorResultPropType,\n labeledValuePropType,\n maritalStatusPropType,\n measurePropType,\n populationDatumPropType,\n periodPropType,\n resultPropType,\n surveyDatumPropType\n} from \"../../propTypes\";\nimport { Route, Switch, Redirect } from \"react-router-dom\";\nimport { withStyles } from \"@material-ui/core/styles\";\nimport { withTranslation } from \"react-i18next\";\nimport Charts from \"../Charts/Charts\";\nimport EmuData from \"../EmuData\";\nimport NavigationTab from \"../NavigationTab\";\nimport PopulationData from \"../PopulationData\";\nimport ProgressContainer from \"../../containers/ProgressContainer\";\nimport Results from \"../Results/Results\";\nimport SurveyData from \"../SurveyData\";\nimport TargetsContainer from \"../../containers/TargetsContainer\";\nimport Title from \"../Title\";\n\nconst styles = {\n tabPage: {\n margin: 10\n },\n title: {\n marginBottom: 20\n }\n};\n\nconst ViewRunMainContent = ({ match, t, ...rest }) => (\n <div>\n <div className={rest.classes.title}>\n <Title title={rest.runTitle} />\n </div>\n <NavigationTab to=\"/viewrun/survey\">{t(\"Survey data\")}</NavigationTab>\n <NavigationTab to=\"/viewrun/population\">\n {t(\"Population data\")}\n </NavigationTab>\n <NavigationTab to=\"/viewrun/emu\">{t(\"Service statistics\")}</NavigationTab>\n <NavigationTab to=\"/viewrun/results\">{t(\"Results\")}</NavigationTab>\n <NavigationTab to=\"/viewrun/charts\">{t(\"Charts\")}</NavigationTab>\n <NavigationTab to=\"/viewrun/targets\">{t(\"Targets\")}</NavigationTab>\n <NavigationTab to=\"/viewrun/progress\">{t(\"Progress\")}</NavigationTab>\n <div className={rest.classes.tabPage}>\n <Switch>\n <Route\n exact\n path={match.path}\n render={() => <Redirect replace to={`${match.path}/survey`} />}\n />\n <Route\n path={`${match.path}/survey`}\n render={() => <SurveyData data={rest.surveyData} />}\n />\n <Route\n path={`${match.path}/population`}\n render={() => <PopulationData data={rest.populationData} />}\n />\n <Route\n path={`${match.path}/emu`}\n render={() => <EmuData data={rest.emuData} />}\n />\n <Route\n path={`${match.path}/results`}\n render={() => (\n <Results\n selectedMeasure={rest.selectedResultsMeasure}\n selectedIndicator={rest.selectedResultsIndicator}\n selectedMaritalStatus={rest.selectedResultsMaritalStatus}\n results={rest.tableResults}\n selectedExportedMeasures={rest.selectedExportedResultsMeasures}\n selectedExportedIndicators={\n rest.selectedExportedResultsIndicators\n }\n disableSelectedResultsDownload={\n rest.disableSelectedResultsDownload\n }\n disableAllResultsDownload={rest.disableAllResultsDownload}\n disableAllDataDownload={rest.disableAllDataDownload}\n onChangeMeasure={rest.onChangeResultsMeasure}\n onChangeIndicator={rest.onChangeResultsIndicator}\n onChangeMaritalStatus={rest.onChangeResultsMaritalStatus}\n onToggleExportedMeasure={rest.onToggleExportedResultsMeasure}\n onToggleExportedIndicator={rest.onToggleExportedResultsIndicator}\n onDownloadSelectedResults={rest.onDownloadSelectedResults}\n onDownloadAllResults={rest.onDownloadAllResults}\n onDownloadAllData={rest.onDownloadAllData}\n />\n )}\n />\n <Route\n path={`${match.path}/charts`}\n render={() => (\n <Charts\n period={rest.period}\n selectedMeasure={rest.selectedChartsMeasure}\n selectedMaritalStatus={rest.selectedChartsMaritalStatus}\n selectedChartsIndicators={rest.selectedChartsIndicators}\n showSurveyLegend={rest.showSurveyLegend}\n results={rest.chartResults}\n surveyData={rest.chartSurveyData}\n emuData={rest.chartEmuData}\n chartSets={rest.chartSets}\n selectedExportedChartSet={rest.selectedExportedChartSet}\n selectedExportedMeasure={rest.selectedExportedChartsMeasure}\n selectedExportedMaritalStatus={\n rest.selectedExportedChartsMaritalStatus\n }\n disableChartSetDownload={rest.disableChartSetDownload}\n disableSelectedChartsDownload={rest.disableSelectedChartsDownload}\n onChangeMeasure={rest.onChangeChartsMeasure}\n onChangeMaritalStatus={rest.onChangeChartsMaritalStatus}\n onToggleChart={rest.onToggleChart}\n onToggleSurveyLegend={rest.onToggleSurveyLegend}\n onChangeExportedChartSet={rest.onChangeExportedChartSet}\n onChangeExportedMeasure={rest.onChangeExportedChartsMeasure}\n onChangeExportedMaritalStatus={\n rest.onChangeExportedChartsMaritalStatus\n }\n onDownloadChartSet={rest.onDownloadChartSet}\n onDownloadSelectedCharts={rest.onDownloadSelectedCharts}\n />\n )}\n />\n <Route\n path={`${match.path}/targets`}\n render={() => (\n <TargetsContainer\n runId={rest.selectedRunId}\n countryNumericCode={rest.selectedCountryNumericCode}\n region={rest.selectedRegion}\n />\n )}\n />\n <Route\n path={`${match.path}/progress`}\n render={() => (\n <ProgressContainer\n runId={rest.selectedRunId}\n countryNumericCode={rest.selectedCountryNumericCode}\n region={rest.selectedRegion}\n />\n )}\n />\n </Switch>\n </div>\n </div>\n);\n\nViewRunMainContent.propTypes = {\n selectedRunId: PropTypes.string,\n selectedCountryNumericCode: PropTypes.number,\n selectedRegion: PropTypes.string,\n period: periodPropType,\n runTitle: PropTypes.string,\n surveyData: PropTypes.arrayOf(surveyDatumPropType),\n populationData: PropTypes.arrayOf(populationDatumPropType),\n emuData: PropTypes.arrayOf(emuDatumPropType),\n selectedResultsMeasure: PropTypes.oneOf([\"percentage\", \"count\"]).isRequired,\n selectedResultsIndicator: PropTypes.string.isRequired,\n selectedResultsMaritalStatus: PropTypes.string.isRequired,\n tableResults: PropTypes.arrayOf(indicatorResultPropType),\n selectedExportedResultsMeasures: PropTypes.arrayOf(measurePropType),\n selectedExportedResultsIndicators: PropTypes.arrayOf(PropTypes.string),\n disableSelectedResultsDownload: PropTypes.bool.isRequired,\n disableAllResultsDownload: PropTypes.bool.isRequired,\n disableAllDataDownload: PropTypes.bool.isRequired,\n selectedChartsMeasure: measurePropType.isRequired,\n selectedChartsMaritalStatus: maritalStatusPropType,\n selectedChartsIndicators: PropTypes.arrayOf(PropTypes.string),\n showSurveyLegend: PropTypes.bool,\n chartResults: resultPropType,\n chartSurveyData: PropTypes.arrayOf(surveyDatumPropType),\n chartEmuData: PropTypes.arrayOf(emuDatumPropType),\n chartSets: PropTypes.arrayOf(labeledValuePropType),\n selectedExportedChartSet: PropTypes.string.isRequired,\n selectedExportedChartsMeasure: measurePropType.isRequired,\n selectedExportedChartsMaritalStatus: maritalStatusPropType,\n disableChartSetDownload: PropTypes.bool.isRequired,\n disableSelectedChartsDownload: PropTypes.bool.isRequired,\n onChangeResultsMeasure: PropTypes.func.isRequired,\n onChangeResultsIndicator: PropTypes.func.isRequired,\n onChangeResultsMaritalStatus: PropTypes.func.isRequired,\n onToggleExportedResultsMeasure: PropTypes.func.isRequired,\n onToggleExportedResultsIndicator: PropTypes.func.isRequired,\n onDownloadSelectedResults: PropTypes.func.isRequired,\n onDownloadAllResults: PropTypes.func.isRequired,\n onDownloadAllData: PropTypes.func.isRequired,\n onChangeChartsMeasure: PropTypes.func.isRequired,\n onChangeChartsMaritalStatus: PropTypes.func.isRequired,\n onToggleChart: PropTypes.func.isRequired,\n onToggleSurveyLegend: PropTypes.func.isRequired,\n onChangeExportedChartSet: PropTypes.func.isRequired,\n onChangeExportedChartsMeasure: PropTypes.func.isRequired,\n onChangeExportedChartsMaritalStatus: PropTypes.func.isRequired,\n onDownloadChartSet: PropTypes.func.isRequired,\n onDownloadSelectedCharts: PropTypes.func.isRequired\n};\n\nViewRunMainContent.defaultProps = {\n surveyData: [],\n populationData: [],\n emuData: [],\n tableResults: [],\n selectedChartsIndicators: [],\n showSurveyLegend: false,\n chartSurveyData: [],\n chartEmuData: [],\n chartSets: [],\n selectedExportedResultsMeasures: [],\n selectedExportedResultsIndicators: []\n};\n\nexport default withTranslation()(withStyles(styles)(ViewRunMainContent));\n","import contentWithDrawer from \"../contentWithDrawer\";\nimport DrawerContent from \"./ViewRunDrawerContent\";\nimport MainContent from \"./ViewRunMainContent\";\n\nconst ViewRun = contentWithDrawer(MainContent, DrawerContent);\n\nexport default ViewRun;\n","import React, { Component } from \"react\";\nimport * as queryString from \"query-string\";\nimport {\n defaultFirstYear,\n indicators,\n maximumYear,\n minimumYear\n} from \"../constants\";\nimport {\n createSlug,\n getDefaultLastYear,\n toggleSetExistence\n} from \"../utilities\";\nimport {\n convertMaritalStatusToIsInUnion,\n filterPopulationData,\n filterResults,\n filterSurveyData,\n getPeriod,\n normalizeChartSets,\n normalizeDatabases,\n normalizeEmuData,\n normalizePopulationData,\n normalizeResults,\n normalizeRuns,\n normalizeSurveyData\n} from \"../data\";\nimport * as api from \"../api/api\";\nimport fileDownload from \"js-file-download\";\nimport { withErrorBoundary } from \"../errors\";\nimport { withTranslation } from \"react-i18next\";\nimport ViewRun from \"../components/ViewRun/ViewRun\";\n\nconst createInitialState = () => ({\n period: {\n firstYear: defaultFirstYear,\n lastYear: getDefaultLastYear()\n },\n selectedResultsMeasure: \"percentage\",\n selectedResultsIndicator: indicators[0].value,\n selectedResultsMaritalStatus: \"married\",\n selectedExportedResultsMeasures: new Set(),\n selectedExportedResultsIndicators: new Set(),\n selectedChartsMeasure: \"percentage\",\n selectedChartsMaritalStatus: \"married\",\n selectedChartsIndicators: new Set(\n indicators\n .filter(indicator => indicator.chart)\n .map(indicator => indicator.value)\n ),\n showSurveyLegend: true,\n chartSets: [\n {\n value: \"complete\",\n label: \"Complete\"\n }\n ],\n selectedExportedChartSet: \"complete\",\n selectedExportedChartsMeasure: \"percentage\",\n selectedExportedChartsMaritalStatus: \"married\"\n});\n\nclass ViewRunContainer extends Component {\n constructor(props) {\n super(props);\n\n this.signal = api.getSignal();\n\n this.state = createInitialState();\n }\n\n setStateSafely = (state, callback) => {\n if (!this.unmounting) {\n this.setState(state, callback);\n }\n };\n\n getCountries = runId => {\n if (!runId) {\n return {};\n }\n\n const run = this.state.runs[runId];\n\n const divisions = this.state.databases[run.surveyDatabaseId].divisions;\n\n return run.countryNumericCodes.reduce((result, countryNumericCode) => {\n if (\n divisions[countryNumericCode] &&\n divisions[countryNumericCode].isCountry\n ) {\n result[countryNumericCode] = {\n numericCode: countryNumericCode,\n ...divisions[countryNumericCode]\n };\n }\n\n return result;\n }, {});\n };\n\n getRegions = runId => {\n if (!runId) {\n return [];\n }\n\n const run = this.state.runs[runId];\n\n return run.regionCodes || [];\n };\n\n selectDefaultCountryOrRegion = runId => {\n const countryNumericCodes = Object.keys(this.getCountries(runId));\n const regions = this.getRegions(runId);\n\n if (countryNumericCodes.length + regions.length === 1) {\n if (countryNumericCodes.length) {\n this.setStateSafely({\n selectedCountryNumericCode: parseInt(countryNumericCodes[0], 10)\n });\n } else {\n this.setStateSafely({\n selectedRegion: regions[0]\n });\n }\n }\n };\n\n getSelectedCountryNumericCodeOrRegion = () =>\n this.state.selectedRegion || this.state.selectedCountryNumericCode;\n\n createRunTitle = () => {\n let countryAlphaCodeOrRegion;\n\n if (this.state.selectedRegion) {\n countryAlphaCodeOrRegion = this.state.selectedRegion;\n } else if (this.state.selectedCountryNumericCode) {\n const selectedRun = this.state.runs[this.state.selectedRunId];\n\n countryAlphaCodeOrRegion = this.state.databases[\n selectedRun.surveyDatabaseId\n ].divisions[this.state.selectedCountryNumericCode].alphaCode;\n }\n\n if (countryAlphaCodeOrRegion) {\n const selectedRun = this.state.runs[this.state.selectedRunId];\n\n const { firstYear, lastYear } = this.state.period;\n\n return this.props.t(\n \"Run {{name}} for {{countryAlphaCodeOrRegion}} during {{firstYear}}-{{lastYear}}\",\n {\n name: selectedRun.name,\n countryAlphaCodeOrRegion,\n firstYear,\n lastYear\n }\n );\n }\n };\n\n viewRun = () => {\n this.setStateSafely({\n loadingRun: true\n });\n\n const run = this.state.runs[this.state.selectedRunId];\n\n const countryNumericCodeOrRegion =\n this.state.selectedRegion || this.state.selectedCountryNumericCode;\n\n // noinspection JSCheckFunctionSignatures\n Promise.all([\n api.fetchSurveyDatabase(\n run.surveyDatabaseId,\n countryNumericCodeOrRegion,\n this.state.selectedRunId,\n this.signal.token\n ),\n api.fetchPopulationDatabase(\n run.populationDatabaseId,\n countryNumericCodeOrRegion,\n this.signal.token\n ),\n api.fetchResults(\n this.state.selectedRunId,\n undefined,\n countryNumericCodeOrRegion,\n this.signal.token\n ),\n run.emuDatabaseId\n ? api.fetchEmuDatabase(\n run.emuDatabaseId,\n countryNumericCodeOrRegion,\n this.signal.token\n )\n : new Promise(resolve =>\n resolve({\n data: []\n })\n )\n ])\n .then(response => {\n console.log(\"Fetched survey\");\n\n if (!response || response.some(item => !item)) {\n return;\n }\n\n const [surveyData, populationData, results, emuData] = response;\n\n const period = getPeriod(results.data.proportions);\n\n this.setStateSafely({\n period,\n surveyData: normalizeSurveyData(surveyData.data),\n populationData: normalizePopulationData(populationData.data),\n emuData: normalizeEmuData(emuData.data),\n results: {\n proportions: normalizeResults(results.data.proportions),\n populations: normalizeResults(results.data.populations)\n }\n });\n })\n .finally(() => {\n this.setStateSafely({\n loadingRun: false\n });\n });\n };\n\n getMeasureResultsForPeriod = measure => {\n if (!this.state.results) {\n return;\n }\n\n const measureKey = measure === \"percentage\" ? \"proportions\" : \"populations\";\n\n return filterResults(\n this.state.results[measureKey],\n this.state.period.firstYear,\n this.state.period.lastYear\n );\n };\n\n getTableResults = () => {\n const results = this.getMeasureResultsForPeriod(\n this.state.selectedResultsMeasure\n );\n\n if (!results) {\n return results;\n }\n\n const isInUnion = convertMaritalStatusToIsInUnion(\n this.state.selectedResultsMaritalStatus\n );\n\n return results[this.state.selectedResultsIndicator].filter(\n datum => datum.isInUnion === isInUnion\n );\n };\n\n getChartSurveyData = surveyData => {\n if (!surveyData) {\n return;\n }\n\n const isInUnion = convertMaritalStatusToIsInUnion(\n this.state.selectedChartsMaritalStatus\n );\n\n return surveyData.filter(datum => datum.isInUnion === isInUnion);\n };\n\n getChartResults = () => {\n const measureResultsForPeriod = this.getMeasureResultsForPeriod(\n this.state.selectedChartsMeasure\n );\n\n if (!measureResultsForPeriod) {\n return;\n }\n\n const isInUnion = convertMaritalStatusToIsInUnion(\n this.state.selectedChartsMaritalStatus\n );\n\n const results = Object.keys(measureResultsForPeriod).reduce(\n (result, indicator) => {\n if (this.state.selectedChartsIndicators.has(indicator)) {\n result[indicator] = measureResultsForPeriod[indicator].filter(\n datum => datum.isInUnion === isInUnion\n );\n }\n\n return result;\n },\n {}\n );\n\n if (\n !Object.keys(results).length ||\n !results[Object.keys(results)[0]].length\n ) {\n return;\n }\n\n return results;\n };\n\n onSelectRun = runId => {\n this.setStateSafely({\n selectedRunId: runId,\n selectedCountryNumericCode: undefined,\n selectedRegion: undefined\n });\n\n this.selectDefaultCountryOrRegion(runId);\n };\n\n onSelectCountry = countryNumericCode => {\n this.setStateSafely({\n selectedCountryNumericCode: countryNumericCode,\n selectedRegion: undefined\n });\n };\n\n onSelectRegion = region => {\n this.setStateSafely({\n selectedRegion: region\n });\n };\n\n onChangePeriod = period => {\n this.setStateSafely({\n period\n });\n };\n\n onViewRun = () => {\n this.viewRun();\n };\n\n onChangeResultsMeasure = measure => {\n this.setStateSafely({\n selectedResultsMeasure: measure,\n selectedResultsIndicator:\n measure === \"percentage\" ||\n this.state.selectedResultsIndicator !== \"ratioModernAny\"\n ? this.state.selectedResultsIndicator\n : indicators[0].value\n });\n };\n\n onChangeResultsIndicator = indicator => {\n this.setStateSafely({\n selectedResultsIndicator: indicator\n });\n };\n\n onChangeResultsMaritalStatus = martialStatus => {\n this.setStateSafely({\n selectedResultsMaritalStatus: martialStatus\n });\n };\n\n onToggleExportedResultsMeasure = measure => {\n const selectedExportedResultsMeasures = new Set(\n this.state.selectedExportedResultsMeasures\n );\n\n toggleSetExistence(selectedExportedResultsMeasures, measure);\n\n this.setStateSafely({\n selectedExportedResultsMeasures\n });\n };\n\n onToggleExportedResultsIndicator = indicator => {\n const selectedExportedResultsIndicators = new Set(\n this.state.selectedExportedResultsIndicators\n );\n\n toggleSetExistence(selectedExportedResultsIndicators, indicator);\n\n this.setStateSafely({\n selectedExportedResultsIndicators\n });\n };\n\n onDownloadSelectedResults = () => {\n api\n .downloadResults(\n this.state.selectedRunId,\n undefined,\n this.getSelectedCountryNumericCodeOrRegion(),\n Array.from(this.state.selectedExportedResultsMeasures),\n Array.from(this.state.selectedExportedResultsIndicators),\n this.signal.token\n )\n .then(response => {\n if (!response) {\n return;\n }\n\n const run = this.state.runs[this.state.selectedRunId];\n\n if (run) {\n fileDownload(response.data, createSlug(run.name, \"results.csv\"));\n }\n });\n };\n\n onDownloadAllResults = () => {\n api\n .downloadResults(\n this.state.selectedRunId,\n undefined,\n this.getSelectedCountryNumericCodeOrRegion(),\n [\"percentage\", \"count\"],\n indicators.map(indicator => indicator.value),\n this.signal.token\n )\n .then(response => {\n if (!response) {\n return;\n }\n\n const run = this.state.runs[this.state.selectedRunId];\n\n if (run) {\n fileDownload(response.data, createSlug(run.name, \"all_results.csv\"));\n }\n });\n };\n\n onDownloadAllData = () => {\n api\n .downloadData(\n this.state.selectedRunId,\n this.getSelectedCountryNumericCodeOrRegion(),\n this.signal.token\n )\n .then(response => {\n if (!response) {\n return;\n }\n\n const run = this.state.runs[this.state.selectedRunId];\n\n if (run) {\n fileDownload(response.data, createSlug(run.name, \"all_data.zip\"));\n }\n });\n };\n\n onChangeChartsMeasure = measure => {\n this.setStateSafely({\n selectedChartsMeasure: measure\n });\n };\n\n onChangeChartsMaritalStatus = martialStatus => {\n this.setStateSafely({\n selectedChartsMaritalStatus: martialStatus\n });\n };\n\n onToggleChart = chart => {\n const selectedChartsIndicators = new Set(\n this.state.selectedChartsIndicators\n );\n\n toggleSetExistence(selectedChartsIndicators, chart);\n\n this.setStateSafely({\n selectedChartsIndicators\n });\n };\n\n onToggleSurveyLegend = () => {\n this.setStateSafely({\n showSurveyLegend: !this.state.showSurveyLegend\n });\n };\n\n onChangeExportedChartSet = chartSet => {\n this.setStateSafely({\n selectedExportedChartSet: chartSet\n });\n };\n\n onChangeExportedChartsMeasure = measure => {\n this.setStateSafely({\n selectedExportedChartsMeasure: measure\n });\n };\n\n onChangeExportedChartsMaritalStatus = maritalStatus => {\n this.setStateSafely({\n selectedExportedChartsMaritalStatus: maritalStatus\n });\n };\n\n onDownloadChartSet = () => {\n api\n .downloadChartSet(\n this.state.selectedRunId,\n undefined,\n this.getSelectedCountryNumericCodeOrRegion(),\n this.state.selectedExportedChartSet,\n this.state.selectedExportedChartsMaritalStatus,\n this.state.selectedExportedChartsMeasure,\n this.signal.token\n )\n .then(response => {\n if (!response) {\n return;\n }\n\n const run = this.state.runs[this.state.selectedRunId];\n\n if (run) {\n const prefix = `${run.name}_${this.state.selectedExportedChartSet}`;\n\n fileDownload(response.data, createSlug(prefix, \"charts.pdf\"));\n }\n });\n };\n\n onDownloadSelectedCharts = () => {\n api\n .downloadCharts(\n this.state.selectedRunId,\n undefined,\n this.getSelectedCountryNumericCodeOrRegion(),\n this.state.selectedExportedChartsMaritalStatus,\n this.state.selectedExportedChartsMeasure,\n Array.from(this.state.selectedChartsIndicators),\n this.signal.token\n )\n .then(response => {\n if (!response) {\n return;\n }\n\n const run = this.state.runs[this.state.selectedRunId];\n\n if (run) {\n fileDownload(response.data, createSlug(run.name, \"charts.pdf\"));\n }\n });\n };\n\n componentDidMount() {\n this.setStateSafely({\n loadingData: true\n });\n\n // noinspection JSCheckFunctionSignatures\n Promise.all([\n api.fetchDatabases(this.signal.token),\n api.fetchRuns(false, false, this.signal.token),\n api.fetchChartSets(this.signal.token)\n ])\n .then(response => {\n if (!response || response.some(item => !item)) {\n return;\n }\n\n const databases = normalizeDatabases(response[0].data);\n const runs = normalizeRuns(response[1].data);\n const chartSets = normalizeChartSets(response[2].data);\n\n let { run: selectedRunId } = queryString.parse(\n this.props.location.search\n );\n\n if (selectedRunId && !runs[selectedRunId]) {\n console.log(`Run ${selectedRunId} does not exist`);\n\n selectedRunId = undefined;\n }\n\n const selectedRegion =\n (selectedRunId &&\n runs[selectedRunId] &&\n runs[selectedRunId].regionCodes.length &&\n runs[selectedRunId].regionCodes[0]) ||\n undefined;\n\n const selectedCountryNumericCode =\n (!selectedRegion &&\n selectedRunId &&\n runs[selectedRunId] &&\n runs[selectedRunId].countryNumericCodes.length &&\n runs[selectedRunId].countryNumericCodes[0]) ||\n undefined;\n\n this.setStateSafely(\n {\n databases: databases,\n runs: runs,\n selectedRunId,\n selectedCountryNumericCode,\n selectedRegion,\n chartSets\n },\n selectedRunId\n ? () => {\n this.viewRun();\n }\n : undefined\n );\n })\n .finally(() => {\n this.setStateSafely({\n loadingData: false\n });\n });\n }\n\n componentWillUnmount() {\n this.unmounting = true;\n this.signal.cancel();\n }\n\n render() {\n const { firstYear, lastYear } = {\n firstYear: minimumYear,\n lastYear: maximumYear\n };\n\n const surveyData = filterSurveyData(\n this.state.surveyData,\n firstYear,\n lastYear\n );\n\n const populationData = filterPopulationData(\n this.state.populationData,\n firstYear,\n lastYear\n );\n\n return (\n <ViewRun\n match={this.props.match}\n loadingData={this.state.loadingData}\n runs={this.state.runs}\n selectedRunId={this.state.selectedRunId}\n countries={this.getCountries(this.state.selectedRunId)}\n selectedCountryNumericCode={this.state.selectedCountryNumericCode}\n regions={this.getRegions(this.state.selectedRunId)}\n selectedRegion={this.state.selectedRegion}\n period={this.state.period}\n loadingRun={this.state.loadingRun}\n runTitle={this.createRunTitle()}\n surveyData={surveyData}\n populationData={populationData}\n emuData={this.state.emuData}\n selectedResultsMeasure={this.state.selectedResultsMeasure}\n selectedResultsIndicator={this.state.selectedResultsIndicator}\n selectedResultsMaritalStatus={this.state.selectedResultsMaritalStatus}\n tableResults={this.getTableResults()}\n selectedExportedResultsMeasures={Array.from(\n this.state.selectedExportedResultsMeasures\n )}\n selectedExportedResultsIndicators={Array.from(\n this.state.selectedExportedResultsIndicators\n )}\n disableSelectedResultsDownload={\n !api.createResultsDownloadUrl(\n this.state.selectedRunId,\n undefined,\n this.getSelectedCountryNumericCodeOrRegion(),\n Array.from(this.state.selectedExportedResultsMeasures),\n Array.from(this.state.selectedExportedResultsIndicators)\n )\n }\n disableAllResultsDownload={\n !this.getSelectedCountryNumericCodeOrRegion()\n }\n disableAllDataDownload={!this.getSelectedCountryNumericCodeOrRegion()}\n selectedChartsMeasure={this.state.selectedChartsMeasure}\n selectedChartsMaritalStatus={this.state.selectedChartsMaritalStatus}\n selectedChartsIndicators={Array.from(\n this.state.selectedChartsIndicators\n )}\n showSurveyLegend={this.state.showSurveyLegend}\n chartResults={this.getChartResults()}\n chartSurveyData={this.getChartSurveyData(surveyData)}\n chartEmuData={\n this.state.selectedChartsMaritalStatus === \"married\"\n ? this.state.emuData\n : undefined\n }\n chartSets={this.state.chartSets}\n selectedExportedChartSet={this.state.selectedExportedChartSet}\n selectedExportedChartsMeasure={this.state.selectedExportedChartsMeasure}\n selectedExportedChartsMaritalStatus={\n this.state.selectedExportedChartsMaritalStatus\n }\n disableChartSetDownload={\n !api.createChartSetDownloadUrl(\n this.state.selectedRunId,\n undefined,\n this.getSelectedCountryNumericCodeOrRegion(),\n this.state.selectedExportedChartSet,\n this.state.selectedExportedChartsMaritalStatus,\n this.state.selectedExportedChartsMeasure\n )\n }\n disableSelectedChartsDownload={\n !api.createChartsDownloadUrl(\n this.state.selectedRunId,\n undefined,\n this.getSelectedCountryNumericCodeOrRegion(),\n this.state.selectedExportedChartsMaritalStatus,\n this.state.selectedExportedChartsMeasure,\n Array.from(this.state.selectedChartsIndicators)\n )\n }\n onSelectRun={this.onSelectRun}\n onSelectCountry={this.onSelectCountry}\n onSelectRegion={this.onSelectRegion}\n onChangePeriod={this.onChangePeriod}\n onViewRun={this.onViewRun}\n onChangeResultsMeasure={this.onChangeResultsMeasure}\n onChangeResultsIndicator={this.onChangeResultsIndicator}\n onChangeResultsMaritalStatus={this.onChangeResultsMaritalStatus}\n onToggleExportedResultsMeasure={this.onToggleExportedResultsMeasure}\n onToggleExportedResultsIndicator={this.onToggleExportedResultsIndicator}\n onDownloadSelectedResults={this.onDownloadSelectedResults}\n onDownloadAllResults={this.onDownloadAllResults}\n onDownloadAllData={this.onDownloadAllData}\n onChangeChartsMeasure={this.onChangeChartsMeasure}\n onChangeChartsMaritalStatus={this.onChangeChartsMaritalStatus}\n onToggleChart={this.onToggleChart}\n onToggleSurveyLegend={this.onToggleSurveyLegend}\n onChangeExportedChartSet={this.onChangeExportedChartSet}\n onChangeExportedChartsMeasure={this.onChangeExportedChartsMeasure}\n onChangeExportedChartsMaritalStatus={\n this.onChangeExportedChartsMaritalStatus\n }\n onDownloadChartSet={this.onDownloadChartSet}\n onDownloadSelectedCharts={this.onDownloadSelectedCharts}\n />\n );\n }\n}\n\nexport default withTranslation()(withErrorBoundary(ViewRunContainer));\n","import React from \"react\";\nimport * as PropTypes from \"prop-types\";\nimport { Link, Route, Switch, withRouter } from \"react-router-dom\";\nimport { withStyles } from \"@material-ui/core/styles\";\nimport AppBar from \"@material-ui/core/AppBar\";\nimport Button from \"@material-ui/core/Button\";\nimport Tab from \"@material-ui/core/Tab\";\nimport Tabs from \"@material-ui/core/Tabs\";\nimport Toolbar from \"@material-ui/core/Toolbar\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { useTranslation } from \"react-i18next\";\nimport About from \"./About\";\nimport CompareRunsContainer from \"../containers/CompareRunsContainer\";\nimport LanguageChooser from \"./LanguageChooser/LanguageChooser\";\nimport ManageDataContainer from \"../containers/ManageDataContainer\";\nimport PrepareDataContainer from \"../containers/PrepareDataContainer\";\nimport RunHistoryContainer from \"../containers/RunHistoryContainer\";\nimport StartRunContainer from \"../containers/StartRunContainer\";\nimport ViewRunContainer from \"../containers/ViewRunContainer\";\n\nconst styles = (theme) => ({\n appBar: {\n zIndex: theme.zIndex.drawer + 1,\n },\n brand: {\n marginRight: 30,\n whiteSpace: \"nowrap\",\n },\n content: {\n margin: 20,\n },\n languages: {\n marginRight: 20,\n },\n signOut: {\n display: \"flex\",\n flexGrow: 1,\n justifyContent: \"flex-end\",\n },\n signOutLabel: {\n whiteSpace: \"nowrap\",\n },\n});\n\nconst getMainSectionPath = (path) => `/${path.split(\"/\")[1]}`;\n\nconst App = (props) => {\n const mainSectionPath = getMainSectionPath(props.location.pathname);\n\n const { t } = useTranslation();\n\n return (\n <div>\n <AppBar position=\"sticky\" className={props.classes.appBar}>\n <Toolbar variant=\"dense\">\n <Typography\n variant=\"h6\"\n color=\"inherit\"\n className={props.classes.brand}\n >\n {t(\"APP_TITLE\")}\n </Typography>\n\n <Tabs\n variant=\"scrollable\"\n scrollButtons=\"auto\"\n value={mainSectionPath}\n >\n <Tab label={t(\"About\")} value=\"/\" component={Link} to=\"/\" />\n <Tab\n label={t(\"Start run|APP\", {\n defaultValue: \"Start run\",\n })}\n value=\"/startrun\"\n component={Link}\n to=\"/startrun\"\n />\n <Tab\n label={t(\"View run\")}\n value=\"/viewrun\"\n component={Link}\n to=\"/viewrun\"\n />\n <Tab\n label={t(\"Compare runs\")}\n value=\"/compareruns\"\n component={Link}\n to=\"/compareruns\"\n />\n <Tab\n label={t(\"Run history\")}\n value=\"/history\"\n component={Link}\n to=\"/history\"\n />\n <Tab\n label={t(\"Prepare data\")}\n value=\"/preparedata\"\n component={Link}\n to=\"/preparedata\"\n />\n <Tab\n label={t(\"Manage data\")}\n value=\"/managedata\"\n component={Link}\n to=\"/managedata\"\n />\n </Tabs>\n\n <div className={props.classes.languages}>\n <LanguageChooser onChangeLanguage={props.onChangeLanguage} />\n </div>\n\n <div className={props.classes.signIn}>\n <Button\n color=\"inherit\"\n classes={{\n label: props.classes.signOutLabel,\n }}\n onClick={props.onLogout}\n >\n {t(\"Sign out\")}\n </Button>\n </div>\n </Toolbar>\n </AppBar>\n\n <div className={props.classes.content}>\n <Switch>\n <Route exact path=\"/\" component={About} />\n <Route path=\"/startrun\" component={StartRunContainer} />\n <Route path=\"/viewrun\" component={ViewRunContainer} />\n <Route path=\"/compareruns\" component={CompareRunsContainer} />\n <Route path=\"/history\" component={RunHistoryContainer} />\n <Route path=\"/preparedata\" component={PrepareDataContainer} />\n <Route path=\"/managedata\" component={ManageDataContainer} />\n />\n </Switch>\n </div>\n </div>\n );\n};\n\nApp.propTypes = {\n onChangeLanguage: PropTypes.func.isRequired,\n onLogout: PropTypes.func.isRequired,\n};\n\nexport default withRouter(withStyles(styles)(App));\n","import React, { Component } from \"react\";\nimport authentication from \"../authentication\";\nimport * as api from \"../api/api\";\nimport i18next from \"i18next\";\nimport App from \"../components/App\";\n\nclass AppContainer extends Component {\n constructor(props) {\n super(props);\n\n this.signal = api.getSignal();\n\n this.state = {};\n }\n\n setStateSafely = (state, callback) => {\n if (!this.unmounting) {\n this.setState(state, callback);\n }\n };\n\n onChangeLanguage = language => {\n // noinspection JSIgnoredPromiseFromCall\n i18next.changeLanguage(language).then(() => {\n document.title = i18next.t(\"APP_TITLE\");\n });\n };\n\n onLogout = () => {\n authentication.logout(error => {\n this.setStateSafely({\n error\n });\n\n if (!error) {\n this.props.history.push(\"/login\");\n }\n }, this.signal.token);\n };\n\n componentWillUnmount() {\n this.unmounting = true;\n this.signal.cancel();\n }\n\n render() {\n return (\n <App onChangeLanguage={this.onChangeLanguage} onLogout={this.onLogout} />\n );\n }\n}\n\nexport default AppContainer;\n","import React from \"react\";\nimport * as PropTypes from \"prop-types\";\nimport withStyles from \"@material-ui/core/styles/withStyles\";\nimport Avatar from \"@material-ui/core/Avatar\";\nimport Button from \"@material-ui/core/Button\";\nimport Checkbox from \"@material-ui/core/Checkbox\";\nimport FormControl from \"@material-ui/core/FormControl\";\nimport FormControlLabel from \"@material-ui/core/FormControlLabel\";\nimport Input from \"@material-ui/core/Input\";\nimport InputLabel from \"@material-ui/core/InputLabel\";\nimport Paper from \"@material-ui/core/Paper\";\nimport Typography from \"@material-ui/core/Typography\";\nimport LockOutlinedIcon from \"@material-ui/icons/LockOutlined\";\nimport { withTranslation } from \"react-i18next\";\nimport LanguageChooser from \"./LanguageChooser/LanguageChooser\";\nimport LastUpdated from \"./LastUpdated\";\n\nconst styles = (theme) => ({\n avatar: {\n margin: theme.spacing.unit,\n backgroundColor: theme.palette.secondary.main,\n },\n container: {\n width: \"auto\",\n display: \"block\", // Fix IE 11 issue\n marginLeft: theme.spacing.unit * 3,\n marginRight: theme.spacing.unit * 3,\n [theme.breakpoints.up(400 + theme.spacing.unit * 3 * 2)]: {\n width: 400,\n marginLeft: \"auto\",\n marginRight: \"auto\",\n },\n },\n error: {\n marginTop: 20,\n fontWeight: \"bold\",\n color: theme.palette.error.dark,\n },\n form: {\n width: \"100%\", // Fix IE 11 issue\n marginTop: theme.spacing.unit,\n },\n languages: {\n margin: \"20px 0 10px\",\n textAlign: \"center\",\n },\n lastUpdated: {\n textAlign: \"center\",\n },\n paper: {\n marginTop: theme.spacing.unit * 8,\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n padding: `${theme.spacing.unit * 2}px ${theme.spacing.unit * 3}px ${theme\n .spacing.unit * 3}px`,\n },\n register: {\n marginTop: 20,\n },\n submit: {\n marginTop: theme.spacing.unit * 3,\n },\n});\n\nconst Login = ({ classes, t, ...rest }) => (\n <div className={classes.container}>\n <Paper className={classes.paper}>\n <Avatar className={classes.avatar}>\n <LockOutlinedIcon />\n </Avatar>\n\n <Typography component=\"h1\" variant=\"h5\">\n {t(\"Sign in\")}\n </Typography>\n\n {rest.systemStatusMessage ? (\n <div className={classes.error}>{rest.systemStatusMessage}</div>\n ) : (\n undefined\n )}\n\n {rest.error ? (\n <div className={classes.error}>{rest.error}</div>\n ) : (\n undefined\n )}\n\n <form className={classes.form}>\n <FormControl margin=\"normal\" required fullWidth>\n <InputLabel htmlFor=\"username\">{t(\"Username\")}</InputLabel>\n <Input\n id=\"username\"\n name=\"username\"\n autoComplete=\"username\"\n autoFocus\n value={rest.username || \"\"}\n onChange={(e) => {\n rest.onChangeUsername(e.target.value);\n }}\n />\n </FormControl>\n\n <FormControl margin=\"normal\" required fullWidth>\n <InputLabel htmlFor=\"password\">{t(\"Password\")}</InputLabel>\n <Input\n name=\"password\"\n type=\"password\"\n id=\"password\"\n value={rest.password || \"\"}\n autoComplete=\"current-password\"\n onChange={(e) => {\n rest.onChangePassword(e.target.value);\n }}\n />\n </FormControl>\n\n <FormControlLabel\n control={<Checkbox value=\"remember\" color=\"primary\" />}\n label={t(\"Remember me\")}\n checked={rest.rememberMe}\n onChange={rest.onToggleRememberMe}\n />\n\n <Button\n type=\"submit\"\n fullWidth\n variant=\"contained\"\n color=\"primary\"\n className={classes.submit}\n disabled={!rest.systemOperational}\n onClick={(e) => {\n e.preventDefault();\n\n rest.onSubmit(e);\n }}\n >\n {t(\"Sign in\")}\n </Button>\n\n <div className={classes.register}>\n {t(\"Don't have an account?\")}{\" \"}\n <a\n href={`https://authuser.avenirhealth.org/?sv=${\n process.env.REACT_APP_AUTHENTICATION_SERVICE_ID\n }&md=new`}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {t(\"Register\")}\n </a>{\" \"}\n {t(\"now.\")}\n </div>\n\n <div className={classes.register}>\n {t(\"Forgotten your password?\")}{\" \"}\n <a\n href={`https://authuser.avenirhealth.org/?sv=${\n process.env.REACT_APP_AUTHENTICATION_SERVICE_ID\n }&md=fg`}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {t(\"Reset\")}\n </a>{\" \"}\n {t(\"it.\")}\n </div>\n </form>\n </Paper>\n\n <div className={classes.languages}>\n <LanguageChooser onChangeLanguage={rest.onChangeLanguage} />\n </div>\n\n <div className={classes.lastUpdated}>\n <LastUpdated />\n </div>\n </div>\n);\n\nLogin.propTypes = {\n systemOperational: PropTypes.bool,\n systemStatusMessage: PropTypes.string,\n username: PropTypes.string,\n password: PropTypes.string,\n rememberMe: PropTypes.bool.isRequired,\n error: PropTypes.string,\n onChangeUsername: PropTypes.func.isRequired,\n onChangePassword: PropTypes.func.isRequired,\n onToggleRememberMe: PropTypes.func.isRequired,\n onSubmit: PropTypes.func.isRequired,\n onChangeLanguage: PropTypes.func.isRequired,\n};\n\nLogin.defaultProps = {\n systemOperational: true,\n};\n\nexport default withTranslation()(withStyles(styles)(Login));\n","import React, { Component } from \"react\";\nimport LogRocket from \"logrocket\";\nimport authentication from \"../authentication\";\nimport { Redirect } from \"react-router-dom\";\nimport * as api from \"../api/api\";\nimport i18next from \"i18next\";\nimport Login from \"../components/Login\";\n\nclass LoginContainer extends Component {\n constructor(props) {\n super(props);\n\n this.signal = api.getSignal();\n\n this.state = {\n rememberMe: false\n };\n }\n\n setStateSafely = (state, callback) => {\n if (!this.unmounting) {\n this.setState(state, callback);\n }\n };\n\n onChangeUsername = username => {\n this.setStateSafely({\n username\n });\n };\n\n onChangePassword = password => {\n this.setStateSafely({\n password\n });\n };\n\n onToggleRememberMe = () => {\n this.setStateSafely({\n rememberMe: !this.state.rememberMe\n });\n };\n\n onSubmit = () => {\n authentication.login(\n this.state.username,\n this.state.password,\n error => {\n if (!error) {\n LogRocket.identify(this.state.username);\n }\n\n this.setStateSafely({\n redirectToReferrer: !error,\n error: error\n ? `${this.state.username} could not be authenticated`\n : undefined\n });\n },\n this.signal.token\n );\n };\n\n onChangeLanguage = language => {\n // noinspection JSIgnoredPromiseFromCall\n i18next.changeLanguage(language);\n };\n\n componentDidMount() {\n api.fetchSystemStatus().then(response => {\n if (!response) {\n return;\n }\n\n this.setStateSafely({\n systemOperational: response.data.systemOperational,\n systemStatusMessage: response.data.message\n });\n });\n }\n\n componentWillUnmount() {\n this.unmounting = true;\n this.signal.cancel();\n }\n\n render() {\n if (this.state.redirectToReferrer) {\n const { from } = this.props.location.state || { from: { pathname: \"/\" } };\n\n return <Redirect to={from} />;\n }\n\n return (\n <Login\n systemOperational={this.state.systemOperational}\n systemStatusMessage={this.state.systemStatusMessage}\n username={this.state.username}\n password={this.state.password}\n rememberMe={this.state.rememberMe}\n error={this.state.error}\n onChangeUsername={this.onChangeUsername}\n onChangePassword={this.onChangePassword}\n onToggleRememberMe={this.onToggleRememberMe}\n onSubmit={this.onSubmit}\n onChangeLanguage={this.onChangeLanguage}\n />\n );\n }\n}\n\nexport default LoginContainer;\n","import React from \"react\";\nimport authentication from \"../authentication\";\nimport { Redirect, Route } from \"react-router-dom\";\n\n// https://tylermcginnis.com/react-router-protected-routes-authentication/\n\nconst PrivateRoute = ({ component: Component, ...rest }) => (\n <Route\n {...rest}\n render={props =>\n authentication.getUsername() ? (\n <Component {...props} />\n ) : (\n <Redirect\n to={{ pathname: \"/login\", state: { from: props.location } }}\n />\n )\n }\n />\n);\n\nexport default PrivateRoute;\n","import React, { Component } from \"react\";\nimport { Route, HashRouter as Router, Switch } from \"react-router-dom\";\nimport { MuiThemeProvider } from \"@material-ui/core/styles\";\nimport CssBaseline from \"@material-ui/core/CssBaseline\";\nimport { withErrorBoundary } from \"./errors\";\nimport { withTranslation } from \"react-i18next\";\nimport theme from \"./theme\";\nimport AppContainer from \"./containers/AppContainer\";\nimport LoginContainer from \"./containers/LoginContainer\";\nimport PrivateRoute from \"./components/PrivateRoute\";\n\nclass Root extends Component {\n constructor(props) {\n super(props);\n\n this.state = {};\n }\n\n componentDidMount() {\n document.title = this.props.t(\"APP_TITLE\");\n }\n\n render() {\n return (\n <Router>\n <MuiThemeProvider theme={theme}>\n <CssBaseline />\n <Switch>\n <Route path=\"/login\" component={LoginContainer} />\n <PrivateRoute path=\"/\" component={AppContainer} />\n </Switch>\n </MuiThemeProvider>\n </Router>\n );\n }\n}\n\nexport default withErrorBoundary(withTranslation()(Root));\n","import \"core-js/fn/promise\";\nimport React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport * as Sentry from \"@sentry/browser\";\nimport LogRocket from \"logrocket\";\nimport \"./index.css\";\nimport { LicenseManager } from \"ag-grid-enterprise\";\nimport \"./i18n\";\nimport Root from \"./Root\";\n\nconst integrateLogRocketWithSentry = (sessionUrl) => {\n Sentry.configureScope((scope) => {\n scope.addEventProcessor(async (event) => {\n event.extra.sessionURL = sessionUrl;\n return event;\n });\n });\n};\n\nSentry.init({\n dsn: process.env.REACT_APP_SENTRY_DSN,\n});\n\nLogRocket.init(process.env.REACT_APP_LOG_ROCKET_APP_ID);\nLogRocket.getSessionURL(integrateLogRocketWithSentry);\n\nLicenseManager.setLicenseKey(\n \"Avenir_Health__MultiApp_1Devs8_November_2019__MTU3MzE3MTIwMDAwMA==5fe24a203ae4d849fe9768ee0a3219f5\"\n);\n\nReactDOM.render(<Root />, document.getElementById(\"root\"));\n"],"sourceRoot":""}