{"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/BooleanCellRenderer.js","components/PrepareData/PrepareDataEmuData.js","components/Notification.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","referencePop","emU_ROC","sD_EMU_ROC","sD_EMU","included","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","method","status","window","location","href","Promise","reject","request","webService2","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","to01Null","normalizeDatabases","reduce","result","rest","regions","normalizeSurveyData","ratioModernAny","possible_outlier","possible_outlier_userinput","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","BooleanCellRenderer","PrepareDataEmuData","gridApi","onSelectionChanged","rowSelected","getSelectedRows","onAddNewItem","newRowData","updateRowData","ensureIndexVisible","childIndex","onDeleteItem","selectedItemIds","PrepareData_PrepareDataCountrySelector","onLoadCountryData","editable","rowSelection","suppressScrollOnNewData","frameworkComponents","booleanCellRenderer","onCellValueChanged","onEditItem","valueParser","cellEditor","cellEditorParams","cellRenderer","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","PrepareDataPopulationData","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","onSelectNation","nation","selectedNation","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","onSelectPopulation","selectedPopulation","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":"g6mBAOMA,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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8J,oBAAqB,CACnB,EACA,EACA,EACA,GACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,GACA,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,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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","file":"static/js/main.0488cf84.chunk.js","sourcesContent":["import i18n from \"i18next\";\r\nimport LanguageDetector from \"i18next-browser-languagedetector\";\r\nimport i18next from \"i18next\";\r\nimport { initReactI18next } from \"react-i18next\";\r\nimport en from \"./translations/en\";\r\nimport fr from \"./translations/fr\";\r\n\r\nconst resources = {\r\n en: {\r\n translation: en\r\n },\r\n fr: {\r\n translation: fr\r\n }\r\n};\r\n\r\ni18n\r\n .use(LanguageDetector)\r\n .use(initReactI18next)\r\n .init({\r\n resources,\r\n fallbackLng: \"en\",\r\n keySeparator: false,\r\n nsSeparator: false,\r\n interpolation: {\r\n escapeValue: false\r\n }\r\n });\r\n\r\nexport const translateGridText = (key, defaultValue) =>\r\n i18next.t(`ag-grid.${key}`, defaultValue);\r\n\r\nexport default i18n;\r\n","export const developmentMode = false && process.env.NODE_ENV === \"development\";\r\n\r\nexport const chartSets = [\r\n {\r\n value: \"complete\",\r\n label: \"Complete\",\r\n },\r\n {\r\n value: \"cp_any\",\r\n label: \"CP (any)\",\r\n },\r\n {\r\n value: \"cp_modern\",\r\n label: \"CP (modern)\",\r\n },\r\n {\r\n value: \"cp_traditional\",\r\n label: \"CP (traditional)\",\r\n },\r\n {\r\n value: \"ratio_modern_vs_any_method\",\r\n label: \"Ratio (modern / any method)\",\r\n },\r\n {\r\n value: \"unmet_need_for_fp\",\r\n label: \"Unmet need for FP\",\r\n },\r\n {\r\n value: \"unmet_need_modern\",\r\n label: \"Unmet need for modern methods\",\r\n },\r\n {\r\n value: \"total_demand\",\r\n label: \"Total demand\",\r\n },\r\n {\r\n value: \"demand_satisfied\",\r\n label: \"Demand satisfied\",\r\n },\r\n {\r\n value: \"demand_satisfied_by_modern_methods\",\r\n label: \"Demand satisfied by modern methods\",\r\n },\r\n {\r\n value: \"fp_2020\",\r\n label: \"FP 2020\",\r\n },\r\n];\r\n\r\nexport const contraceptiveMethods = [\r\n {\r\n value: \"contraceptiveUseAny\",\r\n label: \"using any contraception\",\r\n },\r\n {\r\n value: \"contraceptiveUseModern\",\r\n label: \"using modern contraception\",\r\n },\r\n {\r\n value: \"contraceptiveUseTraditional\",\r\n label: \"using traditional contraception\",\r\n },\r\n {\r\n value: \"unmetNeedAny\",\r\n label: \"with unmet need for FP\",\r\n },\r\n {\r\n value: \"unmetNeedModern\",\r\n label: \"with unmet need for modern methods\",\r\n },\r\n {\r\n value: \"demand\",\r\n label: \"with demand for FP\",\r\n },\r\n];\r\n\r\nexport const defaultFirstYear = 1970;\r\n\r\nexport const indicators = [\r\n {\r\n value: \"contraceptiveUseAny\",\r\n label: \"Contraceptive prevalence (any)\",\r\n description:\r\n \"The proportion of women who are currently using, or whose sexual partner is currently using, at least one method of contraception\",\r\n chart: true,\r\n },\r\n {\r\n value: \"contraceptiveUseModern\",\r\n label: \"Contraceptive prevalence (modern)\",\r\n description:\r\n \"The proportion of women who are currently using, or whose sexual partner is currently using, at least one modern method of contraception\",\r\n chart: true,\r\n },\r\n {\r\n value: \"contraceptiveUseTraditional\",\r\n label: \"Contraceptive prevalence (traditional)\",\r\n description:\r\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)\",\r\n chart: true,\r\n },\r\n {\r\n value: \"ratioModernAny\",\r\n label: \"Modern/Any method (ratio)\",\r\n description:\r\n \"The ratio of contraceptive prevalence (modern) over contraceptive prevalence (any), the percent of contraceptive use that is modern\",\r\n chart: true,\r\n },\r\n {\r\n value: \"unmetNeedAny\",\r\n label: \"Unmet need for family planning\",\r\n description:\r\n \"The proportion of women who want to stop or delay childbearing but are not using any method of contraception\",\r\n chart: true,\r\n },\r\n {\r\n value: \"unmetNeedModern\",\r\n label: \"Unmet need for family planning (modern)\",\r\n description:\r\n \"The proportion of women who want to stop or delay childbearing but are not using a modern method of contraception\",\r\n chart: true,\r\n },\r\n {\r\n value: \"demand\",\r\n label: \"Total demand for family planning\",\r\n description:\r\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\",\r\n chart: true,\r\n },\r\n {\r\n value: \"demandModern\",\r\n label: \"Demand for modern family planning\",\r\n description:\r\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\",\r\n chart: true,\r\n },\r\n {\r\n value: \"demandSatisfied\",\r\n label: \"Demand for family planning satisfied by any method\",\r\n description:\r\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\",\r\n chart: true,\r\n },\r\n {\r\n value: \"demandSatisfiedModern\",\r\n label: \"Demand for family planning satisfied by modern methods\",\r\n description:\r\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\",\r\n chart: true,\r\n },\r\n {\r\n value: \"noNeed\",\r\n label: \"No need for contraception\",\r\n description: \"\",\r\n chart: false,\r\n },\r\n];\r\n\r\nexport const maximumYear = 2030;\r\n\r\nexport const minimumYear = 1970;\r\n","import { maximumYear, minimumYear } from \"./constants\";\r\n\r\nconst parseNumber = value => {\r\n let normalizedValue = value;\r\n\r\n if ((value.match(/,/g) || []).length === 1) {\r\n normalizedValue = normalizedValue.replace(\",\", \".\");\r\n }\r\n\r\n return parseFloat(normalizedValue);\r\n};\r\n\r\nexport const createGuid = () =>\r\n ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, c =>\r\n (\r\n c ^\r\n (crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (c / 4)))\r\n ).toString(16)\r\n );\r\n\r\nexport const createSlug = (name, suffix, separator = \"_\") =>\r\n name ? `${name}${separator}${suffix}` : suffix;\r\n\r\nexport const formatDateTime = date =>\r\n date.toLocaleDateString(\"en-US\", {\r\n day: \"numeric\",\r\n month: \"short\",\r\n year: \"numeric\",\r\n hour: \"2-digit\",\r\n minute: \"2-digit\",\r\n seconds: \"2-digit\"\r\n });\r\n\r\nexport const formatLogicalCell = value =>\r\n value == null ? null : value ? \"✔\" : \"✘\";\r\n\r\nexport const formatNullableCell = value => (value != null ? value : \"None\");\r\n\r\nexport const formatNumericCell = (value, decimalPlaces) => {\r\n const number = parseFloat(value);\r\n\r\n return isNaN(number) ? undefined : number.toFixed(decimalPlaces);\r\n};\r\n\r\nexport const formatPercentage = (value, decimalPlaces) =>\r\n `${(value * 100).toFixed(decimalPlaces)}%`;\r\n\r\nexport const formatPercentageCell = (value, decimalPlaces, suffix) => {\r\n const number = parseFloat(value);\r\n\r\n return isNaN(number)\r\n ? undefined\r\n : `${(number * 100).toFixed(decimalPlaces)}${suffix ? \"%\" : \"\"}`;\r\n};\r\n\r\nexport const getCurrentYear = () => new Date().getFullYear();\r\n\r\nexport const getDefaultLastYear = () => 2030;\r\n\r\nexport const groupBy = (items, key) =>\r\n items.reduce((result, item) => {\r\n const { indicator, ...rest } = item;\r\n\r\n result[indicator] = [...(result[indicator] || []), rest];\r\n\r\n return result;\r\n }, {});\r\n\r\nexport const hash = text =>\r\n [...text].reduce(\r\n (previousHash, currentCharacter) =>\r\n ((previousHash << 5) - previousHash + currentCharacter.charCodeAt(0)) | 0,\r\n 0\r\n );\r\n\r\nexport const parseIntegerCell = (\r\n params,\r\n minimumInclusiveValue,\r\n maximumInclusiveValue\r\n) => {\r\n const newValue = parseInt(params.newValue, 10);\r\n\r\n if (isNaN(newValue)) {\r\n return params.oldValue;\r\n }\r\n\r\n return trimToRange(newValue, minimumInclusiveValue, maximumInclusiveValue);\r\n};\r\n\r\nexport const parseNullableAlphaCell = (\r\n params,\r\n minimumInclusiveValue = 0,\r\n maximumInclusiveValue = Number.MAX_VALUE\r\n) => {\r\n const newValue = params.newValue.trim();\r\n\r\n if (newValue.length === 0 || !isNaN(parseInt(newValue[0], 10))) {\r\n return;\r\n }\r\n\r\n return newValue;\r\n};\r\n\r\nexport const parseNullableNumericCell = (\r\n params,\r\n minimumInclusiveValue = 0,\r\n maximumInclusiveValue = Number.MAX_VALUE\r\n) => {\r\n const newValue = parseNumber(params.newValue);\r\n\r\n if (isNaN(newValue)) {\r\n return;\r\n }\r\n\r\n return trimToRange(newValue, minimumInclusiveValue, maximumInclusiveValue);\r\n};\r\n\r\nexport const parseNumericCell = (\r\n params,\r\n minimumInclusiveValue = 0,\r\n maximumInclusiveValue = Number.MAX_VALUE\r\n) => {\r\n const newValue = parseNumber(params.newValue);\r\n\r\n if (isNaN(newValue)) {\r\n return params.oldValue;\r\n }\r\n\r\n return trimToRange(newValue, minimumInclusiveValue, maximumInclusiveValue);\r\n};\r\n\r\nexport const toggleSetExistence = (set, value) => {\r\n if (set.has(value)) {\r\n set.delete(value);\r\n } else {\r\n set.add(value);\r\n }\r\n};\r\n\r\nexport const trimYearToRange = (year, enforceRange) =>\r\n trimToRange(year, enforceRange ? minimumYear : 0, maximumYear);\r\n\r\nexport const trimToRange = (value, inclusiveMinimum, inclusiveMaximum) =>\r\n Math.min(Math.max(value, inclusiveMinimum), inclusiveMaximum);\r\n","import React from \"react\";\r\nimport { withStyles } from \"@material-ui/core\";\r\nimport ErrorIcon from \"@material-ui/icons/Error\";\r\nimport { withTranslation } from \"react-i18next\";\r\n\r\nconst styles = theme => ({\r\n message: {\r\n display: \"flex\",\r\n alignItems: \"center\"\r\n },\r\n icon: {\r\n width: \"1.5em\",\r\n height: \"1.5em\",\r\n color: theme.palette.error.dark\r\n },\r\n text: {\r\n marginLeft: 10\r\n }\r\n});\r\n\r\nconst Oops = ({ classes, t }) => (\r\n
\r\n

{t(\"Oops!\")}

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

\r\n \r\n

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

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

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

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

\r\n\r\n
\r\n {[4, 6, 8].map(index => rest.children[index])}\r\n
\r\n \r\n ) : (\r\n
{rest.children}
\r\n )}\r\n
\r\n);\r\n\r\nChartsChartList.propTypes = {\r\n children: PropTypes.arrayOf(PropTypes.element),\r\n measure: measurePropType.isRequired,\r\n className: PropTypes.string\r\n};\r\n\r\nexport default withTranslation()(withStyles(styles)(ChartsChartList));\r\n","import React from \"react\";\r\nimport * as PropTypes from \"prop-types\";\r\nimport FormControl from \"@material-ui/core/FormControl\";\r\nimport Input from \"@material-ui/core/Input\";\r\nimport InputLabel from \"@material-ui/core/InputLabel\";\r\nimport NativeSelect from \"@material-ui/core/NativeSelect\";\r\nimport { withTranslation } from \"react-i18next\";\r\n\r\nconst ChartSetSelector = ({ t, ...rest }) => (\r\n
\r\n \r\n \r\n {t(\"Chart set\")}\r\n \r\n\r\n }\r\n value={rest.value}\r\n onChange={e => {\r\n rest.onChange(e.target.value);\r\n }}\r\n >\r\n {rest.chartSets.map(chartSet => (\r\n \r\n ))}\r\n \r\n \r\n
\r\n);\r\n\r\nChartSetSelector.propTypes = {\r\n chartSets: PropTypes.arrayOf(\r\n PropTypes.shape({\r\n value: PropTypes.string.isRequired,\r\n label: PropTypes.string.isRequired\r\n })\r\n ).isRequired,\r\n value: PropTypes.string,\r\n className: PropTypes.string,\r\n onChange: PropTypes.func.isRequired\r\n};\r\n\r\nexport default withTranslation()(ChartSetSelector);\r\n","import React from \"react\";\r\nimport * as PropTypes from \"prop-types\";\r\nimport { maritalStatusPropType } from \"../../propTypes\";\r\nimport FormControl from \"@material-ui/core/FormControl\";\r\nimport Input from \"@material-ui/core/Input\";\r\nimport InputLabel from \"@material-ui/core/InputLabel\";\r\nimport NativeSelect from \"@material-ui/core/NativeSelect\";\r\nimport { withTranslation } from \"react-i18next\";\r\n\r\nconst ChartsMaritalStatusSelector = ({ t, ...rest }) => (\r\n
\r\n \r\n \r\n {t(rest.label)}\r\n \r\n\r\n }\r\n value={rest.value}\r\n onChange={e => rest.onChange(e.target.value)}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n
\r\n);\r\n\r\nChartsMaritalStatusSelector.propTypes = {\r\n label: PropTypes.string,\r\n value: maritalStatusPropType,\r\n className: PropTypes.string,\r\n onChange: PropTypes.func.isRequired\r\n};\r\n\r\nChartsMaritalStatusSelector.defaultProps = {\r\n label: \"Marital status\"\r\n};\r\n\r\nexport default withTranslation()(ChartsMaritalStatusSelector);\r\n","import React from \"react\";\r\nimport * as PropTypes from \"prop-types\";\r\nimport { measurePropType } from \"../propTypes\";\r\nimport FormControl from \"@material-ui/core/FormControl\";\r\nimport Input from \"@material-ui/core/Input\";\r\nimport InputLabel from \"@material-ui/core/InputLabel\";\r\nimport NativeSelect from \"@material-ui/core/NativeSelect\";\r\nimport { withTranslation } from \"react-i18next\";\r\n\r\nconst MeasureSelector = ({ t, ...rest }) => (\r\n
\r\n \r\n \r\n {t(rest.label)}\r\n \r\n\r\n }\r\n value={rest.value}\r\n onChange={e => rest.onChange(e.target.value)}\r\n >\r\n \r\n \r\n \r\n \r\n
\r\n);\r\n\r\nMeasureSelector.propTypes = {\r\n label: PropTypes.string,\r\n value: measurePropType.isRequired,\r\n className: PropTypes.string,\r\n onChange: PropTypes.func.isRequired\r\n};\r\n\r\nMeasureSelector.defaultProps = {\r\n label: \"Measure\"\r\n};\r\n\r\nexport default withTranslation()(MeasureSelector);\r\n","import React from \"react\";\r\nimport * as PropTypes from \"prop-types\";\r\nimport {\r\n labeledValuePropType,\r\n maritalStatusPropType,\r\n measurePropType\r\n} from \"../../propTypes\";\r\nimport { withStyles } from \"@material-ui/core/styles\";\r\nimport Button from \"@material-ui/core/Button\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport { withTranslation } from \"react-i18next\";\r\nimport ChartSetSelector from \"./ChartSetSelector\";\r\nimport MaritalStatusSelector from \"./ChartsMaritalStatusSelector\";\r\nimport MeasureSelector from \"../MeasureSelector\";\r\n\r\nconst styles = {\r\n button: {\r\n marginRight: 20\r\n },\r\n buttonGroup: {\r\n marginTop: 20\r\n },\r\n leftSelector: {\r\n marginRight: 30\r\n },\r\n selectors: {\r\n display: \"flex\"\r\n },\r\n title: {\r\n marginBottom: 10\r\n }\r\n};\r\n\r\nconst ChartsExporter = ({ t, ...rest }) => (\r\n
\r\n \r\n {t(\"Export chart sets\")}\r\n \r\n\r\n
\r\n \r\n \r\n \r\n
\r\n\r\n
\r\n \r\n {t(\"Download chart set\")}\r\n \r\n \r\n {t(\"Download displayed charts\")}\r\n \r\n
\r\n
\r\n);\r\n\r\nChartsExporter.propTypes = {\r\n chartSets: PropTypes.arrayOf(labeledValuePropType),\r\n selectedChartSet: PropTypes.string.isRequired,\r\n selectedMeasure: measurePropType.isRequired,\r\n selectedMaritalStatus: maritalStatusPropType,\r\n disableChartSetDownload: PropTypes.bool.isRequired,\r\n disableSelectedChartsDownload: PropTypes.bool.isRequired,\r\n onChangeChartSet: PropTypes.func.isRequired,\r\n onChangeMeasure: PropTypes.func.isRequired,\r\n onChangeMaritalStatus: PropTypes.func.isRequired,\r\n onDownloadChartSet: PropTypes.func.isRequired,\r\n onDownloadSelectedCharts: PropTypes.func.isRequired\r\n};\r\n\r\nexport default withTranslation()(withStyles(styles)(ChartsExporter));\r\n","import React from \"react\";\r\nimport * as PropTypes from \"prop-types\";\r\nimport { withStyles } from \"@material-ui/core\";\r\nimport { withTranslation } from \"react-i18next\";\r\n\r\nconst styles = {\r\n comparisonRunName: {\r\n backgroundColor: \"plum\",\r\n borderBottom: \"3px dashed black\",\r\n marginLeft: 10\r\n },\r\n container: {\r\n display: \"flex\"\r\n },\r\n runName: {\r\n backgroundColor: \"lavender\",\r\n borderBottom: \"3px solid black\",\r\n marginLeft: 10\r\n }\r\n};\r\n\r\nconst ChartsComparisonLegend = ({ t, ...rest }) => (\r\n
\r\n
{t(\"Legend:\")}
\r\n
{rest.runName}
\r\n
\r\n {rest.comparisonRunName}\r\n
\r\n
\r\n);\r\n\r\nChartsComparisonLegend.propTypes = {\r\n runName: PropTypes.string,\r\n comparisonRunName: PropTypes.string\r\n};\r\n\r\nexport default withTranslation()(withStyles(styles)(ChartsComparisonLegend));\r\n","import React from \"react\";\r\nimport * as PropTypes from \"prop-types\";\r\n\r\nconst markerSize = 6;\r\nconst enclosureStrokeWidth = 1.5;\r\nconst fontSize = 8;\r\n\r\nconst calculateMarkerDimensions = markerSize => {\r\n const scaleFactor = markerSize / 10;\r\n const triangleScaleFactor = 0.9;\r\n\r\n const triangleX = 13.46774 * scaleFactor * triangleScaleFactor;\r\n const triangleY = 11.6634 * scaleFactor * triangleScaleFactor;\r\n\r\n return {\r\n circle: markerSize,\r\n square: 17.72454 * scaleFactor,\r\n triangle: `0,${-triangleY},${-triangleX},${triangleY},${triangleX},${triangleY}`,\r\n invertedTriangle: `0,${triangleY},${-triangleX},${-triangleY},${triangleX},${-triangleY}`\r\n };\r\n};\r\n\r\nconst markerDimensions = calculateMarkerDimensions(markerSize);\r\n\r\nconst createEnclosureComponent = (\r\n shape,\r\n fillColor,\r\n strokeColor,\r\n markerDimensions\r\n) => {\r\n switch (shape) {\r\n case \"square\":\r\n return (\r\n \r\n );\r\n\r\n case \"triangle\":\r\n return (\r\n \r\n );\r\n\r\n case \"inverted triangle\":\r\n return (\r\n \r\n );\r\n\r\n default:\r\n return (\r\n \r\n );\r\n }\r\n};\r\n\r\nconst ChartsMarker = props => {\r\n let labelVerticalOffset = 1;\r\n\r\n if (props.shape === \"triangle\") {\r\n labelVerticalOffset = 6;\r\n } else if (props.shape === \"inverted triangle\") {\r\n labelVerticalOffset = -2;\r\n }\r\n\r\n return (\r\n \r\n {createEnclosureComponent(\r\n props.shape,\r\n props.fillColor,\r\n props.strokeColor,\r\n markerDimensions\r\n )}\r\n \r\n {props.label}\r\n \r\n \r\n );\r\n};\r\n\r\nChartsMarker.propTypes = {\r\n shape: PropTypes.oneOf([\"circle\", \"triangle\", \"inverted triangle\", \"square\"]),\r\n fillColor: PropTypes.string,\r\n strokeColor: PropTypes.string,\r\n textColor: PropTypes.string,\r\n label: PropTypes.string\r\n};\r\n\r\nChartsMarker.defaultProps = {\r\n shape: \"circle\",\r\n fillColor: \"white\",\r\n strokeColor: \"black\",\r\n textColor: \"black\",\r\n label: \"\"\r\n};\r\n\r\nexport default ChartsMarker;\r\n","import React from \"react\";\r\nimport * as PropTypes from \"prop-types\";\r\nimport ChartsMarker from \"./ChartsMarker\";\r\n\r\nconst getShape = groupTypeRelativeToBaseline => {\r\n switch (groupTypeRelativeToBaseline) {\r\n case \"SA\":\r\n return \"triangle\";\r\n\r\n case \"EM\":\r\n case \"AL\":\r\n return \"inverted triangle\";\r\n\r\n case \"BS\":\r\n case \"HW\":\r\n return \"square\";\r\n\r\n default:\r\n return \"circle\";\r\n }\r\n};\r\n\r\nconst getColor = dataSeriesType => {\r\n switch (dataSeriesType) {\r\n case \"DHS\":\r\n return \"#e41a1c\";\r\n\r\n case \"MICS\":\r\n return \"#377eb8\";\r\n\r\n case \"National survey\":\r\n case \"NS\":\r\n return \"#ff7f00\";\r\n\r\n case \"PMA\":\r\n return \"#984ea3\";\r\n\r\n default:\r\n return \"#4daf4a\";\r\n }\r\n};\r\n\r\nconst getLabel = (ageGroupBias, hasTraditionalMethodBias, modernMethodBias) => {\r\n let label;\r\n\r\n if (ageGroupBias === \"+\") {\r\n label = \"+\";\r\n } else if (ageGroupBias === \"-\") {\r\n label = \"-\";\r\n } else if (ageGroupBias === \"?\") {\r\n label = \"A\";\r\n } else if (hasTraditionalMethodBias) {\r\n label = \"F\";\r\n } else if (modernMethodBias === \"-\") {\r\n label = \"S-\";\r\n } else if (modernMethodBias === \"+\") {\r\n label = \"S+\";\r\n }\r\n\r\n return label;\r\n};\r\n\r\nconst ChartsSurveyMarker = props => (\r\n \r\n);\r\n\r\nChartsSurveyMarker.propTypes = {\r\n survey: PropTypes.shape({\r\n dataSeriesType: PropTypes.string.isRequired,\r\n groupTypeRelativeToBaseline: PropTypes.oneOf([\r\n \"AL\",\r\n \"BS\",\r\n \"EM\",\r\n \"FM\",\r\n \"HW\",\r\n \"MW\",\r\n \"SA\",\r\n \"UW\"\r\n ]).isRequired,\r\n ageGroupBias: PropTypes.oneOf([\"+\", \"-\", \"?\"]),\r\n hasTraditionalMethodBias: PropTypes.bool.isRequired,\r\n modernMethodBias: PropTypes.oneOf([\"+\", \"-\"])\r\n })\r\n};\r\n\r\nexport default ChartsSurveyMarker;\r\n","import React, { Component } from \"react\";\r\nimport * as PropTypes from \"prop-types\";\r\nimport { measurePropType, surveyDatumPropType } from \"../../propTypes\";\r\nimport { indicators } from \"../../constants\";\r\nimport { getScaledResults } from \"../../data\";\r\nimport { withStyles } from \"@material-ui/core/styles\";\r\nimport Tooltip from \"@material-ui/core/Tooltip\";\r\nimport {\r\n AreaSeries,\r\n Crosshair,\r\n CustomSVGSeries,\r\n LineSeries,\r\n MarkSeries,\r\n WhiskerSeries,\r\n XAxis,\r\n XYPlot,\r\n YAxis\r\n} from \"react-vis/es\";\r\nimport \"react-vis/dist/style.css\";\r\nimport { withTranslation } from \"react-i18next\";\r\nimport ChartsSurveyMarker from \"./ChartsSurveyMarker\";\r\n\r\nconst styles = {\r\n crosshair: {\r\n backgroundColor: \"black\",\r\n whiteSpace: \"nowrap\"\r\n },\r\n table: {\r\n textAlign: \"right\"\r\n },\r\n title: {\r\n marginBottom: 20,\r\n textAlign: \"center\",\r\n fontSize: \"smaller\"\r\n }\r\n};\r\n\r\nclass ChartsConfidenceIntervalChart extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n crosshairValues: []\r\n };\r\n }\r\n\r\n getErrors = () =>\r\n this.props.surveys.reduce((result, survey) => {\r\n let error;\r\n\r\n if (\r\n this.props.indicator === \"contraceptiveUseAny\" &&\r\n survey.estimatedContraceptiveUseAny\r\n ) {\r\n error = {\r\n lower: survey.lowerContraceptiveUseAny,\r\n estimate: survey.estimatedContraceptiveUseAny,\r\n upper: survey.upperContraceptiveUseAny\r\n };\r\n } else if (\r\n this.props.indicator === \"contraceptiveUseModern\" &&\r\n survey.estimatedContraceptiveUseModern\r\n ) {\r\n error = {\r\n lower: survey.lowerContraceptiveUseModern,\r\n estimate: survey.estimatedContraceptiveUseModern,\r\n upper: survey.upperContraceptiveUseModern\r\n };\r\n } else if (\r\n this.props.indicator === \"contraceptiveUseTraditional\" &&\r\n survey.estimatedContraceptiveUseTraditional\r\n ) {\r\n error = {\r\n lower: survey.lowerContraceptiveUseTraditional,\r\n estimate: survey.estimatedContraceptiveUseTraditional,\r\n upper: survey.upperContraceptiveUseTraditional\r\n };\r\n } else if (\r\n this.props.indicator === \"unmetNeedAny\" &&\r\n survey.estimatedUnmetNeedAny\r\n ) {\r\n error = {\r\n lower: survey.lowerUnmetNeedAny,\r\n estimate: survey.estimatedUnmetNeedAny,\r\n upper: survey.upperUnmetNeedAny\r\n };\r\n }\r\n\r\n if (error) {\r\n result.push({\r\n startDate: survey.startDate,\r\n endDate: survey.endDate,\r\n isInUnion: survey.isInUnion,\r\n ...error\r\n });\r\n }\r\n\r\n return result;\r\n }, []);\r\n\r\n formatCrosshairValue = value =>\r\n this.props.measure === \"percentage\"\r\n ? `${(value * 100).toFixed(1)}%`\r\n : Math.floor(value / 1000).toFixed(0);\r\n\r\n onNearestX = (value, { index }) => {\r\n const datum = this.props.data[index];\r\n\r\n this.setState({\r\n crosshairValues: [\r\n {\r\n x: datum.year,\r\n y: datum.percentile2pt5\r\n },\r\n {\r\n x: datum.year,\r\n y: datum.percentile10\r\n },\r\n {\r\n x: datum.year,\r\n y: datum.median\r\n },\r\n {\r\n x: datum.year,\r\n y: datum.percentile90\r\n },\r\n {\r\n x: datum.year,\r\n y: datum.percentile97pt5\r\n }\r\n ]\r\n });\r\n };\r\n\r\n onMouseLeave = () => {\r\n this.setState({ crosshairValues: [] });\r\n };\r\n\r\n render() {\r\n const demandLabel = indicators.find(\r\n indicator => indicator.value === \"demand\"\r\n ).label;\r\n\r\n const crosshairValues = this.state.crosshairValues;\r\n\r\n const data = getScaledResults(this.props.measure, this.props.data);\r\n\r\n const indicatorErrors = this.getErrors();\r\n\r\n return (\r\n
\r\n \r\n
\r\n {this.props.t(\r\n this.props.indicator === \"demandModern\"\r\n ? demandLabel\r\n : this.props.title\r\n )}\r\n
\r\n
\r\n\r\n \r\n v}\r\n tickSizeInner={0}\r\n style={{\r\n line: {\r\n stroke: \"grey\"\r\n },\r\n text: {\r\n fontSize: 10\r\n }\r\n }}\r\n />\r\n \r\n this.props.measure === \"percentage\"\r\n ? `${(v * 100).toFixed(0)}%`\r\n : v\r\n }\r\n tickSizeInner={0}\r\n style={{\r\n line: {\r\n stroke: \"grey\"\r\n },\r\n text: {\r\n fontSize: 10\r\n }\r\n }}\r\n />\r\n\r\n ({\r\n x: datum.year,\r\n y: datum.percentile2pt5,\r\n y0: datum.percentile97pt5\r\n }))}\r\n color=\"lavender\"\r\n opacity={!this.props.comparison ? 1.0 : 0.5}\r\n />\r\n\r\n {this.props.comparison && (\r\n ({\r\n x: datum.year,\r\n y: datum.comparisonPercentile2pt5,\r\n y0: datum.comparisonPercentile97pt5\r\n }))}\r\n color=\"plum\"\r\n opacity={0.5}\r\n />\r\n )}\r\n\r\n {!this.props.comparison && (\r\n ({\r\n x: datum.year,\r\n y: datum.percentile10,\r\n y0: datum.percentile90\r\n }))}\r\n color=\"plum\"\r\n />\r\n )}\r\n\r\n {this.props.comparison && (\r\n ({\r\n x: datum.year,\r\n y: datum.percentile10\r\n }))}\r\n style={{\r\n fill: \"none\"\r\n }}\r\n color=\"black\"\r\n />\r\n )}\r\n\r\n {this.props.comparison && (\r\n ({\r\n x: datum.year,\r\n y: datum.comparisonPercentile10\r\n }))}\r\n style={{\r\n fill: \"none\"\r\n }}\r\n strokeStyle=\"dashed\"\r\n color=\"black\"\r\n />\r\n )}\r\n\r\n {this.props.comparison && (\r\n ({\r\n x: datum.year,\r\n y: datum.percentile90\r\n }))}\r\n style={{\r\n fill: \"none\"\r\n }}\r\n color=\"black\"\r\n />\r\n )}\r\n\r\n {this.props.comparison && (\r\n ({\r\n x: datum.year,\r\n y: datum.comparisonPercentile90\r\n }))}\r\n style={{\r\n fill: \"none\"\r\n }}\r\n strokeStyle=\"dashed\"\r\n color=\"black\"\r\n />\r\n )}\r\n\r\n ({\r\n x: datum.year,\r\n y: datum.median\r\n }))}\r\n style={{\r\n fill: \"none\"\r\n }}\r\n color=\"black\"\r\n onNearestX={this.onNearestX}\r\n />\r\n\r\n {this.props.comparison && (\r\n ({\r\n x: datum.year,\r\n y: datum.comparisonMedian\r\n }))}\r\n style={{\r\n fill: \"none\"\r\n }}\r\n strokeStyle=\"dashed\"\r\n color=\"black\"\r\n />\r\n )}\r\n\r\n {this.props.measure === \"percentage\" &&\r\n ![\r\n // \"unmetNeedModern\",\r\n // \"demandModern\",\r\n // \"demandSatisfiedModern\"\r\n ].includes(this.props.indicator) && (\r\n ({\r\n x: (survey.startDate + survey.endDate) / 2,\r\n y: survey[this.props.y] || 0,\r\n customComponent: () => (\r\n \r\n )\r\n }))}\r\n />\r\n )}\r\n\r\n {this.props.measure === \"percentage\" && (\r\n ({\r\n x: datum.startYear + 0.5,\r\n y: datum.emu,\r\n size: 3\r\n }))}\r\n style={{\r\n fill: \"black\"\r\n }}\r\n color=\"none\"\r\n />\r\n )}\r\n\r\n {this.props.measure === \"percentage\" && (\r\n ({\r\n x: (error.startDate + error.endDate) / 2,\r\n y: (error.lower + error.upper) / 2,\r\n yVariance: error.upper - error.lower\r\n }))}\r\n style={{\r\n fill: \"none\"\r\n }}\r\n color=\"black\"\r\n />\r\n )}\r\n\r\n \r\n {crosshairValues.length && (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\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)}
\r\n
\r\n )}\r\n
\r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nChartsConfidenceIntervalChart.propTypes = {\r\n comparison: PropTypes.bool,\r\n measure: measurePropType.isRequired,\r\n indicator: PropTypes.string.isRequired,\r\n width: PropTypes.number,\r\n height: PropTypes.number,\r\n title: PropTypes.string.isRequired,\r\n description: PropTypes.string,\r\n xDomain: PropTypes.arrayOf(PropTypes.number),\r\n data: PropTypes.arrayOf(\r\n PropTypes.shape({\r\n year: PropTypes.number.isRequired,\r\n percentile2pt5: PropTypes.number.isRequired,\r\n percentile10: PropTypes.number.isRequired,\r\n median: PropTypes.number.isRequired,\r\n percentile90: PropTypes.number.isRequired,\r\n percentile97pt5: PropTypes.number.isRequired,\r\n comparisonPercentile2pt5: PropTypes.number,\r\n comparisonPercentile10: PropTypes.number,\r\n comparisonMedian: PropTypes.number,\r\n comparisonPercentile90: PropTypes.number,\r\n comparisonPercentile97pt5: PropTypes.number\r\n })\r\n ),\r\n surveys: PropTypes.arrayOf(surveyDatumPropType),\r\n y: PropTypes.string.isRequired,\r\n tickValues: PropTypes.arrayOf(PropTypes.number),\r\n shadeInnerBand: PropTypes.bool\r\n};\r\n\r\nChartsConfidenceIntervalChart.defaultProps = {\r\n description: \"\",\r\n comparison: false,\r\n width: 300,\r\n height: 300,\r\n data: [],\r\n surveys: [],\r\n emuData: []\r\n};\r\n\r\nexport default withTranslation()(\r\n withStyles(styles)(ChartsConfidenceIntervalChart)\r\n);\r\n","import React from \"react\";\r\nimport * as PropTypes from \"prop-types\";\r\nimport { maritalStatusPropType } from \"../propTypes\";\r\nimport FormControl from \"@material-ui/core/FormControl\";\r\nimport Input from \"@material-ui/core/Input\";\r\nimport InputLabel from \"@material-ui/core/InputLabel\";\r\nimport NativeSelect from \"@material-ui/core/NativeSelect\";\r\nimport { withTranslation } from \"react-i18next\";\r\n\r\nconst MaritalStatusSelector = ({ t, ...rest }) => (\r\n
\r\n \r\n \r\n {t(rest.label)}\r\n \r\n\r\n }\r\n value={rest.value}\r\n onChange={e => rest.onChange(e.target.value)}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n
\r\n);\r\n\r\nMaritalStatusSelector.propTypes = {\r\n label: PropTypes.string,\r\n value: maritalStatusPropType,\r\n className: PropTypes.string,\r\n onChange: PropTypes.func.isRequired\r\n};\r\n\r\nMaritalStatusSelector.defaultProps = {\r\n label: \"Marital status\"\r\n};\r\n\r\nexport default withTranslation()(MaritalStatusSelector);\r\n","import React from \"react\";\r\nimport { withStyles } from \"@material-ui/core\";\r\nimport classNames from \"classnames\";\r\nimport Paper from \"@material-ui/core/Paper\";\r\nimport { withTranslation } from \"react-i18next\";\r\n\r\nconst styles = {\r\n container: {\r\n display: \"inline-grid\",\r\n gridTemplateColumns: \"1fr\",\r\n gridAutoRows: \"max-content\",\r\n gridRowGap: \"8px\",\r\n padding: 10\r\n },\r\n section: {\r\n display: \"grid\",\r\n gridTemplateColumns: \"24px 1fr\",\r\n gridAutoRows: \"22px\",\r\n alignItems: \"center\"\r\n },\r\n subpopulation: {\r\n gridAutoRows: \"max-content\"\r\n }\r\n};\r\n\r\nconst createCircle = (strokeColor, fillColor = \"none\", radius = 6) => (\r\n \r\n \r\n \r\n);\r\n\r\nconst createTriangle = (strokeColor, inverted = false) => (\r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nconst createSquare = strokeColor => (\r\n \r\n \r\n \r\n);\r\n\r\nconst ChartsSurveyLegend = ({ t, ...rest }) => (\r\n \r\n
\r\n
{createCircle(\"#e41a1c\")}
\r\n
{t(\"DHS\")}
\r\n
{createCircle(\"#377eb8\")}
\r\n
{t(\"MICS\")}
\r\n
{createCircle(\"#ff7f00\")}
\r\n
{t(\"National survey\")}
\r\n
{createCircle(\"#984ea3\")}
\r\n
{t(\"PMA\")}
\r\n
{createCircle(\"#4daf4a\")}
\r\n
{t(\"Other international survey\")}
\r\n
{createCircle(\"none\", \"black\", 4)}
\r\n
{t(\"Service statistics\")}
\r\n
\r\n \r\n
{createCircle(\"#f781bf\", \"#f781bf\")}
\r\n
{t(\"Subpopulation\")}
\r\n
\r\n
\r\n
+
\r\n
{t(\"Higher contraceptive use\")}
\r\n
-
\r\n
{t(\"Lower contraceptive use\")}
\r\n
A
\r\n
{t(\"Other age group\")}
\r\n
F
\r\n
{t(\"Folk methods included\")}
\r\n
S+
\r\n
{t(\"Sterilization included\")}
\r\n
S-
\r\n
{t(\"Sterilization excluded\")}
\r\n
\r\n
\r\n
\r\n
{createCircle(\"#999\")}
\r\n
{t(\"Married women\")}
\r\n
{createTriangle(\"#999\")}
\r\n
{t(\"Sexually active women\")}
\r\n
{createTriangle(\"#999\", true)}
\r\n
{t(\"Ever married/All women\")}
\r\n
{createSquare(\"#999\")}
\r\n
{t(\"Both sexes and husbands/wives\")}
\r\n
\r\n
\r\n);\r\n\r\nexport default withTranslation()(withStyles(styles)(ChartsSurveyLegend));\r\n","import React from \"react\";\r\nimport * as PropTypes from \"prop-types\";\r\nimport {\r\n emuDatumPropType,\r\n labeledValuePropType,\r\n maritalStatusPropType,\r\n measurePropType,\r\n periodPropType,\r\n resultPropType,\r\n surveyDatumPropType\r\n} from \"../../propTypes\";\r\nimport { indicators } from \"../../constants\";\r\nimport { withStyles } from \"@material-ui/core/styles\";\r\nimport Checkbox from \"@material-ui/core/Checkbox\";\r\nimport FormControlLabel from \"@material-ui/core/FormControlLabel\";\r\nimport FormGroup from \"@material-ui/core/FormGroup\";\r\nimport ChartList from \"./ChartsChartList\";\r\nimport ChartsExporter from \"./ChartsExporter\";\r\nimport ComparisonLegend from \"./ChartsComparisonLegend\";\r\nimport ConfidenceIntervalChart from \"./ChartsConfidenceIntervalChart\";\r\nimport MaritalStatusSelector from \"../MaritalStatusSelector\";\r\nimport MeasureSelector from \"../MeasureSelector\";\r\nimport SurveyLegend from \"./ChartsSurveyLegend\";\r\nimport { withTranslation } from \"react-i18next\";\r\n\r\nconst styles = {\r\n charts: {\r\n margin: \"20px 0\"\r\n },\r\n checkbox: {\r\n padding: \"4px 12px\"\r\n },\r\n comparisonLegend: {\r\n marginTop: 10\r\n },\r\n container: {\r\n marginTop: 20\r\n },\r\n gridSelectors: {\r\n display: \"flex\"\r\n },\r\n indicatorPaper: {\r\n marginBottom: 20\r\n },\r\n indicators: {\r\n marginTop: 20\r\n },\r\n measureSelector: {\r\n marginRight: 30\r\n },\r\n noData: {\r\n margin: \"20px 0\"\r\n },\r\n surveyLegend: {\r\n marginBottom: 20\r\n }\r\n};\r\n\r\nconst recalculateSurveyMetrics = surveys =>\r\n surveys.map(survey => ({\r\n ...survey,\r\n unmetNeedModern:\r\n survey.contraceptiveUseTraditional !== null &&\r\n survey.unmetNeedAny !== null\r\n ? survey.contraceptiveUseTraditional + survey.unmetNeedAny\r\n : null,\r\n demandModern: survey.demand,\r\n demandSatisfiedModern:\r\n survey.contraceptiveUseModern !== null &&\r\n survey.contraceptiveUseAny !== null &&\r\n survey.unmetNeedAny !== null\r\n ? survey.contraceptiveUseModern /\r\n (survey.contraceptiveUseAny + survey.unmetNeedAny)\r\n : null\r\n }));\r\n\r\nconst Charts = ({ t, ...rest }) => (\r\n
\r\n
\r\n \r\n \r\n
\r\n\r\n \r\n {indicators\r\n .filter(\r\n indicator =>\r\n indicator.chart &&\r\n (rest.selectedMeasure === \"percentage\" ||\r\n indicator.value !== \"ratioModernAny\")\r\n )\r\n .map(indicator => (\r\n rest.onToggleChart(indicator.value)}\r\n />\r\n }\r\n label={t(indicator.label)}\r\n />\r\n ))}\r\n\r\n \r\n }\r\n label={t(\"Show survey legend\")}\r\n />\r\n \r\n\r\n {rest.results ? (\r\n <>\r\n {rest.comparison && (\r\n
\r\n \r\n
\r\n )}\r\n\r\n \r\n {indicators\r\n .filter(indicator =>\r\n rest.selectedChartsIndicators.includes(indicator.value)\r\n )\r\n .map(indicator => {\r\n const indicatorResults =\r\n (rest.results && rest.results[indicator.value]) || [];\r\n\r\n const surveyData = recalculateSurveyMetrics(\r\n rest.surveyData\r\n ).filter(\r\n ({ startDate }) =>\r\n startDate >= rest.period.firstYear &&\r\n startDate <= rest.period.lastYear\r\n );\r\n\r\n return (\r\n ({\r\n ...datum,\r\n year: datum.year + 0.5\r\n }))}\r\n surveys={surveyData.filter(\r\n datum => datum[indicator.value] != null\r\n )}\r\n emuData={\r\n indicator.value === \"contraceptiveUseModern\"\r\n ? rest.emuData\r\n : []\r\n }\r\n y={indicator.value}\r\n />\r\n );\r\n })}\r\n \r\n\r\n {rest.showSurveyLegend && (\r\n
\r\n \r\n
\r\n )}\r\n \r\n ) : (\r\n
{t(\"No data to chart\")}
\r\n )}\r\n\r\n \r\n\r\n \r\n
\r\n);\r\n\r\nCharts.propTypes = {\r\n comparison: PropTypes.bool,\r\n runName: PropTypes.string,\r\n comparisonRunName: PropTypes.string,\r\n period: periodPropType,\r\n selectedMeasure: measurePropType.isRequired,\r\n selectedChartsMaritalStatus: PropTypes.string,\r\n selectedChartsIndicators: PropTypes.arrayOf(PropTypes.string),\r\n showSurveyLegend: PropTypes.bool,\r\n results: resultPropType,\r\n surveyData: PropTypes.arrayOf(surveyDatumPropType),\r\n emuData: PropTypes.arrayOf(emuDatumPropType),\r\n chartSets: PropTypes.arrayOf(labeledValuePropType),\r\n selectedExportedChartSet: PropTypes.string.isRequired,\r\n selectedExportedMeasure: measurePropType.isRequired,\r\n selectedExportedMaritalStatus: maritalStatusPropType,\r\n disableChartSetDownload: PropTypes.bool.isRequired,\r\n disableSelectedChartsDownload: PropTypes.bool.isRequired,\r\n onChangeMeasure: PropTypes.func.isRequired,\r\n onChangeMaritalStatus: PropTypes.func.isRequired,\r\n onToggleChart: PropTypes.func.isRequired,\r\n onToggleSurveyLegend: PropTypes.func.isRequired,\r\n onChangeExportedChartSet: PropTypes.func.isRequired,\r\n onChangeExportedMeasure: PropTypes.func.isRequired,\r\n onChangeExportedMaritalStatus: PropTypes.func.isRequired,\r\n onDownloadChartSet: PropTypes.func.isRequired,\r\n onDownloadSelectedCharts: PropTypes.func.isRequired\r\n};\r\n\r\nCharts.defaultProps = {\r\n comparison: false,\r\n selectedChartsIndicators: [],\r\n showSurveyLegend: false,\r\n surveyData: [],\r\n emuData: []\r\n};\r\n\r\nexport default withTranslation()(withStyles(styles)(Charts));\r\n","import React from \"react\";\r\nimport { NavTab } from \"react-router-tabs\";\r\nimport \"react-router-tabs/styles/react-router-tabs.css\";\r\nimport { withStyles } from \"@material-ui/core/styles\";\r\nimport classNames from \"classnames\";\r\n\r\nconst styles = {\r\n active: {\r\n fontWeight: 600\r\n },\r\n container: {\r\n color: \"#555\"\r\n }\r\n};\r\n\r\nconst NavigationTab = props => (\r\n \r\n);\r\n\r\nexport default withStyles(styles)(NavigationTab);\r\n","import React from \"react\";\r\nimport * as PropTypes from \"prop-types\";\r\nimport FormControl from \"@material-ui/core/FormControl\";\r\nimport Input from \"@material-ui/core/Input\";\r\nimport InputLabel from \"@material-ui/core/InputLabel\";\r\nimport NativeSelect from \"@material-ui/core/NativeSelect\";\r\nimport { withTranslation } from \"react-i18next\";\r\n\r\nconst IndicatorSelector = ({ t, ...rest }) => (\r\n
\r\n \r\n \r\n {t(\"Indicator\")}\r\n \r\n\r\n }\r\n value={rest.value}\r\n onChange={e => rest.onChange(e.target.value)}\r\n >\r\n {rest.indicators.map(indicator => (\r\n \r\n ))}\r\n \r\n \r\n
\r\n);\r\n\r\nIndicatorSelector.propTypes = {\r\n indicators: PropTypes.arrayOf(\r\n PropTypes.shape({\r\n value: PropTypes.string.isRequired,\r\n label: PropTypes.string.isRequired\r\n })\r\n ).isRequired,\r\n value: PropTypes.string,\r\n className: PropTypes.string,\r\n onChange: PropTypes.func.isRequired\r\n};\r\n\r\nexport default withTranslation()(IndicatorSelector);\r\n","import React from \"react\";\r\nimport * as PropTypes from \"prop-types\";\r\nimport { measurePropType } from \"../../propTypes\";\r\nimport { withStyles } from \"@material-ui/core/styles\";\r\nimport Button from \"@material-ui/core/Button\";\r\nimport Checkbox from \"@material-ui/core/Checkbox\";\r\nimport FormControlLabel from \"@material-ui/core/FormControlLabel\";\r\nimport FormGroup from \"@material-ui/core/FormGroup\";\r\nimport Tooltip from \"@material-ui/core/Tooltip\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport { withTranslation } from \"react-i18next\";\r\n\r\nconst styles = {\r\n button: {\r\n marginRight: 20\r\n },\r\n buttonGroup: {\r\n marginTop: 20\r\n },\r\n checkbox: {\r\n padding: \"4px 12px\"\r\n },\r\n subtitle: {\r\n marginTop: 10\r\n }\r\n};\r\n\r\nconst ResultsExporter = ({ t, ...rest }) => (\r\n
\r\n {t(\"Export results\")}\r\n\r\n \r\n {t(\"Measures to export\")}\r\n \r\n\r\n \r\n {\r\n rest.onToggleMeasure(\"percentage\");\r\n }}\r\n />\r\n }\r\n label={t(\"Percentage\")}\r\n />\r\n {\r\n rest.onToggleMeasure(\"count\");\r\n }}\r\n />\r\n }\r\n label={t(\"Count\")}\r\n />\r\n \r\n\r\n \r\n {t(\"Indicators to export\")}\r\n \r\n\r\n \r\n {rest.indicators.map(indicator => (\r\n {\r\n rest.onToggleIndicator(indicator.value);\r\n }}\r\n />\r\n }\r\n label={t(indicator.label)}\r\n />\r\n ))}\r\n \r\n\r\n
\r\n \r\n \r\n \r\n {t(\"Download selected results\")}\r\n \r\n \r\n \r\n\r\n {rest.comparison && (\r\n \r\n \r\n \r\n {t(\"Download all results\")}\r\n \r\n \r\n \r\n )}\r\n\r\n {!rest.comparison && (\r\n \r\n \r\n \r\n {t(\"Download all data\")}\r\n \r\n \r\n \r\n )}\r\n
\r\n
\r\n);\r\n\r\nResultsExporter.propTypes = {\r\n comparision: PropTypes.bool,\r\n selectedMeasures: PropTypes.arrayOf(measurePropType),\r\n indicators: PropTypes.arrayOf(\r\n PropTypes.shape({\r\n value: PropTypes.string.isRequired,\r\n label: PropTypes.string.isRequired\r\n })\r\n ).isRequired,\r\n selectedIndicators: PropTypes.arrayOf(PropTypes.string),\r\n disableSelectedResultsDownload: PropTypes.bool.isRequired,\r\n disableAllResultsDownload: PropTypes.bool.isRequired,\r\n disableAllDataDownload: PropTypes.bool.isRequired,\r\n onToggleMeasure: PropTypes.func.isRequired,\r\n onToggleIndicator: PropTypes.func.isRequired,\r\n onDownloadSelectedResults: PropTypes.func.isRequired,\r\n onDownloadAllResults: PropTypes.func.isRequired,\r\n onDownloadAllData: PropTypes.func\r\n};\r\n\r\nResultsExporter.defaultProps = {\r\n comparison: false,\r\n selectedMeasures: [],\r\n selectedIndicators: []\r\n};\r\n\r\nexport default withTranslation()(withStyles(styles)(ResultsExporter));\r\n","import React from \"react\";\r\nimport * as PropTypes from \"prop-types\";\r\nimport { indicatorResultPropType, measurePropType } from \"../../propTypes\";\r\nimport {\r\n formatLogicalCell,\r\n formatNumericCell,\r\n formatPercentageCell\r\n} from \"../../utilities\";\r\nimport classNames from \"classnames\";\r\nimport { AgGridReact } from \"ag-grid-react\";\r\nimport \"ag-grid-enterprise\";\r\nimport \"ag-grid-community/dist/styles/ag-grid.css\";\r\nimport \"ag-grid-community/dist/styles/ag-theme-material.css\";\r\nimport { withTranslation } from \"react-i18next\";\r\nimport { translateGridText } from \"../../i18n\";\r\n\r\nconst getFormatter = measure =>\r\n measure === \"percentage\"\r\n ? value => formatPercentageCell(value, 1)\r\n : value => formatNumericCell(value / 1000, 0);\r\n\r\nconst getColumnDefinitionsForSingleRun = estimateFormatter => [\r\n {\r\n headerName: \"In union?\",\r\n field: \"isInUnion\",\r\n valueFormatter: params => formatLogicalCell(params.value)\r\n },\r\n {\r\n headerName: \"Year\",\r\n field: \"year\",\r\n type: \"numericColumn\",\r\n filter: \"agNumberColumnFilter\"\r\n },\r\n {\r\n headerName: \"2.5%\",\r\n field: \"percentile2pt5\",\r\n type: \"numericColumn\",\r\n filter: \"agNumberColumnFilter\",\r\n valueFormatter: params => estimateFormatter(params.value)\r\n },\r\n {\r\n headerName: \"10%\",\r\n field: \"percentile10\",\r\n type: \"numericColumn\",\r\n filter: \"agNumberColumnFilter\",\r\n valueFormatter: params => estimateFormatter(params.value)\r\n },\r\n {\r\n headerName: \"Median\",\r\n field: \"median\",\r\n type: \"numericColumn\",\r\n filter: \"agNumberColumnFilter\",\r\n valueFormatter: params => estimateFormatter(params.value)\r\n },\r\n {\r\n headerName: \"90%\",\r\n field: \"percentile90\",\r\n type: \"numericColumn\",\r\n filter: \"agNumberColumnFilter\",\r\n valueFormatter: params => estimateFormatter(params.value)\r\n },\r\n {\r\n headerName: \"97.5%\",\r\n field: \"percentile97pt5\",\r\n type: \"numericColumn\",\r\n filter: \"agNumberColumnFilter\",\r\n valueFormatter: params => estimateFormatter(params.value)\r\n }\r\n];\r\n\r\nconst getColumnDefinitionsRunComparison = estimateFormatter => [\r\n {\r\n headerName: \"In union?\",\r\n field: \"isInUnion\",\r\n valueFormatter: params => formatLogicalCell(params.value)\r\n },\r\n {\r\n headerName: \"Year\",\r\n field: \"year\",\r\n type: \"numericColumn\",\r\n filter: \"agNumberColumnFilter\"\r\n },\r\n {\r\n headerName: \"Mean #1\",\r\n field: \"mean\",\r\n type: \"numericColumn\",\r\n filter: \"agNumberColumnFilter\",\r\n valueFormatter: params => estimateFormatter(params.value)\r\n },\r\n {\r\n headerName: \"Mean #2\",\r\n field: \"comparisonMean\",\r\n type: \"numericColumn\",\r\n filter: \"agNumberColumnFilter\",\r\n valueFormatter: params => estimateFormatter(params.value)\r\n },\r\n {\r\n headerName: \"Median #1\",\r\n field: \"median\",\r\n type: \"numericColumn\",\r\n filter: \"agNumberColumnFilter\",\r\n valueFormatter: params => estimateFormatter(params.value)\r\n },\r\n {\r\n headerName: \"Median #2\",\r\n field: \"comparisonMedian\",\r\n type: \"numericColumn\",\r\n filter: \"agNumberColumnFilter\",\r\n valueFormatter: params => estimateFormatter(params.value)\r\n }\r\n];\r\n\r\nconst ResultsTable = ({ t, ...rest }) => {\r\n const columnDefinitions = rest.comparison\r\n ? getColumnDefinitionsRunComparison(getFormatter(rest.measure))\r\n : getColumnDefinitionsForSingleRun(getFormatter(rest.measure));\r\n\r\n return (\r\n \r\n ({\r\n ...datum,\r\n headerName: t(datum.headerName)\r\n }))}\r\n domLayout=\"autoHeight\"\r\n defaultColDef={{\r\n sortable: true,\r\n filter: true\r\n }}\r\n pagination={true}\r\n paginationPageSize={10}\r\n suppressColumnVirtualisation={true}\r\n suppressCellSelection={true}\r\n overlayNoRowsTemplate=\"\"\r\n localeTextFunc={translateGridText}\r\n rowData={rest.results.map(datum => ({\r\n ...datum,\r\n year: datum.year + 0.5\r\n }))}\r\n onGridReady={params => {\r\n params.columnApi.autoSizeColumns(\r\n params.columnApi.getAllColumns().map(column => column.colId)\r\n );\r\n }}\r\n />\r\n
\r\n );\r\n};\r\n\r\nResultsTable.propTypes = {\r\n measure: measurePropType.isRequired,\r\n results: PropTypes.arrayOf(indicatorResultPropType),\r\n comparison: PropTypes.bool,\r\n className: PropTypes.string\r\n};\r\n\r\nResultsTable.defaultProps = {\r\n results: [],\r\n comparison: false\r\n};\r\n\r\nexport default withTranslation()(ResultsTable);\r\n","import React from \"react\";\r\nimport * as PropTypes from \"prop-types\";\r\nimport { measurePropType, indicatorResultPropType } from \"../../propTypes\";\r\nimport { indicators } from \"../../constants\";\r\nimport { withStyles } from \"@material-ui/core/styles\";\r\nimport IndicatorSelector from \"./ResultsIndicatorSelector\";\r\nimport MaritalStatusSelector from \"../MaritalStatusSelector\";\r\nimport MeasureSelector from \"../MeasureSelector\";\r\nimport ResultsExporter from \"./ResultsExporter\";\r\nimport ResultsTable from \"./ResultsTable\";\r\n\r\nconst styles = {\r\n container: {\r\n marginTop: 20\r\n },\r\n gridSelectors: {\r\n display: \"flex\"\r\n },\r\n leftSelector: {\r\n marginRight: 30\r\n },\r\n table: {\r\n marginTop: 10\r\n }\r\n};\r\n\r\nconst Results = props => (\r\n
\r\n
\r\n \r\n \r\n props.selectedMeasure === \"percentage\" ||\r\n indicator.value !== \"ratioModernAny\"\r\n )}\r\n value={props.selectedIndicator}\r\n className={props.classes.leftSelector}\r\n onChange={props.onChangeIndicator}\r\n />\r\n \r\n
\r\n\r\n \r\n\r\n
\r\n \r\n
\r\n
\r\n);\r\n\r\nResults.propTypes = {\r\n comparison: PropTypes.bool,\r\n selectedMeasure: measurePropType.isRequired,\r\n selectedIndicator: PropTypes.string.isRequired,\r\n selectedMaritalStatus: PropTypes.string.isRequired,\r\n results: PropTypes.arrayOf(indicatorResultPropType),\r\n selectedExportedMeasures: PropTypes.arrayOf(measurePropType),\r\n selectedExportedIndicators: PropTypes.arrayOf(PropTypes.string),\r\n disableSelectedResultsDownload: PropTypes.bool.isRequired,\r\n disableAllResultsDownload: PropTypes.bool.isRequired,\r\n disableAllDataDownload: PropTypes.bool,\r\n onChangeMeasure: PropTypes.func.isRequired,\r\n onChangeIndicator: PropTypes.func.isRequired,\r\n onChangeMaritalStatus: PropTypes.func.isRequired,\r\n onToggleExportedMeasure: PropTypes.func.isRequired,\r\n onToggleExportedIndicator: PropTypes.func.isRequired,\r\n onDownloadSelectedResults: PropTypes.func.isRequired,\r\n onDownloadAllResults: PropTypes.func.isRequired,\r\n onDownloadAllData: PropTypes.func\r\n};\r\n\r\nResults.defaultProps = {\r\n comparison: false,\r\n results: [],\r\n selectedExportedMeasures: [],\r\n selectedExportedIndicators: [],\r\n disableAllDataDownload: true\r\n};\r\n\r\nexport default withStyles(styles)(Results);\r\n","import React from \"react\";\r\nimport * as PropTypes from \"prop-types\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport { withTranslation } from \"react-i18next\";\r\n\r\nconst Title = ({ title, t }) => (\r\n \r\n {title || t(\"Run has not been fully defined\")}\r\n \r\n);\r\n\r\nTitle.propTypes = {\r\n title: PropTypes.string\r\n};\r\n\r\nexport default withTranslation()(Title);\r\n","import React from \"react\";\r\nimport * as PropTypes from \"prop-types\";\r\nimport {\r\n emuDatumPropType,\r\n indicatorResultPropType,\r\n labeledValuePropType,\r\n measurePropType,\r\n periodPropType,\r\n resultPropType,\r\n surveyDatumPropType\r\n} from \"../../propTypes\";\r\nimport { Route, Switch, Redirect } from \"react-router-dom\";\r\nimport { withStyles } from \"@material-ui/core/styles\";\r\nimport { withTranslation } from \"react-i18next\";\r\nimport Charts from \"../Charts/Charts\";\r\nimport NavigationTab from \"../NavigationTab\";\r\nimport Results from \"../Results/Results\";\r\nimport Title from \"../Title\";\r\n\r\nconst styles = {\r\n tabPage: {\r\n margin: 10\r\n },\r\n title: {\r\n marginBottom: 20\r\n }\r\n};\r\n\r\nconst CompareRunsMainContent = ({ match, t, ...rest }) => (\r\n
\r\n
\r\n \r\n </div>\r\n\r\n <NavigationTab to=\"/compareruns/results\">{t(\"Results\")}</NavigationTab>\r\n <NavigationTab to=\"/compareruns/charts\">{t(\"Charts\")}</NavigationTab>\r\n\r\n <div className={rest.classes.tabPage}>\r\n <Switch>\r\n <Route\r\n exact\r\n path={match.path}\r\n render={() => <Redirect replace to={`${match.path}/results`} />}\r\n />\r\n <Route\r\n path={`${match.path}/results`}\r\n render={() => (\r\n <Results\r\n comparison={true}\r\n selectedMeasure={rest.selectedResultsMeasure}\r\n selectedIndicator={rest.selectedResultsIndicator}\r\n selectedMaritalStatus={rest.selectedResultsMaritalStatus}\r\n results={rest.tableResults}\r\n selectedExportedMeasures={rest.selectedExportedResultsMeasures}\r\n selectedExportedIndicators={\r\n rest.selectedExportedResultsIndicators\r\n }\r\n disableSelectedResultsDownload={\r\n rest.disableSelectedResultsDownload\r\n }\r\n disableAllResultsDownload={rest.disableAllResultsDownload}\r\n onChangeMeasure={rest.onChangeResultsMeasure}\r\n onChangeIndicator={rest.onChangeResultsIndicator}\r\n onChangeMaritalStatus={rest.onChangeResultsMaritalStatus}\r\n onToggleExportedMeasure={rest.onToggleExportedResultsMeasure}\r\n onToggleExportedIndicator={rest.onToggleExportedResultsIndicator}\r\n onDownloadSelectedResults={rest.onDownloadSelectedResults}\r\n onDownloadAllResults={rest.onDownloadAllResults}\r\n />\r\n )}\r\n />\r\n <Route\r\n path={`${match.path}/charts`}\r\n render={() => (\r\n <Charts\r\n comparison={true}\r\n runName={rest.selectedRunName}\r\n comparisonRunName={rest.selectedComparisonRunName}\r\n period={rest.period}\r\n selectedMeasure={rest.selectedChartsMeasure}\r\n selectedMaritalStatus={rest.selectedChartsMaritalStatus}\r\n selectedChartsIndicators={rest.selectedChartsIndicators}\r\n showSurveyLegend={rest.showSurveyLegend}\r\n results={rest.chartResults}\r\n surveyData={rest.chartSurveyData}\r\n emuData={rest.chartEmuData}\r\n chartSets={rest.chartSets}\r\n selectedExportedChartSet={rest.selectedExportedChartSet}\r\n selectedExportedMeasure={rest.selectedExportedChartsMeasure}\r\n selectedExportedMaritalStatus={\r\n rest.selectedExportedChartsMaritalStatus\r\n }\r\n disableChartSetDownload={rest.disableChartSetDownload}\r\n disableSelectedChartsDownload={rest.disableSelectedChartsDownload}\r\n onChangeMeasure={rest.onChangeChartsMeasure}\r\n onChangeMaritalStatus={rest.onChangeChartsMaritalStatus}\r\n onToggleChart={rest.onToggleChart}\r\n onToggleSurveyLegend={rest.onToggleSurveyLegend}\r\n onChangeExportedChartSet={rest.onChangeExportedChartSet}\r\n onChangeExportedMeasure={rest.onChangeExportedChartsMeasure}\r\n onChangeExportedMaritalStatus={\r\n rest.onChangeExportedChartsMaritalStatus\r\n }\r\n onDownloadChartSet={rest.onDownloadChartSet}\r\n onDownloadSelectedCharts={rest.onDownloadSelectedCharts}\r\n />\r\n )}\r\n />\r\n </Switch>\r\n </div>\r\n </div>\r\n);\r\n\r\nCompareRunsMainContent.propTypes = {\r\n period: periodPropType,\r\n runTitle: PropTypes.string,\r\n selectedRunName: PropTypes.string,\r\n selectedComparisonRunName: PropTypes.string,\r\n selectedResultsMeasure: PropTypes.oneOf([\"percentage\", \"count\"]).isRequired,\r\n selectedResultsIndicator: PropTypes.string.isRequired,\r\n selectedResultsMaritalStatus: PropTypes.string.isRequired,\r\n tableResults: PropTypes.arrayOf(indicatorResultPropType),\r\n selectedExportedResultsMeasures: PropTypes.arrayOf(measurePropType),\r\n selectedExportedResultsIndicators: PropTypes.arrayOf(PropTypes.string),\r\n disableSelectedResultsDownload: PropTypes.bool.isRequired,\r\n disableAllResultsDownload: PropTypes.bool.isRequired,\r\n selectedChartsIndicators: PropTypes.arrayOf(PropTypes.string),\r\n showSurveyLegend: PropTypes.bool,\r\n chartResults: resultPropType,\r\n chartSurveyData: PropTypes.arrayOf(surveyDatumPropType),\r\n chartEmuData: PropTypes.arrayOf(emuDatumPropType),\r\n chartSets: PropTypes.arrayOf(labeledValuePropType),\r\n selectedExportedChartSet: PropTypes.string,\r\n selectedExportedChartsMeasure: PropTypes.string,\r\n selectedExportedChartsMaritalStatus: PropTypes.string,\r\n disableChartSetDownload: PropTypes.bool.isRequired,\r\n disableSelectedChartsDownload: PropTypes.bool.isRequired,\r\n onChangeResultsMeasure: PropTypes.func.isRequired,\r\n onChangeResultsIndicator: PropTypes.func.isRequired,\r\n onChangeResultsMaritalStatus: PropTypes.func.isRequired,\r\n onToggleExportedResultsMeasure: PropTypes.func.isRequired,\r\n onToggleExportedResultsIndicator: PropTypes.func.isRequired,\r\n onDownloadSelectedResults: PropTypes.func.isRequired,\r\n onDownloadAllResults: PropTypes.func.isRequired,\r\n onChangeChartsMeasure: PropTypes.func.isRequired,\r\n onChangeChartsMaritalStatus: PropTypes.func.isRequired,\r\n onToggleChart: PropTypes.func.isRequired,\r\n onToggleSurveyLegend: PropTypes.func.isRequired,\r\n onChangeExportedChartSet: PropTypes.func.isRequired,\r\n onChangeExportedChartsMeasure: PropTypes.func.isRequired,\r\n onChangeExportedChartsMaritalStatus: PropTypes.func.isRequired,\r\n onDownloadChartSet: PropTypes.func.isRequired,\r\n onDownloadSelectedCharts: PropTypes.func.isRequired\r\n};\r\n\r\nCompareRunsMainContent.defaultProps = {\r\n tableResults: [],\r\n selectedChartsIndicators: [],\r\n showSurveyLegend: false,\r\n chartSurveyData: [],\r\n chartEmuData: [],\r\n chartSets: [],\r\n selectedExportedResultsMeasures: [],\r\n selectedExportedResultsIndicators: []\r\n};\r\n\r\nexport default withTranslation()(withStyles(styles)(CompareRunsMainContent));\r\n","import contentWithDrawer from \"../contentWithDrawer\";\r\nimport DrawerContent from \"./CompareRunsDrawerContent\";\r\nimport MainContent from \"./CompareRunsMainContent\";\r\n\r\nconst CompareRuns = contentWithDrawer(MainContent, DrawerContent);\r\n\r\nexport default CompareRuns;\r\n","import React, { Component } from \"react\";\r\nimport { defaultFirstYear, indicators } from \"../constants\";\r\nimport {\r\n createSlug,\r\n getDefaultLastYear,\r\n toggleSetExistence\r\n} from \"../utilities\";\r\nimport {\r\n convertMaritalStatusToIsInUnion,\r\n filterResults,\r\n getPeriod,\r\n normalizeChartSets,\r\n normalizeDatabases,\r\n normalizeEmuData,\r\n normalizeResults,\r\n normalizeRuns,\r\n normalizeSurveyData\r\n} from \"../data\";\r\nimport * as api from \"../api/api\";\r\nimport fileDownload from \"js-file-download\";\r\nimport { withErrorBoundary } from \"../errors\";\r\nimport CompareRuns from \"../components/CompareRuns/CompareRuns\";\r\n\r\nconst createInitialState = () => {\r\n return {\r\n period: {\r\n firstYear: defaultFirstYear,\r\n lastYear: getDefaultLastYear()\r\n },\r\n selectedResultsMeasure: \"percentage\",\r\n selectedResultsIndicator: indicators[0].value,\r\n selectedResultsMaritalStatus: \"married\",\r\n selectedExportedResultsMeasures: new Set(),\r\n selectedExportedResultsIndicators: new Set(),\r\n selectedChartsMeasure: \"percentage\",\r\n selectedChartsMaritalStatus: \"married\",\r\n selectedChartsIndicators: new Set(\r\n indicators\r\n .filter(indicator => indicator.chart)\r\n .map(indicator => indicator.value)\r\n ),\r\n showSurveyLegend: true,\r\n chartSets: [\r\n {\r\n value: \"complete\",\r\n label: \"Complete\"\r\n }\r\n ],\r\n selectedExportedChartSet: \"complete\",\r\n selectedExportedChartsMeasure: \"percentage\",\r\n selectedExportedChartsMaritalStatus: \"married\"\r\n };\r\n};\r\n\r\nclass CompareRunsContainer extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.signal = api.getSignal();\r\n\r\n this.state = createInitialState();\r\n }\r\n\r\n setStateSafely = (state, callback) => {\r\n if (!this.unmounting) {\r\n this.setState(state, callback);\r\n }\r\n };\r\n\r\n getCountries = (runId, comparisonRunId) => {\r\n if (!runId || !comparisonRunId) {\r\n return {};\r\n }\r\n\r\n const run = this.state.runs[runId];\r\n const comparisonRun = this.state.runs[comparisonRunId];\r\n\r\n const countryNumericCodes = run.countryNumericCodes.filter(\r\n countryNumericCode =>\r\n comparisonRun.countryNumericCodes.includes(countryNumericCode)\r\n );\r\n\r\n const divisions = this.state.databases[run.surveyDatabaseId].divisions;\r\n\r\n return countryNumericCodes.reduce((result, countryNumericCode) => {\r\n if (\r\n divisions[countryNumericCode] &&\r\n divisions[countryNumericCode].isCountry\r\n ) {\r\n result[countryNumericCode] = {\r\n numericCode: countryNumericCode,\r\n ...divisions[countryNumericCode]\r\n };\r\n }\r\n\r\n return result;\r\n }, {});\r\n };\r\n\r\n getRegions = (runId, comparisonRunId) => {\r\n if (!runId || !comparisonRunId) {\r\n return [];\r\n }\r\n\r\n const runRegions = this.state.runs[runId].regionCodes || [];\r\n const comparisonRunRegions =\r\n this.state.runs[comparisonRunId].regionCodes || [];\r\n\r\n return runRegions.filter(region => comparisonRunRegions.includes(region));\r\n };\r\n\r\n selectDefaultCountryOrRegion = (runId, comparisonRunId) => {\r\n const countryNumericCodes = Object.keys(\r\n this.getCountries(runId, comparisonRunId)\r\n );\r\n const regions = this.getRegions(runId, comparisonRunId);\r\n\r\n if (countryNumericCodes.length + regions.length === 1) {\r\n if (countryNumericCodes.length) {\r\n this.setStateSafely({\r\n selectedCountryNumericCode: parseInt(countryNumericCodes[0], 10)\r\n });\r\n } else {\r\n this.setStateSafely({\r\n selectedRegion: regions[0]\r\n });\r\n }\r\n }\r\n };\r\n\r\n getSelectedCountryNumericCodeOrRegion = () =>\r\n this.state.selectedRegion || this.state.selectedCountryNumericCode;\r\n\r\n createRunTitle = () => {\r\n let countryAlphaCodeOrRegion;\r\n\r\n if (this.state.selectedRegion) {\r\n countryAlphaCodeOrRegion = this.state.selectedRegion;\r\n } else if (this.state.selectedCountryNumericCode) {\r\n const selectedRun = this.state.runs[this.state.selectedRunId];\r\n\r\n countryAlphaCodeOrRegion = this.state.databases[\r\n selectedRun.surveyDatabaseId\r\n ].divisions[this.state.selectedCountryNumericCode].alphaCode;\r\n }\r\n\r\n if (countryAlphaCodeOrRegion) {\r\n const selectedRun = this.state.runs[this.state.selectedRunId];\r\n const selectedComparisonRun = this.state.runs[\r\n this.state.selectedComparisonRunId\r\n ];\r\n\r\n const { firstYear, lastYear } = this.state.period;\r\n\r\n return `Run ${selectedRun.name} vs ${\r\n selectedComparisonRun.name\r\n } for ${countryAlphaCodeOrRegion} during ${firstYear}-${lastYear}`;\r\n }\r\n };\r\n\r\n updateRun = (runId, runIdProperty, comparisonRunId) => {\r\n this.setStateSafely({\r\n [runIdProperty]: runId\r\n });\r\n\r\n this.selectDefaultCountryOrRegion(runId, comparisonRunId);\r\n };\r\n\r\n getMeasureResultsForPeriod = measure => {\r\n if (!this.state.results) {\r\n return;\r\n }\r\n\r\n const measureKey = measure === \"percentage\" ? \"proportions\" : \"populations\";\r\n\r\n return filterResults(\r\n this.state.results[measureKey],\r\n this.state.period.firstYear,\r\n this.state.period.lastYear\r\n );\r\n };\r\n\r\n getTableResults = () => {\r\n let measureResultsForPeriod = this.getMeasureResultsForPeriod(\r\n this.state.selectedResultsMeasure\r\n );\r\n\r\n const isInUnion = convertMaritalStatusToIsInUnion(\r\n this.state.selectedResultsMaritalStatus\r\n );\r\n\r\n return (\r\n measureResultsForPeriod &&\r\n measureResultsForPeriod[this.state.selectedResultsIndicator].filter(\r\n datum => datum.isInUnion === isInUnion\r\n )\r\n );\r\n };\r\n\r\n getChartSurveyData = () => {\r\n if (!this.state.surveyData) {\r\n return;\r\n }\r\n\r\n const { firstYear, lastYear } = this.state.period;\r\n\r\n const isInUnion = convertMaritalStatusToIsInUnion(\r\n this.state.selectedChartsMaritalStatus\r\n );\r\n\r\n return this.state.surveyData.filter(\r\n datum =>\r\n datum.startDate >= firstYear &&\r\n datum.startDate <= lastYear &&\r\n datum.isInUnion === isInUnion\r\n );\r\n };\r\n\r\n getChartResults = () => {\r\n const measureResultsForPeriod = this.getMeasureResultsForPeriod(\r\n this.state.selectedChartsMeasure\r\n );\r\n\r\n if (!measureResultsForPeriod) {\r\n return;\r\n }\r\n\r\n const isInUnion = convertMaritalStatusToIsInUnion(\r\n this.state.selectedChartsMaritalStatus\r\n );\r\n\r\n const results = Object.keys(measureResultsForPeriod).reduce(\r\n (result, indicator) => {\r\n if (this.state.selectedChartsIndicators.has(indicator)) {\r\n result[indicator] = measureResultsForPeriod[indicator].filter(\r\n datum => datum.isInUnion === isInUnion\r\n );\r\n }\r\n\r\n return result;\r\n },\r\n {}\r\n );\r\n\r\n if (\r\n !Object.keys(results).length ||\r\n !results[Object.keys(results)[0]].length\r\n ) {\r\n return;\r\n }\r\n\r\n return results;\r\n };\r\n\r\n onSelectRun = runId => {\r\n this.updateRun(runId, \"selectedRunId\", this.state.selectedComparisonRunId);\r\n };\r\n\r\n onSelectComparisonRun = runId => {\r\n this.updateRun(runId, \"selectedComparisonRunId\", this.state.selectedRunId);\r\n };\r\n\r\n onSelectCountry = countryNumericCode => {\r\n this.setStateSafely({\r\n selectedCountryNumericCode: countryNumericCode,\r\n selectedRegion: undefined\r\n });\r\n };\r\n\r\n onSelectRegion = region => {\r\n this.setStateSafely({\r\n selectedRegion: region\r\n });\r\n };\r\n\r\n onChangePeriod = period => {\r\n this.setStateSafely({\r\n period\r\n });\r\n };\r\n\r\n onCompareRuns = () => {\r\n const run = this.state.runs[this.state.selectedRunId];\r\n const comparisonRun = this.state.runs[this.state.selectedComparisonRunId];\r\n\r\n const countryNumericCodeOrRegion = this.getSelectedCountryNumericCodeOrRegion();\r\n\r\n this.setStateSafely({\r\n loadingRuns: true\r\n });\r\n\r\n // noinspection JSCheckFunctionSignatures\r\n Promise.all([\r\n api.fetchSurveyDatabase(\r\n run.surveyDatabaseId,\r\n countryNumericCodeOrRegion,\r\n this.state.selectedRunId,\r\n this.signal.token\r\n ),\r\n api.fetchSurveyDatabase(\r\n comparisonRun.surveyDatabaseId,\r\n countryNumericCodeOrRegion,\r\n this.state.selectedComparisonRunId,\r\n this.signal.token\r\n ),\r\n run.emuDatabaseId\r\n ? api.fetchEmuDatabase(\r\n run.emuDatabaseId,\r\n countryNumericCodeOrRegion,\r\n this.signal.token\r\n )\r\n : new Promise(resolve =>\r\n resolve({\r\n data: []\r\n })\r\n ),\r\n comparisonRun.emuDatabaseId\r\n ? api.fetchEmuDatabase(\r\n comparisonRun.emuDatabaseId,\r\n countryNumericCodeOrRegion,\r\n this.signal.token\r\n )\r\n : new Promise(resolve =>\r\n resolve({\r\n data: []\r\n })\r\n ),\r\n api.fetchResults(\r\n this.state.selectedRunId,\r\n this.state.selectedComparisonRunId,\r\n this.getSelectedCountryNumericCodeOrRegion(),\r\n this.signal.token\r\n )\r\n ])\r\n .then(response => {\r\n if (!response || response.some(item => !item)) {\r\n return;\r\n }\r\n\r\n const [\r\n runSurveyData,\r\n comparisonRunSurveyData,\r\n runEmuData,\r\n comparisonRunEmuData,\r\n results\r\n ] = response;\r\n\r\n const period = getPeriod(results.data.proportions);\r\n\r\n this.setStateSafely({\r\n period,\r\n surveyData: normalizeSurveyData([\r\n ...runSurveyData.data,\r\n ...comparisonRunSurveyData.data\r\n ]),\r\n emuData: normalizeEmuData([\r\n ...runEmuData.data,\r\n ...comparisonRunEmuData.data\r\n ]),\r\n results: {\r\n proportions: normalizeResults(results.data.proportions),\r\n populations: normalizeResults(results.data.populations)\r\n }\r\n });\r\n })\r\n .finally(() => {\r\n this.setStateSafely({\r\n loadingRuns: false\r\n });\r\n });\r\n };\r\n\r\n onChangeResultsMeasure = measure => {\r\n this.setStateSafely({\r\n selectedResultsMeasure: measure,\r\n selectedResultsIndicator:\r\n measure === \"percentage\" ||\r\n this.state.selectedResultsIndicator !== \"ratioModernAny\"\r\n ? this.state.selectedResultsIndicator\r\n : indicators[0].value\r\n });\r\n };\r\n\r\n onChangeResultsIndicator = indicator => {\r\n this.setStateSafely({\r\n selectedResultsIndicator: indicator\r\n });\r\n };\r\n\r\n onChangeResultsMaritalStatus = martialStatus => {\r\n this.setStateSafely({\r\n selectedResultsMaritalStatus: martialStatus\r\n });\r\n };\r\n\r\n onToggleExportedResultsMeasure = measure => {\r\n const selectedExportedResultsMeasures = new Set(\r\n this.state.selectedExportedResultsMeasures\r\n );\r\n\r\n toggleSetExistence(selectedExportedResultsMeasures, measure);\r\n\r\n this.setStateSafely({\r\n selectedExportedResultsMeasures\r\n });\r\n };\r\n\r\n onToggleExportedResultsIndicator = indicator => {\r\n const selectedExportedResultsIndicators = new Set(\r\n this.state.selectedExportedResultsIndicators\r\n );\r\n\r\n toggleSetExistence(selectedExportedResultsIndicators, indicator);\r\n\r\n this.setStateSafely({\r\n selectedExportedResultsIndicators\r\n });\r\n };\r\n\r\n onDownloadSelectedResults = () => {\r\n api\r\n .downloadResults(\r\n this.state.selectedRunId,\r\n this.state.selectedComparisonRunId,\r\n this.getSelectedCountryNumericCodeOrRegion(),\r\n Array.from(this.state.selectedExportedResultsMeasures),\r\n Array.from(this.state.selectedExportedResultsIndicators),\r\n this.signal.token\r\n )\r\n .then(response => {\r\n if (!response) {\r\n return;\r\n }\r\n\r\n const run = this.state.runs[this.state.selectedRunId];\r\n\r\n const comparisonRun = this.state.runs[\r\n this.state.selectedComparisonRunId\r\n ];\r\n\r\n if (run && comparisonRun) {\r\n const prefix = `${run.name}_vs_${comparisonRun.name}`;\r\n\r\n fileDownload(response.data, createSlug(prefix, \"results.csv\"));\r\n }\r\n });\r\n };\r\n\r\n onDownloadAllResults = () => {\r\n api\r\n .downloadResults(\r\n this.state.selectedRunId,\r\n this.state.selectedComparisonRunId,\r\n this.getSelectedCountryNumericCodeOrRegion(),\r\n [\"percentage\", \"count\"],\r\n indicators.map(indicator => indicator.value),\r\n this.signal.token\r\n )\r\n .then(response => {\r\n if (!response) {\r\n return;\r\n }\r\n\r\n const run = this.state.runs[this.state.selectedRunId];\r\n const comparisonRun = this.state.runs[\r\n this.state.selectedComparisonRunId\r\n ];\r\n\r\n if (run && comparisonRun) {\r\n const prefix = `${run.name}_vs_${comparisonRun.name}`;\r\n\r\n fileDownload(response.data, createSlug(prefix, \"all_results.csv\"));\r\n }\r\n });\r\n };\r\n\r\n onChangeChartsMeasure = measure => {\r\n this.setStateSafely({\r\n selectedChartsMeasure: measure\r\n });\r\n };\r\n\r\n onChangeChartsMaritalStatus = martialStatus => {\r\n this.setStateSafely({\r\n selectedChartsMaritalStatus: martialStatus\r\n });\r\n };\r\n\r\n onToggleChart = chart => {\r\n const selectedChartsIndicators = new Set(\r\n this.state.selectedChartsIndicators\r\n );\r\n\r\n toggleSetExistence(selectedChartsIndicators, chart);\r\n\r\n this.setStateSafely({\r\n selectedChartsIndicators\r\n });\r\n };\r\n\r\n onToggleSurveyLegend = () => {\r\n this.setStateSafely({\r\n showSurveyLegend: !this.state.showSurveyLegend\r\n });\r\n };\r\n\r\n onChangeExportedChartSet = chartSet => {\r\n this.setStateSafely({\r\n selectedExportedChartSet: chartSet\r\n });\r\n };\r\n\r\n onChangeExportedChartsMeasure = measure => {\r\n this.setStateSafely({\r\n selectedExportedChartsMeasure: measure\r\n });\r\n };\r\n\r\n onChangeExportedChartsMaritalStatus = maritalStatus => {\r\n this.setStateSafely({\r\n selectedExportedChartsMaritalStatus: maritalStatus\r\n });\r\n };\r\n\r\n onDownloadChartSet = () => {\r\n api\r\n .downloadChartSet(\r\n this.state.selectedRunId,\r\n this.state.selectedComparisonRunId,\r\n this.getSelectedCountryNumericCodeOrRegion(),\r\n this.state.selectedExportedChartSet,\r\n this.state.selectedExportedChartsMaritalStatus,\r\n this.state.selectedExportedChartsMeasure,\r\n this.signal.token\r\n )\r\n .then(response => {\r\n if (!response) {\r\n return;\r\n }\r\n\r\n const run = this.state.runs[this.state.selectedRunId];\r\n\r\n const comparisonRun = this.state.runs[\r\n this.state.selectedComparisonRunId\r\n ];\r\n\r\n if (run && comparisonRun) {\r\n const prefix = `${run.name}_vs_${comparisonRun.name}_${\r\n this.state.selectedExportedChartSet\r\n }`;\r\n\r\n fileDownload(response.data, createSlug(prefix, \"charts.pdf\"));\r\n }\r\n });\r\n };\r\n\r\n onDownloadSelectedCharts = () => {\r\n api\r\n .downloadCharts(\r\n this.state.selectedRunId,\r\n this.state.selectedComparisonRunId,\r\n this.getSelectedCountryNumericCodeOrRegion(),\r\n this.state.selectedExportedChartsMaritalStatus,\r\n this.state.selectedExportedChartsMeasure,\r\n Array.from(this.state.selectedChartsIndicators),\r\n this.signal.token\r\n )\r\n .then(response => {\r\n if (!response) {\r\n return;\r\n }\r\n\r\n const run = this.state.runs[this.state.selectedRunId];\r\n\r\n const comparisonRun = this.state.runs[\r\n this.state.selectedComparisonRunId\r\n ];\r\n\r\n if (run && comparisonRun) {\r\n const prefix = `${run.name}_vs_${comparisonRun.name}`;\r\n\r\n fileDownload(response.data, createSlug(prefix, \"charts.pdf\"));\r\n }\r\n });\r\n };\r\n\r\n componentDidMount() {\r\n this.setStateSafely({\r\n loadingData: true\r\n });\r\n\r\n // noinspection JSCheckFunctionSignatures\r\n Promise.all([\r\n api.fetchDatabases(this.signal.token),\r\n api.fetchRuns(false, false, this.signal.token),\r\n api.fetchChartSets(this.signal.token)\r\n ])\r\n .then(response => {\r\n if (!response || response.some(item => !item)) {\r\n return;\r\n }\r\n\r\n const [databases, runs, chartSets] = response;\r\n\r\n this.setStateSafely({\r\n databases: normalizeDatabases(databases.data),\r\n runs: normalizeRuns(runs.data),\r\n chartSets: normalizeChartSets(chartSets.data)\r\n });\r\n })\r\n .finally(() => {\r\n this.setStateSafely({\r\n loadingData: false\r\n });\r\n });\r\n }\r\n\r\n componentWillUnmount() {\r\n this.unmounting = true;\r\n this.signal.cancel();\r\n }\r\n\r\n render() {\r\n return (\r\n <CompareRuns\r\n match={this.props.match}\r\n loadingData={this.state.loadingData}\r\n runs={this.state.runs}\r\n selectedRunId={this.state.selectedRunId}\r\n selectedRunName={\r\n this.state.runs &&\r\n this.state.selectedRunId &&\r\n this.state.runs[this.state.selectedRunId].name\r\n }\r\n selectedComparisonRunId={this.state.selectedComparisonRunId}\r\n selectedComparisonRunName={\r\n this.state.runs &&\r\n this.state.selectedComparisonRunId &&\r\n this.state.runs[this.state.selectedComparisonRunId].name\r\n }\r\n countries={this.getCountries(\r\n this.state.selectedRunId,\r\n this.state.selectedComparisonRunId\r\n )}\r\n selectedCountryNumericCode={this.state.selectedCountryNumericCode}\r\n regions={this.getRegions(\r\n this.state.selectedRunId,\r\n this.state.selectedComparisonRunId\r\n )}\r\n selectedRegion={this.state.selectedRegion}\r\n period={this.state.period}\r\n loadingRuns={this.state.loadingRuns}\r\n runsTitle={this.createRunTitle()}\r\n selectedResultsMeasure={this.state.selectedResultsMeasure}\r\n selectedResultsIndicator={this.state.selectedResultsIndicator}\r\n selectedResultsMaritalStatus={this.state.selectedResultsMaritalStatus}\r\n tableResults={this.getTableResults()}\r\n selectedExportedResultsMeasures={Array.from(\r\n this.state.selectedExportedResultsMeasures\r\n )}\r\n selectedExportedResultsIndicators={Array.from(\r\n this.state.selectedExportedResultsIndicators\r\n )}\r\n disableSelectedResultsDownload={\r\n !api.createResultsDownloadUrl(\r\n this.state.selectedRunId,\r\n this.state.selectedComparisonRunId,\r\n this.getSelectedCountryNumericCodeOrRegion(),\r\n Array.from(this.state.selectedExportedResultsMeasures),\r\n Array.from(this.state.selectedExportedResultsIndicators)\r\n )\r\n }\r\n disableAllResultsDownload={\r\n !api.createResultsDownloadUrl(\r\n this.state.selectedRunId,\r\n this.state.selectedComparisonRunId,\r\n this.getSelectedCountryNumericCodeOrRegion(),\r\n [\"percentage\", \"count\"],\r\n indicators.map(indicator => indicator.value)\r\n )\r\n }\r\n selectedChartsMeasure={this.state.selectedChartsMeasure}\r\n selectedChartsMaritalStatus={this.state.selectedChartsMaritalStatus}\r\n selectedChartsIndicators={Array.from(\r\n this.state.selectedChartsIndicators\r\n )}\r\n showSurveyLegend={this.state.showSurveyLegend}\r\n chartResults={this.getChartResults()}\r\n chartSurveyData={this.getChartSurveyData()}\r\n chartEmuData={\r\n this.state.selectedChartsMaritalStatus === \"married\"\r\n ? this.state.emuData\r\n : undefined\r\n }\r\n chartSets={this.state.chartSets}\r\n selectedExportedChartSet={this.state.selectedExportedChartSet}\r\n selectedExportedChartsMeasure={this.state.selectedExportedChartsMeasure}\r\n selectedExportedChartsMaritalStatus={\r\n this.state.selectedExportedChartsMaritalStatus\r\n }\r\n disableChartSetDownload={\r\n !api.createChartSetDownloadUrl(\r\n this.state.selectedRunId,\r\n undefined,\r\n this.getSelectedCountryNumericCodeOrRegion(),\r\n this.state.selectedExportedChartSet,\r\n this.state.selectedExportedChartsMaritalStatus,\r\n this.state.selectedExportedChartsMeasure\r\n )\r\n }\r\n disableSelectedChartsDownload={\r\n !api.createChartsDownloadUrl(\r\n this.state.selectedRunId,\r\n undefined,\r\n this.getSelectedCountryNumericCodeOrRegion(),\r\n this.state.selectedExportedChartsMaritalStatus,\r\n this.state.selectedExportedChartsMeasure,\r\n Array.from(this.state.selectedChartsIndicators)\r\n )\r\n }\r\n onSelectRun={this.onSelectRun}\r\n onSelectComparisonRun={this.onSelectComparisonRun}\r\n onSelectCountry={this.onSelectCountry}\r\n onSelectRegion={this.onSelectRegion}\r\n onChangePeriod={this.onChangePeriod}\r\n onCompareRuns={this.onCompareRuns}\r\n onChangeResultsMeasure={this.onChangeResultsMeasure}\r\n onChangeResultsIndicator={this.onChangeResultsIndicator}\r\n onChangeResultsMaritalStatus={this.onChangeResultsMaritalStatus}\r\n onToggleExportedResultsMeasure={this.onToggleExportedResultsMeasure}\r\n onToggleExportedResultsIndicator={this.onToggleExportedResultsIndicator}\r\n onDownloadSelectedResults={this.onDownloadSelectedResults}\r\n onDownloadAllResults={this.onDownloadAllResults}\r\n onChangeChartsMeasure={this.onChangeChartsMeasure}\r\n onChangeChartsMaritalStatus={this.onChangeChartsMaritalStatus}\r\n onToggleChart={this.onToggleChart}\r\n onToggleSurveyLegend={this.onToggleSurveyLegend}\r\n onChangeExportedChartSet={this.onChangeExportedChartSet}\r\n onChangeExportedChartsMeasure={this.onChangeExportedChartsMeasure}\r\n onChangeExportedChartsMaritalStatus={\r\n this.onChangeExportedChartsMaritalStatus\r\n }\r\n onDownloadChartSet={this.onDownloadChartSet}\r\n onDownloadSelectedCharts={this.onDownloadSelectedCharts}\r\n />\r\n );\r\n }\r\n}\r\n\r\nexport default withErrorBoundary(CompareRunsContainer);\r\n","import React from \"react\";\r\nimport SvgIcon from \"@material-ui/core/SvgIcon\";\r\n\r\nconst EnIcon = props => (\r\n <SvgIcon viewBox=\"0 0 399.99942 210.52602\" {...props}>\r\n <g transform=\"scale(.053981)\">\r\n <rect width=\"7410\" height=\"3900\" fill=\"#b22234\" />\r\n <path\r\n d=\"m0 450h7410m0 600h-7410m0 600h7410m0 600h-7410m0 600h7410m0 600h-7410\"\r\n stroke=\"#fff\"\r\n strokeWidth=\"300\"\r\n />\r\n <rect width=\"2964\" height=\"2100\" fill=\"#3c3b6e\" />\r\n <g fill=\"#fff\">\r\n <g id=\"s18\">\r\n <g id=\"s9\">\r\n <g id=\"s5\">\r\n <g id=\"s4\">\r\n <path\r\n id=\"s\"\r\n d=\"m247 90 70.534 217.08-184.66-134.16h228.25l-184.66 134.16z\"\r\n />\r\n <use y=\"420\" width=\"100%\" height=\"100%\" href=\"#s\" />\r\n <use y=\"840\" width=\"100%\" height=\"100%\" href=\"#s\" />\r\n <use y=\"1260\" width=\"100%\" height=\"100%\" href=\"#s\" />\r\n </g>\r\n <use y=\"1680\" width=\"100%\" height=\"100%\" href=\"#s\" />\r\n </g>\r\n <use x=\"247\" y=\"210\" width=\"100%\" height=\"100%\" href=\"#s4\" />\r\n </g>\r\n <use x=\"494\" width=\"100%\" height=\"100%\" href=\"#s9\" />\r\n </g>\r\n <use x=\"988\" width=\"100%\" height=\"100%\" href=\"#s18\" />\r\n <use x=\"1976\" width=\"100%\" height=\"100%\" href=\"#s9\" />\r\n <use x=\"2470\" width=\"100%\" height=\"100%\" href=\"#s5\" />\r\n </g>\r\n </g>\r\n </SvgIcon>\r\n);\r\n\r\nexport default EnIcon;\r\n","import React from \"react\";\r\nimport SvgIcon from \"@material-ui/core/SvgIcon\";\r\n\r\nconst FrIcon = props => (\r\n <SvgIcon viewBox=\"0 0 400 210.52632\" {...props}>\r\n <g transform=\"scale(133.33 105.26)\">\r\n <rect width=\"3\" height=\"2\" fill=\"#ed2939\" />\r\n <rect width=\"2\" height=\"2\" fill=\"#fff\" />\r\n <rect width=\"1\" height=\"2\" fill=\"#002395\" />\r\n </g>\r\n </SvgIcon>\r\n);\r\n\r\nexport default FrIcon;\r\n","import React from \"react\";\r\nimport * as PropTypes from \"prop-types\";\r\nimport { withStyles } from \"@material-ui/core\";\r\nimport IconButton from \"@material-ui/core/IconButton\";\r\nimport EnIcon from \"./EnIcon\";\r\nimport FrIcon from \"./FrIcon\";\r\n\r\nconst styles = theme => ({\r\n button: {\r\n padding: 4\r\n },\r\n container: {\r\n whiteSpace: \"nowrap\"\r\n },\r\n icon: {\r\n width: 30\r\n }\r\n});\r\n\r\nconst LanguageChooser = props => (\r\n <div className={props.classes.container}>\r\n <IconButton\r\n classes={{\r\n root: props.classes.button\r\n }}\r\n onClick={() => {\r\n props.onChangeLanguage(\"en\");\r\n }}\r\n >\r\n <EnIcon className={props.classes.icon} />\r\n </IconButton>\r\n <IconButton\r\n classes={{\r\n root: props.classes.button\r\n }}\r\n onClick={() => {\r\n props.onChangeLanguage(\"fr\");\r\n }}\r\n >\r\n <FrIcon className={props.classes.icon} />\r\n </IconButton>\r\n </div>\r\n);\r\n\r\nLanguageChooser.propTypes = {\r\n onChangeLanguage: PropTypes.func.isRequired\r\n};\r\n\r\nexport default withStyles(styles)(LanguageChooser);\r\n","import React from \"react\";\r\nimport * as PropTypes from \"prop-types\";\r\nimport { managedLabeledValuePropType } from \"../../propTypes\";\r\nimport { withStyles } from \"@material-ui/core/styles\";\r\nimport Checkbox from \"@material-ui/core/Checkbox\";\r\nimport List from \"@material-ui/core/List\";\r\nimport ListItem from \"@material-ui/core/ListItem\";\r\nimport ListItemText from \"@material-ui/core/ListItemText\";\r\n\r\nconst styles = {\r\n checkBox: {\r\n padding: 0\r\n },\r\n item: {\r\n padding: \"4px 0\"\r\n }\r\n};\r\n\r\nconst ManageDataItems = props => (\r\n <List>\r\n {props.items.map(item => (\r\n <ListItem key={item.value} dense={true} className={props.classes.item}>\r\n <Checkbox\r\n checked={props.selectedItemValues.includes(item.value)}\r\n className={props.classes.checkBox}\r\n onChange={() => {\r\n props.onToggleItem(item.value);\r\n }}\r\n />\r\n <ListItemText\r\n primary={\r\n <>\r\n <span>{item.label}</span>\r\n\r\n {item.isGlobal && <sup>*</sup>}\r\n {item.isInUse && <sup>†</sup>}\r\n\r\n {item.createdAt && (\r\n <span>{` (${item.createdAt.toLocaleDateString()})`}</span>\r\n )}\r\n </>\r\n }\r\n />\r\n </ListItem>\r\n ))}\r\n </List>\r\n);\r\n\r\nManageDataItems.propTypes = {\r\n items: PropTypes.arrayOf(managedLabeledValuePropType).isRequired,\r\n selectedItemValues: PropTypes.arrayOf(PropTypes.string).isRequired,\r\n onToggleItem: PropTypes.func.isRequired\r\n};\r\n\r\nexport default withStyles(styles)(ManageDataItems);\r\n","import React from \"react\";\r\nimport * as PropTypes from \"prop-types\";\r\nimport { managedLabeledValuePropType } from \"../../propTypes\";\r\nimport { withStyles } from \"@material-ui/core/styles\";\r\nimport Button from \"@material-ui/core/Button\";\r\nimport { withTranslation } from \"react-i18next\";\r\nimport ManageDataItems from \"./ManageDataItems\";\r\n\r\nconst styles = {\r\n button: {\r\n marginRight: 20\r\n },\r\n buttonGroup: {\r\n marginTop: 20\r\n },\r\n footnotes: {\r\n margin: \"1em 0\"\r\n }\r\n};\r\n\r\nconst ManageDataDatabases = ({ t, ...rest }) => (\r\n <div>\r\n <ManageDataItems\r\n items={rest.databases}\r\n selectedItemValues={rest.selectedDatabaseIds}\r\n onToggleItem={rest.onToggleDatabase}\r\n />\r\n\r\n <div className={rest.classes.buttonGroup}>\r\n <Button\r\n variant=\"contained\"\r\n color=\"primary\"\r\n disabled={!rest.selectedDatabaseIds.length}\r\n className={rest.classes.button}\r\n onClick={rest.onDownloadDatabases}\r\n >\r\n {t(\"Download selected databases\")}\r\n </Button>\r\n\r\n <Button\r\n variant=\"contained\"\r\n color=\"secondary\"\r\n disabled={\r\n !rest.selectedDatabaseIds.length ||\r\n rest.databases.filter(\r\n database =>\r\n rest.selectedDatabaseIds.includes(database.value) &&\r\n (database.isInUse || database.isGlobal)\r\n ).length > 0\r\n }\r\n className={rest.classes.button}\r\n onClick={rest.onDeleteDatabases}\r\n >\r\n {t(\"Delete selected databases\")}\r\n </Button>\r\n </div>\r\n\r\n <div className={rest.classes.footnotes}>\r\n <div>\r\n <sup>*</sup>\r\n {t(\"Global databases cannot be deleted.\")}\r\n </div>\r\n <div>\r\n <sup>†</sup>\r\n {t(\"Databases referenced by active runs cannot be deleted.\")}\r\n </div>\r\n </div>\r\n </div>\r\n);\r\n\r\nManageDataDatabases.propTypes = {\r\n databases: PropTypes.arrayOf(managedLabeledValuePropType).isRequired,\r\n selectedDatabaseIds: PropTypes.arrayOf(PropTypes.string).isRequired,\r\n onToggleDatabase: PropTypes.func.isRequired,\r\n onDownloadDatabases: PropTypes.func.isRequired,\r\n onDeleteDatabases: PropTypes.func.isRequired\r\n};\r\n\r\nManageDataDatabases.defaultProps = {\r\n databases: []\r\n};\r\n\r\nexport default withTranslation()(withStyles(styles)(ManageDataDatabases));\r\n","import React from \"react\";\r\nimport * as PropTypes from \"prop-types\";\r\nimport { withStyles } from \"@material-ui/core\";\r\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\r\n\r\nconst styles = theme => ({\r\n loading: {\r\n display: \"flex\",\r\n alignItems: \"center\"\r\n },\r\n message: {\r\n marginLeft: theme.spacing.unit * 2\r\n }\r\n});\r\n\r\nconst Loading = props => (\r\n <div>\r\n {!props.loading ? (\r\n props.children\r\n ) : (\r\n <div className={props.classes.loading}>\r\n <CircularProgress size={20} />\r\n <div className={props.classes.message}>{props.message}</div>\r\n </div>\r\n )}\r\n </div>\r\n);\r\n\r\nLoading.propTypes = {\r\n loading: PropTypes.bool,\r\n message: PropTypes.string\r\n};\r\n\r\nLoading.defaultProps = {\r\n loading: false,\r\n message: \"Loading data...\"\r\n};\r\n\r\nexport default withStyles(styles)(Loading);\r\n","import React from \"react\";\r\nimport * as PropTypes from \"prop-types\";\r\nimport { managedLabeledValuePropType } from \"../../propTypes\";\r\nimport { withStyles } from \"@material-ui/core/styles\";\r\nimport Button from \"@material-ui/core/Button\";\r\nimport { withTranslation } from \"react-i18next\";\r\nimport ManageDataItems from \"./ManageDataItems\";\r\n\r\nconst styles = {\r\n button: {\r\n marginRight: 20\r\n },\r\n buttonGroup: {\r\n marginTop: 20\r\n }\r\n};\r\n\r\nconst ManageDataRuns = ({ t, ...rest }) => (\r\n <div>\r\n <ManageDataItems\r\n items={rest.runs}\r\n selectedItemValues={rest.selectedRunIds}\r\n onToggleItem={rest.onToggleRun}\r\n />\r\n\r\n <div className={rest.classes.buttonGroup}>\r\n <Button\r\n variant=\"contained\"\r\n color=\"secondary\"\r\n disabled={\r\n !rest.selectedRunIds.length ||\r\n rest.runs.filter(\r\n run => rest.selectedRunIds.includes(run.value) && run.isGlobal\r\n ).length\r\n }\r\n className={rest.classes.button}\r\n onClick={rest.onDeleteRuns}\r\n >\r\n {t(\"Delete selected runs\")}\r\n </Button>\r\n </div>\r\n\r\n <p>\r\n <sup>*</sup>{t(\"Global runs cannot be deleted.\")}\r\n </p>\r\n </div>\r\n);\r\n\r\nManageDataRuns.propTypes = {\r\n runs: PropTypes.arrayOf(managedLabeledValuePropType),\r\n selectedRunIds: PropTypes.arrayOf(PropTypes.string).isRequired,\r\n onToggleRun: PropTypes.func.isRequired,\r\n onDeleteRuns: PropTypes.func.isRequired\r\n};\r\n\r\nManageDataRuns.defaultProps = {\r\n runs: []\r\n};\r\n\r\nexport default withTranslation()(withStyles(styles)(ManageDataRuns));\r\n","import React from \"react\";\r\nimport * as PropTypes from \"prop-types\";\r\nimport { managedLabeledValuePropType } from \"../../propTypes\";\r\nimport { Route, Switch, Redirect } from \"react-router-dom\";\r\nimport { withStyles } from \"@material-ui/core/styles\";\r\nimport { withTranslation } from \"react-i18next\";\r\nimport Databases from \"./ManageDataDatabases\";\r\nimport Loading from \"../Loading\";\r\nimport NavigationTab from \"../NavigationTab\";\r\nimport Runs from \"./ManageDataRuns\";\r\n\r\nconst styles = {\r\n tabPage: {\r\n margin: 10\r\n }\r\n};\r\n\r\nconst ManageData = ({ match, t, ...rest }) => (\r\n <Loading\r\n loading={rest.loadingData}\r\n message={t(\"Loading databases and runs...\")}\r\n >\r\n <p>\r\n {t(\r\n \"Cleaning up data you no longer need allows you to focus on new analyses.\"\r\n )}\r\n </p>\r\n\r\n <NavigationTab to=\"/managedata/databases\">{t(\"Databases\")}</NavigationTab>\r\n <NavigationTab to=\"/managedata/runs\">{t(\"Runs\")}</NavigationTab>\r\n\r\n <div className={rest.classes.tabPage}>\r\n <Switch>\r\n <Route\r\n exact\r\n path={match.path}\r\n render={() => <Redirect replace to={`${match.path}/databases`} />}\r\n />\r\n <Route\r\n path={`${match.path}/databases`}\r\n render={() => (\r\n <Databases\r\n databases={rest.databases}\r\n selectedDatabaseIds={rest.selectedDatabaseIds}\r\n onToggleDatabase={rest.onToggleDatabase}\r\n onDownloadDatabases={rest.onDownloadDatabases}\r\n onDeleteDatabases={rest.onDeleteDatabases}\r\n />\r\n )}\r\n />\r\n <Route\r\n path={`${match.path}/runs`}\r\n render={() => (\r\n <Runs\r\n runs={rest.runs}\r\n selectedRunIds={rest.selectedRunIds}\r\n onToggleRun={rest.onToggleRun}\r\n onDeleteRuns={rest.onDeleteRuns}\r\n />\r\n )}\r\n />\r\n </Switch>\r\n </div>\r\n </Loading>\r\n);\r\n\r\nManageData.propTypes = {\r\n loadingData: PropTypes.bool,\r\n databases: PropTypes.arrayOf(managedLabeledValuePropType),\r\n runs: PropTypes.arrayOf(managedLabeledValuePropType),\r\n selectedDatabaseIds: PropTypes.arrayOf(PropTypes.string).isRequired,\r\n selectedRunIds: PropTypes.arrayOf(PropTypes.string).isRequired,\r\n onToggleDatabase: PropTypes.func.isRequired,\r\n onDeleteDatabases: PropTypes.func.isRequired,\r\n onDownloadDatabases: PropTypes.func.isRequired,\r\n onToggleRun: PropTypes.func.isRequired,\r\n onDeleteRuns: PropTypes.func.isRequired\r\n};\r\n\r\nManageData.defaultProps = {\r\n loadingData: false,\r\n databases: [],\r\n runs: []\r\n};\r\n\r\nexport default withTranslation()(withStyles(styles)(ManageData));\r\n","import React, { Component } from \"react\";\r\nimport { toggleSetExistence } from \"../utilities\";\r\nimport { normalizeDatabases, normalizeRuns } from \"../data\";\r\nimport * as api from \"../api/api\";\r\nimport fileDownload from \"js-file-download\";\r\nimport { withErrorBoundary } from \"../errors\";\r\nimport ManageData from \"../components/ManageData/ManageData\";\r\n\r\nconst createInitialState = () => ({\r\n selectedDatabaseIds: new Set(),\r\n selectedRunIds: new Set()\r\n});\r\n\r\nclass ManageDataContainer extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.signal = api.getSignal();\r\n\r\n this.state = createInitialState();\r\n }\r\n\r\n setStateSafely = (state, callback) => {\r\n if (!this.unmounting) {\r\n this.setState(state, callback);\r\n }\r\n };\r\n\r\n normalizeDatabases = databases =>\r\n Object.entries(normalizeDatabases(databases))\r\n .filter(database => !database.isGlobal)\r\n .map(([id, database]) => ({\r\n value: id,\r\n label: `${database.name} (${database.type})`,\r\n isGlobal: database.isGlobal,\r\n isInUse: database.isInUse\r\n }));\r\n\r\n onToggleDatabase = databaseId => {\r\n // noinspection JSCheckFunctionSignatures\r\n const selectedDatabaseIds = new Set(this.state.selectedDatabaseIds);\r\n\r\n toggleSetExistence(selectedDatabaseIds, databaseId);\r\n\r\n this.setStateSafely({\r\n selectedDatabaseIds\r\n });\r\n };\r\n\r\n onDownloadDatabases = () => {\r\n const selectedDatabaseIds = Array.from(this.state.selectedDatabaseIds);\r\n\r\n api\r\n .downloadDatabases(selectedDatabaseIds, this.signal.token)\r\n .then(response => {\r\n if (!response) {\r\n return;\r\n }\r\n\r\n fileDownload(response.data, \"databases.zip\");\r\n });\r\n };\r\n\r\n onDeleteDatabases = () => {\r\n api\r\n .deleteDatabases(\r\n Array.from(this.state.selectedDatabaseIds),\r\n this.signal.token\r\n )\r\n .then(() => {\r\n const databases = this.state.databases.filter(\r\n database => !this.state.selectedDatabaseIds.has(database.value)\r\n );\r\n\r\n this.setStateSafely({\r\n selectedDatabaseIds: new Set(),\r\n databases\r\n });\r\n });\r\n };\r\n\r\n onToggleRun = runId => {\r\n // noinspection JSCheckFunctionSignatures\r\n const selectedRunIds = new Set(this.state.selectedRunIds);\r\n\r\n toggleSetExistence(selectedRunIds, runId);\r\n\r\n this.setStateSafely({\r\n selectedRunIds\r\n });\r\n };\r\n\r\n onDeleteRuns = () => {\r\n api\r\n .deleteRuns(Array.from(this.state.selectedRunIds), this.signal.token)\r\n .then(() => {\r\n const runs = this.state.runs.filter(\r\n run => !this.state.selectedRunIds.has(run.value)\r\n );\r\n\r\n this.setStateSafely({\r\n selectedRunIds: new Set(),\r\n runs\r\n });\r\n\r\n api.fetchDatabases(this.signal.token).then(response => {\r\n this.setStateSafely({\r\n databases: this.normalizeDatabases(response.data)\r\n });\r\n });\r\n });\r\n };\r\n\r\n componentDidMount() {\r\n this.setStateSafely({\r\n loadingData: true\r\n });\r\n\r\n // noinspection JSCheckFunctionSignatures\r\n Promise.all([\r\n api.fetchDatabases(this.signal.token),\r\n api.fetchRuns(true, true, this.signal.token)\r\n ])\r\n .then(response => {\r\n if (!response || response.some(item => !item)) {\r\n return;\r\n }\r\n\r\n const [databases, runs] = response;\r\n\r\n this.setStateSafely({\r\n databases: this.normalizeDatabases(databases.data),\r\n runs: Object.entries(normalizeRuns(runs.data))\r\n .filter(run => !run.isGlobal)\r\n .map(([id, run]) => ({\r\n value: id,\r\n label: run.name,\r\n isGlobal: run.isGlobal,\r\n createdAt: run.startedAt,\r\n completed: run.completed,\r\n failed: run.failed\r\n }))\r\n });\r\n })\r\n .finally(() => {\r\n this.setStateSafely({\r\n loadingData: false\r\n });\r\n });\r\n }\r\n\r\n componentWillUnmount() {\r\n this.unmounting = true;\r\n this.signal.cancel();\r\n }\r\n\r\n render() {\r\n return (\r\n <ManageData\r\n loadingData={this.state.loadingData}\r\n match={this.props.match}\r\n databases={this.state.databases}\r\n selectedDatabaseIds={Array.from(this.state.selectedDatabaseIds)}\r\n selectedRunIds={Array.from(this.state.selectedRunIds)}\r\n runs={this.state.runs}\r\n onToggleDatabase={this.onToggleDatabase}\r\n onDeleteDatabases={this.onDeleteDatabases}\r\n onDownloadDatabases={this.onDownloadDatabases}\r\n onToggleRun={this.onToggleRun}\r\n onDeleteRuns={this.onDeleteRuns}\r\n />\r\n );\r\n }\r\n}\r\n\r\nexport default withErrorBoundary(ManageDataContainer);\r\n","import React from \"react\";\r\nimport * as PropTypes from \"prop-types\";\r\nimport { labeledValuePropType } from \"../../propTypes\";\r\nimport { withStyles } from \"@material-ui/core/styles\";\r\nimport Button from \"@material-ui/core/Button\";\r\nimport Select from \"react-select\";\r\nimport { withTranslation } from \"react-i18next\";\r\n\r\nconst styles = {\r\n actionButton: {\r\n marginTop: 20\r\n },\r\n country: {\r\n marginLeft: 20\r\n },\r\n select: {\r\n marginTop: 10,\r\n width: 400\r\n },\r\n selectorGroup: {\r\n display: \"flex\"\r\n }\r\n};\r\n\r\nconst PrepareDataCountrySelector = ({ t, ...rest }) => (\r\n <div>\r\n <div className={rest.classes.selectorGroup}>\r\n <div>\r\n <label htmlFor=\"database\">{t(\"Database:\")}</label>\r\n <Select\r\n id=\"database\"\r\n placeholder={t(\"Select database...\")}\r\n options={rest.databases}\r\n value={rest.databases.filter(\r\n ({ value }) => value === rest.selectedDatabaseId\r\n )}\r\n className={rest.classes.select}\r\n onChange={({ value }) => rest.onSelectDatabase(value)}\r\n />\r\n </div>\r\n\r\n <div className={rest.classes.country}>\r\n <label htmlFor=\"country\">{t(\"Country:\")}</label>\r\n <Select\r\n id=\"country\"\r\n placeholder={t(\"Select country/population...\")}\r\n options={rest.countries}\r\n value={rest.countries.filter(\r\n ({ value }) =>\r\n parseInt(value, 10) === rest.selectedCountryNumericCode\r\n )}\r\n className={rest.classes.select}\r\n onChange={({ value }) => rest.onSelectCountry(parseInt(value, 10))}\r\n />\r\n </div>\r\n </div>\r\n\r\n <Button\r\n variant=\"contained\"\r\n color=\"primary\"\r\n disabled={!rest.selectedDatabaseId || !rest.selectedCountryNumericCode}\r\n className={rest.classes.actionButton}\r\n onClick={rest.onLoadData}\r\n >\r\n {t(\"Load existing data\")}\r\n </Button>\r\n </div>\r\n);\r\n\r\nPrepareDataCountrySelector.propTypes = {\r\n databases: PropTypes.arrayOf(labeledValuePropType),\r\n countries: PropTypes.arrayOf(labeledValuePropType),\r\n selectedDatabaseId: PropTypes.string,\r\n selectedCountryNumericCode: PropTypes.number,\r\n onSelectDatabase: PropTypes.func.isRequired,\r\n onSelectCountry: PropTypes.func.isRequired,\r\n onLoadData: PropTypes.func.isRequired\r\n};\r\n\r\nPrepareDataCountrySelector.defaultProps = {\r\n databases: [],\r\n countries: []\r\n};\r\n\r\nexport default withTranslation()(\r\n withStyles(styles)(PrepareDataCountrySelector)\r\n);\r\n","import React from \"react\";\r\nimport * as PropTypes from \"prop-types\";\r\nimport { withStyles } from \"@material-ui/core/styles\";\r\nimport Button from \"@material-ui/core/Button\";\r\nimport TextField from \"@material-ui/core/TextField\";\r\nimport { withTranslation } from \"react-i18next\";\r\n\r\nconst styles = {\r\n actionButton: {\r\n marginTop: 20\r\n },\r\n name: {\r\n display: \"block\",\r\n width: 400\r\n }\r\n};\r\n\r\nconst PrepareDataSaver = ({ t, ...rest }) => (\r\n <div>\r\n <TextField\r\n label={t(\"Data set name\")}\r\n placeholder={t(\"Specify name for data set...\")}\r\n InputLabelProps={{\r\n shrink: true\r\n }}\r\n fullWidth={true}\r\n value={rest.name || \"\"}\r\n className={rest.classes.name}\r\n onChange={e => {\r\n rest.onChangeName(e.target.value);\r\n }}\r\n />\r\n\r\n <Button\r\n variant=\"contained\"\r\n color=\"primary\"\r\n disabled={rest.saveDisabled}\r\n className={rest.classes.actionButton}\r\n onClick={rest.onSave}\r\n >\r\n {t(\"Save\")}\r\n </Button>\r\n </div>\r\n);\r\n\r\nPrepareDataSaver.propType = {\r\n name: PropTypes.string,\r\n saveDisabled: PropTypes.bool,\r\n onChangeName: PropTypes.func.isRequired,\r\n onSave: PropTypes.func.isRequired\r\n};\r\n\r\nPrepareDataSaver.defaultProps = {\r\n saveDisabled: false\r\n};\r\n\r\nexport default withTranslation()(withStyles(styles)(PrepareDataSaver));\r\n","import React from \"react\";\r\nimport * as PropTypes from \"prop-types\";\r\n\r\nconst BooleanCellRenderer = props => <span>{props.value ? \"✔\" : \"✘\"}</span>;\r\n\r\nBooleanCellRenderer.propTypes = {\r\n value: PropTypes.bool\r\n};\r\n\r\nexport default BooleanCellRenderer;\r\n","import React, { Component } from \"react\";\r\nimport * as PropTypes from \"prop-types\";\r\nimport { emuDatumPropType, labeledValuePropType } from \"../../propTypes\";\r\nimport { maximumYear, minimumYear } from \"../../constants\";\r\nimport {\r\n formatNumericCell,\r\n parseIntegerCell,\r\n parseNullableAlphaCell,\r\n parseNumericCell,\r\n parseNullableNumericCell,\r\n} from \"../../utilities\";\r\nimport { createDefaultEmuDatum } from \"../../data\";\r\nimport { withStyles } from \"@material-ui/core/styles\";\r\nimport classNames from \"classnames\";\r\nimport Button from \"@material-ui/core/Button\";\r\nimport { AgGridColumn, AgGridReact } from \"ag-grid-react\";\r\nimport \"ag-grid-enterprise\";\r\nimport \"ag-grid-community/dist/styles/ag-grid.css\";\r\nimport \"ag-grid-community/dist/styles/ag-theme-material.css\";\r\nimport { withTranslation } from \"react-i18next\";\r\nimport { translateGridText } from \"../../i18n\";\r\nimport CountrySelector from \"./PrepareDataCountrySelector\";\r\nimport Saver from \"./PrepareDataSaver\";\r\nimport BooleanCellRenderer from \"../BooleanCellRenderer\";\r\n\r\nconst styles = {\r\n button: {\r\n marginRight: 20\r\n },\r\n buttonGroup: {\r\n marginBottom: 20\r\n },\r\n regionEditor: {\r\n margin: \"20px 0 20px\"\r\n },\r\n table: {\r\n margin: \"20px 0\",\r\n height: 400\r\n }\r\n};\r\n\r\nclass PrepareDataEmuData extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {};\r\n }\r\n\r\n onGridReady = params => {\r\n this.gridApi = params.api;\r\n\r\n params.columnApi.autoSizeColumns(\r\n params.columnApi.getAllColumns().map(column => column.colId)\r\n );\r\n };\r\n\r\n onSelectionChanged = () => {\r\n this.setState({\r\n rowSelected: this.gridApi.getSelectedRows().length > 0\r\n });\r\n };\r\n\r\n onAddNewItem = () => {\r\n const item = createDefaultEmuDatum();\r\n\r\n const newRowData = this.gridApi.updateRowData({\r\n add: [item]\r\n });\r\n\r\n this.gridApi.ensureIndexVisible(newRowData.add[0].childIndex);\r\n\r\n this.props.onAddNewItem(item);\r\n };\r\n\r\n onDeleteItem = () => {\r\n const selectedItemIds = this.gridApi.getSelectedRows().map(item => item.id);\r\n\r\n if (!selectedItemIds.length) {\r\n return;\r\n }\r\n\r\n this.props.onDeleteItem(selectedItemIds[0]);\r\n\r\n this.setState({\r\n rowSelected: false\r\n });\r\n };\r\n\r\n render() {\r\n return (\r\n <div>\r\n <CountrySelector\r\n databases={this.props.databases}\r\n countries={this.props.countries}\r\n selectedDatabaseId={this.props.selectedDatabaseId}\r\n selectedCountryNumericCode={this.props.selectedCountryNumericCode}\r\n onSelectDatabase={this.props.onSelectDatabase}\r\n onSelectCountry={this.props.onSelectCountry}\r\n onLoadData={this.props.onLoadCountryData}\r\n />\r\n\r\n <div\r\n className={classNames(\"ag-theme-material\", this.props.classes.table)}\r\n >\r\n <AgGridReact\r\n defaultColDef={{\r\n sortable: true,\r\n editable: true\r\n }}\r\n rowSelection=\"single\"\r\n suppressColumnVirtualisation={true}\r\n suppressScrollOnNewData={true}\r\n frameworkComponents={{ booleanCellRenderer: BooleanCellRenderer }}\r\n overlayNoRowsTemplate=\"<span />\"\r\n localeTextFunc={translateGridText}\r\n rowData={this.props.data}\r\n onGridReady={this.onGridReady}\r\n onSelectionChanged={this.onSelectionChanged}\r\n onCellValueChanged={params => {\r\n this.props.onEditItem(params.data);\r\n }}\r\n >\r\n <AgGridColumn\r\n headerName={this.props.t(\"Region code\")}\r\n field=\"regionCode\"\r\n valueParser={params => parseNullableAlphaCell(params)}\r\n />\r\n <AgGridColumn\r\n headerName={this.props.t(\"Reference pop\")}\r\n field=\"referencePop\"\r\n cellEditor=\"agRichSelectCellEditor\"\r\n cellEditorParams={{\r\n values: [\"All women\", \"Married women\"]\r\n }}\r\n />\r\n <AgGridColumn\r\n headerName={this.props.t(\"Service statistic type\")}\r\n field=\"serviceStatisticType\"\r\n cellEditor=\"agRichSelectCellEditor\"\r\n cellEditorParams={{\r\n values: [\"clients\", \"facilities\", \"users\", \"visits\"]\r\n }}\r\n />\r\n <AgGridColumn\r\n headerName={this.props.t(\"Year\")}\r\n field=\"startYear\"\r\n type=\"numericColumn\"\r\n filter=\"agNumberColumnFilter\"\r\n valueParser={params =>\r\n parseIntegerCell(params, minimumYear, maximumYear)\r\n }\r\n />\r\n <AgGridColumn\r\n headerName={this.props.t(\"EMU\")}\r\n field=\"emu\"\r\n type=\"numericColumn\"\r\n filter=\"agNumberColumnFilter\"\r\n valueFormatter={params => formatNumericCell(params.value, 3)}\r\n valueParser={params => parseNumericCell(params, 0, 1)}\r\n />\r\n <AgGridColumn\r\n headerName={this.props.t(\"SD_EMU\")}\r\n field=\"sD_EMU\"\r\n type=\"numericColumn\"\r\n filter=\"agNumberColumnFilter\"\r\n valueParser={params =>\r\n parseNullableNumericCell(params, 0, Number.MAX_VALUE)\r\n }\r\n />\r\n <AgGridColumn\r\n headerName={this.props.t(\"EMU_ROC\")}\r\n field=\"emU_ROC\"\r\n type=\"numericColumn\"\r\n filter=\"agNumberColumnFilter\"\r\n valueParser={params =>\r\n parseNullableNumericCell(params, -Number.MAX_VALUE, Number.MAX_VALUE)\r\n }\r\n />\r\n <AgGridColumn\r\n headerName={this.props.t(\"SD_EMU_ROC\")}\r\n field=\"sD_EMU_ROC\"\r\n type=\"numericColumn\"\r\n filter=\"agNumberColumnFilter\"\r\n valueParser={params =>\r\n parseNullableNumericCell(params, 0, Number.MAX_VALUE)\r\n }\r\n />\r\n <AgGridColumn\r\n headerName={this.props.t(\"Include?\")}\r\n field=\"included\"\r\n cellRenderer=\"booleanCellRenderer\"\r\n cellEditor=\"agRichSelectCellEditor\"\r\n cellEditorParams={{\r\n cellRenderer: \"booleanCellRenderer\",\r\n values: [true, false]\r\n }}\r\n /> \r\n </AgGridReact>\r\n </div>\r\n\r\n <div className={this.props.classes.buttonGroup}>\r\n <Button\r\n variant=\"contained\"\r\n color=\"primary\"\r\n className={this.props.classes.button}\r\n onClick={this.onAddNewItem}\r\n >\r\n {this.props.t(\"Add new record\")}\r\n </Button>\r\n\r\n <Button\r\n variant=\"contained\"\r\n color=\"secondary\"\r\n disabled={!this.state.rowSelected}\r\n className={this.props.classes.button}\r\n onClick={this.onDeleteItem}\r\n >\r\n {this.props.t(\"Delete selected row\")}\r\n </Button>\r\n\r\n <Button\r\n variant=\"contained\"\r\n color=\"secondary\"\r\n className={this.props.classes.button}\r\n onClick={this.props.onClearData}\r\n >\r\n {this.props.t(\"Clear data\")}\r\n </Button>\r\n </div>\r\n\r\n <Saver\r\n name={this.props.newDatabaseName}\r\n saveDisabled={\r\n (!this.props.regionData &&\r\n !this.props.selectedCountryNumericCode) ||\r\n (this.props.regionData &&\r\n (!this.props.regionNumericCode ||\r\n !this.props.regionAlphaCode ||\r\n !this.props.regionName)) ||\r\n !this.props.newDatabaseName\r\n }\r\n onChangeName={this.props.onChangeDatabaseName}\r\n onSave={this.props.onSave}\r\n />\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nPrepareDataEmuData.propTypes = {\r\n databases: PropTypes.arrayOf(labeledValuePropType),\r\n countries: PropTypes.arrayOf(labeledValuePropType),\r\n selectedDatabaseId: PropTypes.string,\r\n selectedCountryNumericCode: PropTypes.number,\r\n data: PropTypes.arrayOf(emuDatumPropType),\r\n newDatabaseName: PropTypes.string,\r\n onSelectDatabase: PropTypes.func.isRequired,\r\n onSelectCountry: PropTypes.func.isRequired,\r\n onLoadCountryData: PropTypes.func.isRequired,\r\n onAddNewItem: PropTypes.func.isRequired,\r\n onEditItem: PropTypes.func.isRequired,\r\n onDeleteItem: PropTypes.func.isRequired,\r\n onClearData: PropTypes.func.isRequired,\r\n onChangeDatabaseName: PropTypes.func.isRequired,\r\n onSave: PropTypes.func.isRequired\r\n};\r\n\r\nPrepareDataEmuData.defaultProps = {\r\n databases: [],\r\n countries: [],\r\n data: []\r\n};\r\n\r\nexport default withTranslation()(withStyles(styles)(PrepareDataEmuData));\r\n","import React from \"react\";\r\nimport * as PropTypes from \"prop-types\";\r\nimport { withStyles } from \"@material-ui/core/styles\";\r\nimport classNames from \"classnames\";\r\nimport IconButton from \"@material-ui/core/IconButton\";\r\nimport Snackbar from \"@material-ui/core/Snackbar\";\r\nimport SnackbarContent from \"@material-ui/core/SnackbarContent\";\r\nimport CheckCircleIcon from \"@material-ui/icons/CheckCircle\";\r\nimport CloseIcon from \"@material-ui/icons/Close\";\r\nimport ErrorIcon from \"@material-ui/icons/Error\";\r\nimport InfoIcon from \"@material-ui/icons/Info\";\r\nimport WarningIcon from \"@material-ui/icons/Warning\";\r\nimport amber from \"@material-ui/core/colors/amber\";\r\nimport green from \"@material-ui/core/colors/green\";\r\n\r\nconst variantIcon = {\r\n success: CheckCircleIcon,\r\n warning: WarningIcon,\r\n error: ErrorIcon,\r\n information: InfoIcon\r\n};\r\n\r\nconst styles = theme => ({\r\n error: {\r\n backgroundColor: theme.palette.error.dark\r\n },\r\n icon: {\r\n fontSize: 20\r\n },\r\n iconVariant: {\r\n opacity: 0.9,\r\n marginRight: theme.spacing.unit\r\n },\r\n information: {\r\n backgroundColor: theme.palette.primary.dark\r\n },\r\n margin: {\r\n margin: theme.spacing.unit\r\n },\r\n message: {\r\n display: \"flex\",\r\n alignItems: \"center\"\r\n },\r\n success: {\r\n backgroundColor: green[600]\r\n },\r\n warning: {\r\n backgroundColor: amber[700]\r\n }\r\n});\r\n\r\nconst Notification = props => {\r\n const Icon = variantIcon[props.variant];\r\n\r\n return (\r\n <Snackbar\r\n anchorOrigin={{\r\n vertical: \"bottom\",\r\n horizontal: \"left\"\r\n }}\r\n open={props.open}\r\n autoHideDuration={props.autoHideDurationMilliseconds}\r\n className={props.classes.container}\r\n onClose={props.onClose}\r\n >\r\n <SnackbarContent\r\n message={\r\n <span id=\"client-snackbar\" className={props.classes.message}>\r\n <Icon\r\n className={classNames(\r\n props.classes.icon,\r\n props.classes.iconVariant\r\n )}\r\n />\r\n {props.message}\r\n </span>\r\n }\r\n action={[\r\n <IconButton\r\n key=\"close\"\r\n color=\"inherit\"\r\n aria-label=\"Close\"\r\n onClick={props.onClose}\r\n >\r\n <CloseIcon />\r\n </IconButton>\r\n ]}\r\n className={classNames(\r\n props.classes.margin,\r\n props.classes[props.variant]\r\n )}\r\n aria-describedby=\"client-snackbar\"\r\n />\r\n </Snackbar>\r\n );\r\n};\r\n\r\nNotification.propTypes = {\r\n variant: PropTypes.oneOf([\"success\", \"information\", \"warning\", \"error\"]),\r\n open: PropTypes.bool,\r\n message: PropTypes.string,\r\n autoHideDurationMilliseconds: PropTypes.number,\r\n onClose: PropTypes.func.isRequired\r\n};\r\n\r\nNotification.defaultProps = {\r\n variant: \"information\",\r\n open: false,\r\n message: \"\",\r\n autoHideDurationMilliseconds: 6000\r\n};\r\n\r\nexport default withStyles(styles)(Notification);\r\n","import React, { Component } from \"react\";\r\nimport * as PropTypes from \"prop-types\";\r\nimport { labeledValuePropType, populationDatumPropType } from \"../../propTypes\";\r\nimport { maximumYear, minimumYear } from \"../../constants\";\r\nimport { parseIntegerCell, parseNullableAlphaCell } from \"../../utilities\";\r\nimport { createDefaultPopulationDatum } from \"../../data\";\r\nimport { withStyles } from \"@material-ui/core/styles\";\r\nimport classNames from \"classnames\";\r\nimport Button from \"@material-ui/core/Button\";\r\nimport { AgGridColumn, AgGridReact } from \"ag-grid-react\";\r\nimport \"ag-grid-enterprise\";\r\nimport \"ag-grid-community/dist/styles/ag-grid.css\";\r\nimport \"ag-grid-community/dist/styles/ag-theme-material.css\";\r\nimport { withTranslation } from \"react-i18next\";\r\nimport { translateGridText } from \"../../i18n\";\r\nimport BooleanCellRenderer from \"../BooleanCellRenderer\";\r\nimport CountrySelector from \"./PrepareDataCountrySelector\";\r\nimport Saver from \"./PrepareDataSaver\";\r\n\r\nconst styles = {\r\n button: {\r\n marginRight: 20\r\n },\r\n buttonGroup: {\r\n marginBottom: 20\r\n },\r\n regionEditor: {\r\n margin: \"20px 0 20px\"\r\n },\r\n table: {\r\n margin: \"20px 0\",\r\n height: 400\r\n }\r\n};\r\n\r\nclass PrepareDataPopulationData extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {};\r\n }\r\n\r\n onGridReady = params => {\r\n this.gridApi = params.api;\r\n\r\n params.columnApi.autoSizeColumns(\r\n params.columnApi.getAllColumns().map(column => column.colId)\r\n );\r\n };\r\n\r\n onSelectionChanged = () => {\r\n this.setState({\r\n rowSelected: this.gridApi.getSelectedRows().length > 0\r\n });\r\n };\r\n\r\n onAddNewItem = () => {\r\n const item = createDefaultPopulationDatum();\r\n\r\n const newRowData = this.gridApi.updateRowData({\r\n add: [item]\r\n });\r\n\r\n this.gridApi.ensureIndexVisible(newRowData.add[0].childIndex);\r\n\r\n this.props.onAddNewItem(item);\r\n };\r\n\r\n onDeleteItem = () => {\r\n const selectedItemIds = this.gridApi.getSelectedRows().map(item => item.id);\r\n\r\n if (!selectedItemIds.length) {\r\n return;\r\n }\r\n\r\n this.props.onDeleteItem(selectedItemIds[0]);\r\n\r\n this.setState({\r\n rowSelected: false\r\n });\r\n };\r\n\r\n render() {\r\n return (\r\n <div>\r\n <CountrySelector\r\n databases={this.props.databases}\r\n countries={this.props.countries}\r\n selectedDatabaseId={this.props.selectedDatabaseId}\r\n selectedCountryNumericCode={this.props.selectedCountryNumericCode}\r\n onSelectDatabase={this.props.onSelectDatabase}\r\n onSelectCountry={this.props.onSelectCountry}\r\n onLoadData={this.props.onLoadCountryData}\r\n />\r\n\r\n <div\r\n className={classNames(\"ag-theme-material\", this.props.classes.table)}\r\n >\r\n <AgGridReact\r\n defaultColDef={{\r\n sortable: true,\r\n editable: true\r\n }}\r\n rowSelection=\"single\"\r\n suppressColumnVirtualisation={true}\r\n suppressScrollOnNewData={true}\r\n frameworkComponents={{ booleanCellRenderer: BooleanCellRenderer }}\r\n overlayNoRowsTemplate=\"<span />\"\r\n localeTextFunc={translateGridText}\r\n rowData={this.props.data}\r\n onGridReady={this.onGridReady}\r\n onSelectionChanged={this.onSelectionChanged}\r\n onCellValueChanged={params => {\r\n this.props.onEditItem(params.data);\r\n }}\r\n >\r\n <AgGridColumn\r\n headerName={this.props.t(\"Region code\")}\r\n field=\"regionCode\"\r\n valueParser={params => parseNullableAlphaCell(params)}\r\n />\r\n <AgGridColumn\r\n headerName={this.props.t(\"In union?\")}\r\n field=\"isInUnion\"\r\n cellRenderer=\"booleanCellRenderer\"\r\n cellEditor=\"agRichSelectCellEditor\"\r\n cellEditorParams={{\r\n cellRenderer: \"booleanCellRenderer\",\r\n values: [true, false]\r\n }}\r\n />\r\n <AgGridColumn\r\n headerName={this.props.t(\"Age\")}\r\n field=\"ageRange\"\r\n cellEditor=\"agRichSelectCellEditor\"\r\n cellEditorParams={{\r\n values: [\r\n \"10-14\",\r\n \"15-19\",\r\n \"20-24\",\r\n \"25-29\",\r\n \"30-34\",\r\n \"35-39\",\r\n \"40-44\",\r\n \"45-49\",\r\n \"15-49\"\r\n ]\r\n }}\r\n />\r\n <AgGridColumn\r\n headerName={this.props.t(\"Year\")}\r\n field=\"midYear\"\r\n type=\"numericColumn\"\r\n filter=\"agNumberColumnFilter\"\r\n valueParser={params =>\r\n parseIntegerCell(params, minimumYear, maximumYear)\r\n }\r\n />\r\n <AgGridColumn\r\n headerName={this.props.t(\"Population\")}\r\n field=\"population\"\r\n type=\"numericColumn\"\r\n filter=\"agNumberColumnFilter\"\r\n />\r\n </AgGridReact>\r\n </div>\r\n\r\n <div className={this.props.classes.buttonGroup}>\r\n <Button\r\n variant=\"contained\"\r\n color=\"primary\"\r\n className={this.props.classes.button}\r\n onClick={this.onAddNewItem}\r\n >\r\n {this.props.t(\"Add new record\")}\r\n </Button>\r\n\r\n <Button\r\n variant=\"contained\"\r\n color=\"secondary\"\r\n disabled={!this.state.rowSelected}\r\n className={this.props.classes.button}\r\n onClick={this.onDeleteItem}\r\n >\r\n {this.props.t(\"Delete selected row\")}\r\n </Button>\r\n\r\n <Button\r\n variant=\"contained\"\r\n color=\"secondary\"\r\n className={this.props.classes.button}\r\n onClick={this.props.onClearData}\r\n >\r\n {this.props.t(\"Clear data\")}\r\n </Button>\r\n </div>\r\n\r\n <Saver\r\n name={this.props.newDatabaseName}\r\n saveDisabled={\r\n (!this.props.regionData &&\r\n !this.props.selectedCountryNumericCode) ||\r\n (this.props.regionData &&\r\n (!this.props.regionNumericCode ||\r\n !this.props.regionAlphaCode ||\r\n !this.props.regionName)) ||\r\n !this.props.newDatabaseName\r\n }\r\n onChangeName={this.props.onChangeDatabaseName}\r\n onSave={this.props.onSave}\r\n />\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nPrepareDataPopulationData.propTypes = {\r\n databases: PropTypes.arrayOf(labeledValuePropType),\r\n countries: PropTypes.arrayOf(labeledValuePropType),\r\n selectedDatabaseId: PropTypes.string,\r\n selectedCountryNumericCode: PropTypes.number,\r\n data: PropTypes.arrayOf(populationDatumPropType),\r\n newDatabaseName: PropTypes.string,\r\n onSelectDatabase: PropTypes.func.isRequired,\r\n onSelectCountry: PropTypes.func.isRequired,\r\n onLoadCountryData: PropTypes.func.isRequired,\r\n onAddNewItem: PropTypes.func.isRequired,\r\n onEditItem: PropTypes.func.isRequired,\r\n onDeleteItem: PropTypes.func.isRequired,\r\n onClearData: PropTypes.func.isRequired,\r\n onChangeDatabaseName: PropTypes.func.isRequired,\r\n onSave: PropTypes.func.isRequired\r\n};\r\n\r\nPrepareDataPopulationData.defaultProps = {\r\n databases: [],\r\n countries: [],\r\n data: []\r\n};\r\n\r\nexport default withTranslation()(withStyles(styles)(PrepareDataPopulationData));\r\n","import React, { Component } from \"react\";\r\nimport * as PropTypes from \"prop-types\";\r\nimport { labeledValuePropType, surveyDatumPropType } from \"../../propTypes\";\r\nimport { maximumYear, minimumYear } from \"../../constants\";\r\nimport {\r\n formatNumericCell,\r\n parseNullableAlphaCell,\r\n parseNullableNumericCell,\r\n parseNumericCell,\r\n} from \"../../utilities\";\r\nimport { createDefaultSurveyDatum } from \"../../data\";\r\nimport { withStyles } from \"@material-ui/core/styles\";\r\nimport classNames from \"classnames\";\r\nimport Button from \"@material-ui/core/Button\";\r\nimport { AgGridColumn, AgGridReact } from \"ag-grid-react\";\r\nimport \"ag-grid-enterprise\";\r\nimport \"ag-grid-community/dist/styles/ag-grid.css\";\r\nimport \"ag-grid-community/dist/styles/ag-theme-material.css\";\r\nimport { withTranslation } from \"react-i18next\";\r\nimport { translateGridText } from \"../../i18n\";\r\nimport BooleanCellRenderer from \"../BooleanCellRenderer\";\r\nimport CountrySelector from \"./PrepareDataCountrySelector\";\r\nimport Saver from \"./PrepareDataSaver\";\r\n\r\nconst styles = {\r\n button: {\r\n marginRight: 20\r\n },\r\n buttonGroup: {\r\n marginBottom: 20\r\n },\r\n regionEditor: {\r\n margin: \"20px 0 20px\"\r\n },\r\n table: {\r\n margin: \"20px 0\",\r\n height: 400\r\n }\r\n};\r\n\r\nclass PrepareDataSurveyData extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {};\r\n }\r\n\r\n refreshCells = () => {\r\n this.gridApi.refreshCells();\r\n };\r\n\r\n onGridReady = params => {\r\n this.gridApi = params.api;\r\n\r\n params.columnApi.autoSizeColumns(\r\n params.columnApi.getAllColumns().map(column => column.colId)\r\n );\r\n };\r\n\r\n onSelectionChanged = () => {\r\n this.setState({\r\n rowSelected: this.gridApi.getSelectedRows().length > 0\r\n });\r\n };\r\n\r\n onAddNewItem = () => {\r\n const item = createDefaultSurveyDatum();\r\n\r\n const newRowData = this.gridApi.updateRowData({\r\n add: [item]\r\n });\r\n\r\n this.gridApi.ensureIndexVisible(newRowData.add[0].childIndex);\r\n\r\n this.props.onAddNewItem(item);\r\n };\r\n\r\n onDeleteItem = () => {\r\n const selectedItemIds = this.gridApi.getSelectedRows().map(item => item.id);\r\n\r\n if (!selectedItemIds.length) {\r\n return;\r\n }\r\n\r\n this.props.onDeleteItem(selectedItemIds[0]);\r\n\r\n this.setState({\r\n rowSelected: false\r\n });\r\n };\r\n\r\n render() {\r\n return (\r\n <div>\r\n <CountrySelector\r\n databases={this.props.databases}\r\n countries={this.props.countries}\r\n selectedDatabaseId={this.props.selectedDatabaseId}\r\n selectedCountryNumericCode={this.props.selectedCountryNumericCode}\r\n onSelectDatabase={this.props.onSelectDatabase}\r\n onSelectCountry={this.props.onSelectCountry}\r\n onLoadData={this.props.onLoadCountryData}\r\n />\r\n\r\n <div\r\n className={classNames(\"ag-theme-material\", this.props.classes.table)}\r\n >\r\n <AgGridReact\r\n defaultColDef={{\r\n sortable: true,\r\n editable: true\r\n }}\r\n rowSelection=\"single\"\r\n suppressColumnVirtualisation={true}\r\n suppressScrollOnNewData={true}\r\n frameworkComponents={{ booleanCellRenderer: BooleanCellRenderer }}\r\n overlayNoRowsTemplate=\"<span />\"\r\n localeTextFunc={translateGridText}\r\n rowData={this.props.data}\r\n onGridReady={this.onGridReady}\r\n onSelectionChanged={this.onSelectionChanged}\r\n onCellValueChanged={params => {\r\n this.props.onEditItem(\r\n params.data,\r\n params.colDef.field,\r\n this.refreshCells\r\n );\r\n }}\r\n >\r\n <AgGridColumn\r\n headerName={this.props.t(\"Include?\")}\r\n field=\"include\"\r\n cellRenderer=\"booleanCellRenderer\"\r\n cellEditor=\"agRichSelectCellEditor\"\r\n cellEditorParams={{\r\n cellRenderer: \"booleanCellRenderer\",\r\n values: [true, false]\r\n }}\r\n />\r\n <AgGridColumn\r\n headerName={this.props.t(\"possible_outlier\")}\r\n field=\"possible_outlier\"\r\n cellEditor=\"agRichSelectCellEditor\"\r\n cellEditorParams={{\r\n values: [\"0\", \"1\", null]\r\n }}\r\n />\r\n <AgGridColumn\r\n headerName={this.props.t(\"possible_outlier_userinput\")}\r\n field=\"possible_outlier_userinput\"\r\n cellEditor=\"agRichSelectCellEditor\"\r\n cellEditorParams={{\r\n values: [\"0\", \"1\", null]\r\n }}\r\n />\r\n <AgGridColumn\r\n headerName={this.props.t(\"Region code\")}\r\n field=\"regionCode\"\r\n valueParser={params => parseNullableAlphaCell(params)}\r\n />\r\n <AgGridColumn\r\n headerName={this.props.t(\"Start year\")}\r\n field=\"startDate\"\r\n type=\"numericColumn\"\r\n filter=\"agNumberColumnFilter\"\r\n valueFormatter={params => formatNumericCell(params.value, 2)}\r\n valueParser={params =>\r\n parseNumericCell(\r\n params,\r\n minimumYear + 0.5,\r\n params.node.data.endDate\r\n )\r\n }\r\n />\r\n <AgGridColumn\r\n headerName={this.props.t(\"End year\")}\r\n field=\"endDate\"\r\n type=\"numericColumn\"\r\n filter=\"agNumberColumnFilter\"\r\n valueFormatter={params => formatNumericCell(params.value, 2)}\r\n valueParser={params =>\r\n parseNumericCell(\r\n params,\r\n params.node.data.startDate,\r\n maximumYear + 0.5\r\n )\r\n }\r\n />\r\n <AgGridColumn\r\n headerName={this.props.t(\"In union?\")}\r\n field=\"isInUnion\"\r\n cellRenderer=\"booleanCellRenderer\"\r\n cellEditor=\"agRichSelectCellEditor\"\r\n cellEditorParams={{\r\n cellRenderer: \"booleanCellRenderer\",\r\n values: [true, false]\r\n }}\r\n />\r\n <AgGridColumn\r\n headerName={this.props.t(\"Age\")}\r\n field=\"ageRange\"\r\n cellEditor=\"agRichSelectCellEditor\"\r\n cellEditorParams={{\r\n values: [\r\n \"10-14\",\r\n \"15-19\",\r\n \"20-24\",\r\n \"25-29\",\r\n \"30-34\",\r\n \"35-39\",\r\n \"40-44\",\r\n \"45-49\",\r\n \"15-49\"\r\n ]\r\n }}\r\n />\r\n <AgGridColumn\r\n headerName={this.props.t(\"Data series/type\")}\r\n field=\"dataSeriesType\"\r\n cellEditor=\"agRichSelectCellEditor\"\r\n cellEditorParams={{\r\n values: [\"DHS\", \"MICS\", \"National survey\", \"PMA\", \"Other\"]\r\n }}\r\n />\r\n <AgGridColumn\r\n headerName={this.props.t(\"Population\")}\r\n field=\"groupTypeRelativeToBaseline\"\r\n headerTooltip={this.props.t(\"Group type relative to baseline\")}\r\n cellEditor=\"agRichSelectCellEditor\"\r\n cellEditorParams={{\r\n values: [\"AL\", \"BS\", \"EM\", \"FM\", \"HW\", \"MW\", \"PW\", \"SA\", \"UW\"]\r\n }}\r\n />\r\n <AgGridColumn\r\n headerName={this.props.t(\"Modern contraceptive use\")}\r\n field=\"contraceptiveUseModern\"\r\n type=\"numericColumn\"\r\n filter=\"agNumberColumnFilter\"\r\n valueFormatter={params => formatNumericCell(params.value, 3)}\r\n valueParser={params => parseNumericCell(params, 0, 1)}\r\n headerTooltip={this.props.t(\"Contraceptive use (modern)\")}\r\n />\r\n <AgGridColumn\r\n headerName={this.props.t(\"Traditional contraceptive use\")}\r\n field=\"contraceptiveUseTraditional\"\r\n type=\"numericColumn\"\r\n filter=\"agNumberColumnFilter\"\r\n valueFormatter={params => formatNumericCell(params.value, 3)}\r\n valueParser={params => parseNumericCell(params, 0, 1)}\r\n headerTooltip={this.props.t(\"Contraceptive use (traditional)\")}\r\n />\r\n <AgGridColumn\r\n headerName={this.props.t(\"All contraceptive use\")}\r\n field=\"contraceptiveUseAny\"\r\n type=\"numericColumn\"\r\n filter=\"agNumberColumnFilter\"\r\n valueFormatter={params => formatNumericCell(params.value, 3)}\r\n valueParser={params => parseNumericCell(params, 0, 1)}\r\n headerTooltip={this.props.t(\"Contraceptive use (all)\")}\r\n />\r\n <AgGridColumn\r\n headerName={this.props.t(\"Modern methods unmet need\")}\r\n field=\"unmetNeedModern\"\r\n type=\"numericColumn\"\r\n filter=\"agNumberColumnFilter\"\r\n valueFormatter={params => formatNumericCell(params.value, 3)}\r\n valueParser={params => parseNullableNumericCell(params, 0, 1)}\r\n headerTooltip={this.props.t(\"Unmet need for modern methods\")}\r\n />\r\n <AgGridColumn\r\n headerName={this.props.t(\"Any method unmet need\")}\r\n field=\"unmetNeedAny\"\r\n type=\"numericColumn\"\r\n filter=\"agNumberColumnFilter\"\r\n valueFormatter={params => formatNumericCell(params.value, 3)}\r\n valueParser={params => parseNullableNumericCell(params, 0, 1)}\r\n headerTooltip={this.props.t(\"Unmet need for any method\")}\r\n />\r\n <AgGridColumn\r\n headerName={this.props.t(\r\n \"Pertaining to methods used since last pregnancy\"\r\n )}\r\n field=\"pertainingToMethodsUsedSinceLastPregnancyReason\"\r\n />\r\n <AgGridColumn\r\n headerName={this.props.t(\"Geographical bias\")}\r\n field=\"geographicalRegionBiasReason\"\r\n />\r\n <AgGridColumn\r\n headerName={this.props.t(\r\n \"Non-pregnant and other positive biases\"\r\n )}\r\n field=\"nonPregnantAndOtherPositiveBiasesReason\"\r\n />\r\n <AgGridColumn\r\n headerName={this.props.t(\"Age bias\")}\r\n field=\"ageGroupBias\"\r\n cellEditor=\"agRichSelectCellEditor\"\r\n cellEditorParams={{\r\n values: [\"+\", \"-\", \"?\", \"None\"]\r\n }}\r\n />\r\n <AgGridColumn\r\n headerName={this.props.t(\"Modern method bias\")}\r\n field=\"modernMethodBias\"\r\n cellEditor=\"agRichSelectCellEditor\"\r\n cellEditorParams={{\r\n values: [\"+\", \"-\", \"None\"]\r\n }}\r\n />\r\n <AgGridColumn\r\n headerName={this.props.t(\"Traditional method bias\")}\r\n field=\"traditionalMethodBiasReason\"\r\n />\r\n <AgGridColumn\r\n headerName={this.props.t(\"Absence of probing question bias?\")}\r\n field=\"hasAbsenceOfProbingQuestionsBias\"\r\n cellRenderer=\"booleanCellRenderer\"\r\n cellEditor=\"agRichSelectCellEditor\"\r\n cellEditorParams={{\r\n cellRenderer: \"booleanCellRenderer\",\r\n values: [true, false]\r\n }}\r\n />\r\n <AgGridColumn\r\n headerName={this.props.t(\"SE log-ratio modern/no use\")}\r\n field=\"seLogRModernNoUse\"\r\n type=\"numericColumn\"\r\n filter=\"agNumberColumnFilter\"\r\n valueFormatter={params => formatNumericCell(params.value, 2)}\r\n valueParser={params =>\r\n parseNullableNumericCell(params, 0, Number.MAX_VALUE)\r\n }\r\n headerTooltip={this.props.t(\r\n \"Sampling error for the log-ratio of modern contraceptive method use to no use\"\r\n )}\r\n />\r\n <AgGridColumn\r\n headerName={this.props.t(\"SE log-ratio traditional/no use\")}\r\n field=\"seLogRTraditionalNoUse\"\r\n type=\"numericColumn\"\r\n filter=\"agNumberColumnFilter\"\r\n valueFormatter={params => formatNumericCell(params.value, 2)}\r\n valueParser={params =>\r\n parseNullableNumericCell(params, 0, Number.MAX_VALUE)\r\n }\r\n headerTooltip={this.props.t(\r\n \"Sampling error for the log-ratio of traditional contraceptive method use to no use\"\r\n )}\r\n />\r\n <AgGridColumn\r\n headerName={this.props.t(\"SE log-ratio unmet/no need\")}\r\n field=\"seLogRUnmetNoNeed\"\r\n type=\"numericColumn\"\r\n filter=\"agNumberColumnFilter\"\r\n valueFormatter={params => formatNumericCell(params.value, 2)}\r\n valueParser={params =>\r\n parseNullableNumericCell(params, 0, Number.MAX_VALUE)\r\n }\r\n headerTooltip={this.props.t(\r\n \"Sampling error for the log-ratio of unmet need (any method) to no need\"\r\n )}\r\n />\r\n <AgGridColumn\r\n headerName={this.props.t(\"Source ID\")}\r\n field=\"sourceId\"\r\n type=\"numericColumn\"\r\n />\r\n </AgGridReact>\r\n </div>\r\n\r\n <div className={this.props.classes.buttonGroup}>\r\n <Button\r\n variant=\"contained\"\r\n color=\"primary\"\r\n className={this.props.classes.button}\r\n onClick={this.onAddNewItem}\r\n >\r\n {this.props.t(\"Add new record\")}\r\n </Button>\r\n\r\n <Button\r\n variant=\"contained\"\r\n color=\"secondary\"\r\n disabled={!this.state.rowSelected}\r\n className={this.props.classes.button}\r\n onClick={this.onDeleteItem}\r\n >\r\n {this.props.t(\"Delete selected row\")}\r\n </Button>\r\n\r\n <Button\r\n variant=\"contained\"\r\n color=\"secondary\"\r\n className={this.props.classes.button}\r\n onClick={this.props.onClearData}\r\n >\r\n {this.props.t(\"Clear data\")}\r\n </Button>\r\n </div>\r\n\r\n <Saver\r\n name={this.props.newDatabaseName}\r\n saveDisabled={\r\n (!this.props.regionData &&\r\n !this.props.selectedCountryNumericCode) ||\r\n (this.props.regionData &&\r\n (!this.props.regionNumericCode ||\r\n !this.props.regionAlphaCode ||\r\n !this.props.regionName)) ||\r\n !this.props.newDatabaseName\r\n }\r\n onChangeName={this.props.onChangeDatabaseName}\r\n onSave={this.props.onSave}\r\n />\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nPrepareDataSurveyData.propTypes = {\r\n databases: PropTypes.arrayOf(labeledValuePropType),\r\n countries: PropTypes.arrayOf(labeledValuePropType),\r\n selectedDatabaseId: PropTypes.string,\r\n selectedCountryNumericCode: PropTypes.number,\r\n data: PropTypes.arrayOf(surveyDatumPropType),\r\n newDatabaseName: PropTypes.string,\r\n onSelectDatabase: PropTypes.func.isRequired,\r\n onSelectCountry: PropTypes.func.isRequired,\r\n onLoadCountryData: PropTypes.func.isRequired,\r\n onAddNewItem: PropTypes.func.isRequired,\r\n onEditItem: PropTypes.func.isRequired,\r\n onDeleteItem: PropTypes.func.isRequired,\r\n onClearData: PropTypes.func.isRequired,\r\n onChangeDatabaseName: PropTypes.func.isRequired,\r\n onSave: PropTypes.func.isRequired\r\n};\r\n\r\nPrepareDataSurveyData.defaultProps = {\r\n databases: [],\r\n countries: [],\r\n data: []\r\n};\r\n\r\nexport default withTranslation()(withStyles(styles)(PrepareDataSurveyData));\r\n","import React from \"react\";\r\nimport * as PropTypes from \"prop-types\";\r\nimport {\r\n emuDatumPropType,\r\n populationDatumPropType,\r\n surveyDatumPropType\r\n} from \"../../propTypes\";\r\nimport { Redirect, Route, Switch } from \"react-router-dom\";\r\nimport { withStyles } from \"@material-ui/core/styles\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport EmuData from \"./PrepareDataEmuData\";\r\nimport NavigationTab from \"../NavigationTab\";\r\nimport Notification from \"../Notification\";\r\nimport PopulationData from \"./PrepareDataPopulationData\";\r\nimport SurveyData from \"./PrepareDataSurveyData\";\r\n\r\nconst styles = {\r\n tabPage: {\r\n margin: 10\r\n }\r\n};\r\n\r\nconst compareDatabases = (a, b) =>\r\n a.isDefault !== b.isDefault\r\n ? b.isDefault - a.isDefault\r\n : a.isGlobal !== b.isGlobal\r\n ? b.isGlobal - a.isGlobal\r\n : a.name.localeCompare(b.name);\r\n\r\nconst getDatabases = (databases, type) =>\r\n Object.entries(databases)\r\n .filter(database => database[1].type === type)\r\n .sort((a, b) => compareDatabases(a[1], b[1]))\r\n .map(([id, database]) => ({\r\n value: id,\r\n label: database.name\r\n }));\r\n\r\nconst normalizeCountries = countries =>\r\n Object.entries(countries)\r\n .map(([numericCode, country]) => ({\r\n value: numericCode,\r\n label: country.name\r\n }))\r\n .sort((a, b) => a.label.localeCompare(b.label));\r\n\r\nconst PrepareData = ({ match, ...rest }) => {\r\n const surveyDatabases = getDatabases(rest.databases, \"survey\");\r\n const surveyDatabaseCountries = normalizeCountries(\r\n rest.surveyDatabaseCountries\r\n );\r\n\r\n const populationDatabases = getDatabases(rest.databases, \"population\");\r\n const populationDatabaseCountries = normalizeCountries(\r\n rest.populationDatabaseCountries\r\n );\r\n\r\n const emuDatabases = [\r\n { value: \"\", label: \"None\" },\r\n ...getDatabases(rest.databases, \"emu\")\r\n ];\r\n const emuDatabaseCountries = normalizeCountries(rest.emuDatabaseCountries);\r\n\r\n const { t } = useTranslation();\r\n\r\n return (\r\n <div>\r\n <NavigationTab to=\"/preparedata/surveys\">\r\n {t(\"Survey data\")}\r\n </NavigationTab>\r\n <NavigationTab to=\"/preparedata/populations\">\r\n {t(\"Population data\")}\r\n </NavigationTab>\r\n <NavigationTab to=\"/preparedata/emu\">\r\n {t(\"Service statistics\")}\r\n </NavigationTab>\r\n\r\n <div className={rest.classes.tabPage}>\r\n <Switch>\r\n <Route\r\n exact\r\n path={match.path}\r\n render={() => <Redirect replace to={`${match.path}/surveys`} />}\r\n />\r\n <Route\r\n path={`${match.path}/surveys`}\r\n render={() => (\r\n <SurveyData\r\n databases={surveyDatabases}\r\n countries={surveyDatabaseCountries}\r\n selectedDatabaseId={rest.selectedSurveyDatabaseId}\r\n selectedCountryNumericCode={\r\n rest.selectedSurveyDataCountryNumericCode\r\n }\r\n data={rest.surveyData}\r\n regionData={rest.surveyRegionData}\r\n regionNumericCode={rest.surveyRegionNumericCode}\r\n regionAlphaCode={rest.surveyRegionAlphaCode}\r\n regionName={rest.surveyRegionName}\r\n newDatabaseName={rest.newSurveyDatabaseName}\r\n onSelectDatabase={rest.onSelectSurveyDatabase}\r\n onSelectCountry={rest.onSelectSurveyDataCountry}\r\n onLoadCountryData={rest.onLoadCountrySurveyData}\r\n onAddNewItem={rest.onAddNewSurveyItem}\r\n onEditItem={rest.onEditSurveyItem}\r\n onDeleteItem={rest.onDeleteSurveyItem}\r\n onClearData={rest.onClearSurveyData}\r\n onToggleRegionData={rest.onToggleSurveyRegionData}\r\n onChangeRegionNumericCode={rest.onChangeSurveyRegionNumericCode}\r\n onChangeRegionAlphaCode={rest.onChangeSurveyRegionAlphaCode}\r\n onChangeRegionName={rest.onChangeSurveyRegionName}\r\n onChangeDatabaseName={rest.onChangeSurveyDatabaseName}\r\n onSave={rest.onSaveSurveyDatabase}\r\n />\r\n )}\r\n />\r\n <Route\r\n path={`${match.path}/populations`}\r\n render={() => (\r\n <PopulationData\r\n databases={populationDatabases}\r\n countries={populationDatabaseCountries}\r\n selectedDatabaseId={rest.selectedPopulationDatabaseId}\r\n selectedCountryNumericCode={\r\n rest.selectedPopulationDataCountryNumericCode\r\n }\r\n data={rest.populationData}\r\n regionData={rest.populationRegionData}\r\n regionNumericCode={rest.populationRegionNumericCode}\r\n regionAlphaCode={rest.populationRegionAlphaCode}\r\n regionName={rest.populationRegionName}\r\n newDatabaseName={rest.newPopulationDatabaseName}\r\n onSelectDatabase={rest.onSelectPopulationDatabase}\r\n onSelectCountry={rest.onSelectPopulationDataCountry}\r\n onLoadCountryData={rest.onLoadCountryPopulationData}\r\n onAddNewItem={rest.onAddNewPopulationItem}\r\n onEditItem={rest.onEditPopulationItem}\r\n onDeleteItem={rest.onDeletePopulationItem}\r\n onClearData={rest.onClearPopulationData}\r\n onToggleRegionData={rest.onTogglePopulationRegionData}\r\n onChangeRegionNumericCode={\r\n rest.onChangePopulationRegionNumericCode\r\n }\r\n onChangeRegionAlphaCode={rest.onChangePopulationRegionAlphaCode}\r\n onChangeRegionName={rest.onChangePopulationRegionName}\r\n onChangeDatabaseName={rest.onChangePopulationDatabaseName}\r\n onSave={rest.onSavePopulationDatabase}\r\n />\r\n )}\r\n />\r\n <Route\r\n path={`${match.path}/emu`}\r\n render={() => (\r\n <EmuData\r\n databases={emuDatabases}\r\n countries={emuDatabaseCountries}\r\n selectedDatabaseId={rest.selectedEmuDatabaseId}\r\n selectedCountryNumericCode={\r\n rest.selectedEmuDataCountryNumericCode\r\n }\r\n data={rest.emuData}\r\n regionData={rest.emuRegionData}\r\n regionNumericCode={rest.emuRegionNumericCode}\r\n regionAlphaCode={rest.emuRegionAlphaCode}\r\n regionName={rest.emuRegionName}\r\n newDatabaseName={rest.newEmuDatabaseName}\r\n onSelectDatabase={rest.onSelectEmuDatabase}\r\n onSelectCountry={rest.onSelectEmuDataCountry}\r\n onLoadCountryData={rest.onLoadCountryEmuData}\r\n onAddNewItem={rest.onAddNewEmuItem}\r\n onEditItem={rest.onEditEmuItem}\r\n onDeleteItem={rest.onDeleteEmuItem}\r\n onClearData={rest.onClearEmuData}\r\n onToggleRegionData={rest.onToggleEmuRegionData}\r\n onChangeRegionNumericCode={rest.onChangeEmuRegionNumericCode}\r\n onChangeRegionAlphaCode={rest.onChangeEmuRegionAlphaCode}\r\n onChangeRegionName={rest.onChangeEmuRegionName}\r\n onChangeDatabaseName={rest.onChangeEmuDatabaseName}\r\n onSave={rest.onSaveEmuDatabase}\r\n />\r\n )}\r\n />\r\n </Switch>\r\n </div>\r\n\r\n <Notification\r\n variant={rest.notificationVariant}\r\n open={rest.notificationOpen}\r\n message={rest.notificationMessage}\r\n onClose={rest.onCloseNotification}\r\n />\r\n </div>\r\n );\r\n};\r\n\r\nPrepareData.propTypes = {\r\n databases: PropTypes.objectOf(\r\n PropTypes.shape({\r\n name: PropTypes.string.isRequired\r\n })\r\n ),\r\n surveyDatabaseCountries: PropTypes.objectOf(\r\n PropTypes.shape({\r\n name: PropTypes.string.isRequired\r\n })\r\n ),\r\n selectedSurveyDatabaseId: PropTypes.string,\r\n selectedSurveyDataCountryNumericCode: PropTypes.number,\r\n surveyData: PropTypes.arrayOf(surveyDatumPropType),\r\n newSurveyDatabaseName: PropTypes.string,\r\n populationDatabaseCountries: PropTypes.objectOf(\r\n PropTypes.shape({\r\n name: PropTypes.string.isRequired\r\n })\r\n ),\r\n selectedPopulationDatabaseId: PropTypes.string,\r\n selectedPopulationDataCountryNumericCode: PropTypes.number,\r\n populationData: PropTypes.arrayOf(populationDatumPropType),\r\n newPopulationDatabaseName: PropTypes.string,\r\n emuDatabaseCountries: PropTypes.objectOf(\r\n PropTypes.shape({\r\n name: PropTypes.string.isRequired\r\n })\r\n ),\r\n selectedEmuDatabaseId: PropTypes.string,\r\n selectedEmuDataCountryNumericCode: PropTypes.number,\r\n emuData: PropTypes.arrayOf(emuDatumPropType),\r\n newEmuDatabaseName: PropTypes.string,\r\n notificationVariant: PropTypes.string,\r\n notificationOpen: PropTypes.bool,\r\n notificationMessage: PropTypes.string,\r\n onSelectSurveyDatabase: PropTypes.func.isRequired,\r\n onSelectSurveyDataCountry: PropTypes.func.isRequired,\r\n onLoadCountrySurveyData: PropTypes.func.isRequired,\r\n onAddNewSurveyItem: PropTypes.func.isRequired,\r\n onEditSurveyItem: PropTypes.func.isRequired,\r\n onDeleteSurveyItem: PropTypes.func.isRequired,\r\n onClearSurveyData: PropTypes.func.isRequired,\r\n onChangeSurveyDatabaseName: PropTypes.func.isRequired,\r\n onSaveSurveyDatabase: PropTypes.func.isRequired,\r\n onSelectPopulationDatabase: PropTypes.func.isRequired,\r\n onSelectPopulationDataCountry: PropTypes.func.isRequired,\r\n onLoadCountryPopulationData: PropTypes.func.isRequired,\r\n onAddNewPopulationItem: PropTypes.func.isRequired,\r\n onEditPopulationItem: PropTypes.func.isRequired,\r\n onDeletePopulationItem: PropTypes.func.isRequired,\r\n onClearPopulationData: PropTypes.func.isRequired,\r\n onChangePopulationDatabaseName: PropTypes.func.isRequired,\r\n onSavePopulationDatabase: PropTypes.func.isRequired,\r\n onSelectEmuDatabase: PropTypes.func.isRequired,\r\n onSelectEmuDataCountry: PropTypes.func.isRequired,\r\n onLoadCountryEmuData: PropTypes.func.isRequired,\r\n onAddNewEmuItem: PropTypes.func.isRequired,\r\n onEditEmuItem: PropTypes.func.isRequired,\r\n onDeleteEmuItem: PropTypes.func.isRequired,\r\n onClearEmuData: PropTypes.func.isRequired,\r\n onChangeEmuDatabaseName: PropTypes.func.isRequired,\r\n onSaveEmuDatabase: PropTypes.func.isRequired,\r\n onCloseNotification: PropTypes.func.isRequired\r\n};\r\n\r\nPrepareData.defaultProps = {\r\n databases: {},\r\n surveyDatabaseCountries: {},\r\n surveyData: [],\r\n populationDatabaseCountries: {},\r\n populationData: [],\r\n emuDatabaseCountries: {},\r\n emuData: [],\r\n notificationOpen: false\r\n};\r\n\r\nexport default withStyles(styles)(PrepareData);\r\n","import React, { Component } from \"react\";\r\nimport { createGuid } from \"../utilities\";\r\nimport {\r\n to01Null,\r\n normalizeDatabases,\r\n normalizePopulationData,\r\n normalizeSurveyData,\r\n normalizeEmuData,\r\n synchonizeContraceptivePrevalence\r\n} from \"../data\";\r\nimport * as api from \"../api/api\";\r\nimport { withErrorBoundary } from \"../errors\";\r\nimport { withTranslation } from \"react-i18next\";\r\nimport PrepareData from \"../components/PrepareData/PrepareData\";\r\n\r\nconst createInitialState = () => ({\r\n selectedEmuDatabaseId: \"\"\r\n});\r\n\r\nconst findDefaultDatabaseId = databases => {\r\n if (!databases) {\r\n return;\r\n }\r\n\r\n for (let databaseId of Object.keys(databases)) {\r\n const { type, isDefault } = databases[databaseId];\r\n\r\n if (type === \"survey\" && isDefault) {\r\n return databaseId;\r\n }\r\n }\r\n};\r\n\r\nconst getCountries = (databases, databaseId) => {\r\n if (!databases || !databaseId) {\r\n return;\r\n }\r\n\r\n const database = databases[databaseId];\r\n\r\n return Object.keys(database.divisions).reduce((result, divisionKey) => {\r\n const division = database.divisions[divisionKey];\r\n\r\n if (division.isCountry) {\r\n result[divisionKey] = division;\r\n }\r\n\r\n return result;\r\n }, {});\r\n};\r\n\r\nconst findIndex = (data, key, value) =>\r\n data.map(datum => datum[key]).indexOf(value);\r\n\r\nclass PrepareDataContainer extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.signal = api.getSignal();\r\n\r\n this.state = createInitialState();\r\n }\r\n\r\n setStateSafely = (state, callback) => {\r\n if (!this.unmounting) {\r\n this.setState(state, callback);\r\n }\r\n };\r\n\r\n findDefaultDatabaseId = () => findDefaultDatabaseId(this.state.databases);\r\n\r\n getCountries = databaseId => getCountries(this.state.databases, databaseId);\r\n\r\n createDatabasePayload = (\r\n type,\r\n name,\r\n databaseId,\r\n divisionNumericCode,\r\n data\r\n ) => {\r\n const payload = {\r\n id: createGuid(),\r\n type,\r\n databaseId: databaseId || this.findDefaultDatabaseId(),\r\n divisionNumericCode,\r\n name,\r\n data: data.map(datum => ({\r\n ...datum,\r\n divisionNumericCode\r\n }))\r\n };\r\n \r\n return payload;\r\n };\r\n\r\n createDatabase = databasePayload => ({\r\n type: databasePayload.type,\r\n name: databasePayload.name,\r\n divisions: {\r\n [databasePayload.divisionNumericCode]: this.state.databases[\r\n databasePayload.databaseId\r\n ].divisions[databasePayload.divisionNumericCode]\r\n }\r\n });\r\n\r\n onSelectSurveyDatabase = databaseId => {\r\n const countries = this.getCountries(databaseId);\r\n\r\n this.setStateSafely({\r\n selectedSurveyDatabaseId: databaseId,\r\n selectedSurveyDataCountryNumericCode:\r\n Object.keys(countries).length !== 1\r\n ? undefined\r\n : parseInt(Object.keys(countries)[0], 10)\r\n });\r\n };\r\n\r\n onSelectSurveyDataCountry = countryNumericCode => {\r\n this.setStateSafely({\r\n selectedSurveyDataCountryNumericCode: countryNumericCode\r\n });\r\n };\r\n\r\n onLoadCountrySurveyData = () => {\r\n api\r\n .fetchSurveyDatabase(\r\n this.state.selectedSurveyDatabaseId,\r\n this.state.selectedSurveyDataCountryNumericCode,\r\n undefined,\r\n this.signal.token\r\n )\r\n .then(response => {\r\n if (!response) {\r\n return;\r\n }\r\n\r\n this.setStateSafely({\r\n surveyData: normalizeSurveyData(response.data).map(datum => ({\r\n ...datum,\r\n id: createGuid(),\r\n include: !datum.exclude\r\n }))\r\n });\r\n });\r\n };\r\n\r\n onAddNewSurveyItem = item => {\r\n this.setStateSafely({\r\n surveyData: [...(this.state.surveyData || []), item]\r\n });\r\n };\r\n\r\n onEditSurveyItem = (item, updatedField, callback) => {\r\n const surveyData = [...this.state.surveyData];\r\n\r\n const itemIndex = findIndex(surveyData, \"id\", item.id);\r\n\r\n // noinspection JSValidateTypes\r\n surveyData[itemIndex] = synchonizeContraceptivePrevalence(\r\n item,\r\n updatedField\r\n );\r\n\r\n this.setStateSafely(\r\n {\r\n surveyData\r\n },\r\n callback\r\n );\r\n };\r\n\r\n onDeleteSurveyItem = itemId => {\r\n this.setStateSafely({\r\n surveyData: this.state.surveyData.filter(datum => datum.id !== itemId)\r\n });\r\n };\r\n\r\n onClearSurveyData = () => {\r\n this.setStateSafely({\r\n surveyData: undefined\r\n });\r\n };\r\n\r\n onChangeSurveyDatabaseName = databaseName => {\r\n this.setStateSafely({\r\n newSurveyDatabaseName: databaseName\r\n });\r\n };\r\n\r\n onSaveSurveyDatabase = () => {\r\n const databasePayload = this.createDatabasePayload(\r\n \"survey\",\r\n this.state.newSurveyDatabaseName,\r\n this.state.selectedSurveyDatabaseId,\r\n this.state.selectedSurveyDataCountryNumericCode,\r\n this.state.surveyData.map(({ include, ...rest }) => ({\r\n ...rest,\r\n possible_outlier : to01Null(rest.possible_outlier),\r\n possible_outlier_userinput : to01Null(rest.possible_outlier_userinput),\r\n hasGeographicalRegionBias: !!rest.geographicalRegionBiasReason,\r\n exclude: !include\r\n }))\r\n );\r\n\r\n api.saveDatabase(databasePayload, this.signal.token).then(response => {\r\n const { id } = response.data;\r\n\r\n const databases = {\r\n ...this.state.databases,\r\n [id]: this.createDatabase(databasePayload)\r\n };\r\n\r\n this.setStateSafely({\r\n databases,\r\n notificationVariant: \"success\",\r\n notificationOpen: true,\r\n notificationMessage: this.props.t(\r\n 'Database \"{{databaseName}}\" was saved',\r\n {\r\n databaseName: databasePayload.name\r\n }\r\n )\r\n });\r\n });\r\n };\r\n\r\n onSelectPopulationDatabase = databaseId => {\r\n const countries = this.getCountries(databaseId);\r\n\r\n this.setStateSafely({\r\n selectedPopulationDatabaseId: databaseId,\r\n selectedPopulationDataCountryNumericCode:\r\n Object.keys(countries).length !== 1\r\n ? undefined\r\n : parseInt(Object.keys(countries)[0], 10)\r\n });\r\n };\r\n\r\n onSelectPopulationDataCountry = countryNumericCode => {\r\n this.setStateSafely({\r\n selectedPopulationDataCountryNumericCode: countryNumericCode\r\n });\r\n };\r\n\r\n onLoadCountryPopulationData = () => {\r\n api\r\n .fetchPopulationDatabase(\r\n this.state.selectedPopulationDatabaseId,\r\n this.state.selectedPopulationDataCountryNumericCode,\r\n this.signal.token\r\n )\r\n .then(response => {\r\n if (!response) {\r\n return;\r\n }\r\n\r\n this.setStateSafely({\r\n populationData: normalizePopulationData(\r\n response.data.filter(\r\n datum =>\r\n datum.divisionNumericCode ===\r\n this.state.selectedPopulationDataCountryNumericCode &&\r\n datum.ageRange === \"15-49\"\r\n )\r\n ).map(datum => ({\r\n ...datum,\r\n id: createGuid()\r\n }))\r\n });\r\n });\r\n };\r\n\r\n onAddNewPopulationItem = item => {\r\n this.setStateSafely({\r\n populationData: [...(this.state.populationData || []), item]\r\n });\r\n };\r\n\r\n onEditPopulationItem = item => {\r\n const populationData = [...this.state.populationData];\r\n\r\n const itemIndex = findIndex(populationData, \"id\", item.id);\r\n populationData[itemIndex] = item;\r\n\r\n this.setStateSafely({\r\n populationData\r\n });\r\n };\r\n\r\n onDeletePopulationItem = itemId => {\r\n this.setStateSafely({\r\n populationData: this.state.populationData.filter(\r\n datum => datum.id !== itemId\r\n )\r\n });\r\n };\r\n\r\n onClearPopulationData = () => {\r\n this.setStateSafely({\r\n populationData: undefined\r\n });\r\n };\r\n\r\n onChangePopulationDatabaseName = databaseName => {\r\n this.setStateSafely({\r\n newPopulationDatabaseName: databaseName\r\n });\r\n };\r\n\r\n onSavePopulationDatabase = () => {\r\n const databasePayload = this.createDatabasePayload(\r\n \"population\",\r\n this.state.newPopulationDatabaseName,\r\n this.state.selectedPopulationDatabaseId,\r\n this.state.selectedPopulationDataCountryNumericCode,\r\n this.state.populationData\r\n );\r\n\r\n api.saveDatabase(databasePayload, this.signal.token).then(response => {\r\n const { id } = response.data;\r\n\r\n const databases = {\r\n ...this.state.databases,\r\n [id]: this.createDatabase(databasePayload)\r\n };\r\n\r\n this.setStateSafely({\r\n databases,\r\n notificationVariant: \"success\",\r\n notificationOpen: true,\r\n notificationMessage: this.props.t(\r\n 'Database \"{{databaseName}}\" was saved',\r\n {\r\n databaseName: databasePayload.name\r\n }\r\n )\r\n });\r\n });\r\n };\r\n\r\n onSelectEmuDatabase = databaseId => {\r\n const countries = this.getCountries(\r\n databaseId || this.findDefaultDatabaseId()\r\n );\r\n\r\n this.setStateSafely({\r\n selectedEmuDatabaseId: databaseId,\r\n selectedEmuDataCountryNumericCode:\r\n Object.keys(countries).length !== 1\r\n ? undefined\r\n : parseInt(Object.keys(countries)[0], 10)\r\n });\r\n };\r\n\r\n onSelectEmuDataCountry = countryNumericCode => {\r\n this.setStateSafely({\r\n selectedEmuDataCountryNumericCode: countryNumericCode\r\n });\r\n };\r\n\r\n onLoadCountryEmuData = () => {\r\n api\r\n .fetchEmuDatabase(\r\n this.state.selectedEmuDatabaseId,\r\n this.state.selectedEmuDataCountryNumericCode,\r\n this.signal.token\r\n )\r\n .then(response => {\r\n if (!response) {\r\n return;\r\n }\r\n\r\n this.setStateSafely({\r\n emuData: normalizeEmuData(\r\n response.data.filter(\r\n datum =>\r\n datum.divisionNumericCode ===\r\n this.state.selectedEmuDataCountryNumericCode\r\n )\r\n ).map(datum => ({\r\n ...datum,\r\n id: createGuid()\r\n }))\r\n });\r\n });\r\n };\r\n\r\n onAddNewEmuItem = item => {\r\n this.setStateSafely({\r\n emuData: [...(this.state.emuData || []), item]\r\n });\r\n };\r\n\r\n onEditEmuItem = item => {\r\n const emuData = [...this.state.emuData];\r\n\r\n const itemIndex = findIndex(emuData, \"id\", item.id);\r\n emuData[itemIndex] = item;\r\n\r\n this.setStateSafely({\r\n emuData\r\n });\r\n };\r\n\r\n onDeleteEmuItem = itemId => {\r\n this.setStateSafely({\r\n emuData: this.state.emuData.filter(datum => datum.id !== itemId)\r\n });\r\n };\r\n\r\n onClearEmuData = () => {\r\n this.setStateSafely({\r\n emuData: undefined\r\n });\r\n };\r\n\r\n onChangeEmuDatabaseName = databaseName => {\r\n this.setStateSafely({\r\n newEmuDatabaseName: databaseName\r\n });\r\n };\r\n\r\n onSaveEmuDatabase = () => {\r\n const databasePayload = this.createDatabasePayload(\r\n \"emu\",\r\n this.state.newEmuDatabaseName,\r\n this.state.selectedEmuDatabaseId || this.findDefaultDatabaseId(),\r\n this.state.selectedEmuDataCountryNumericCode,\r\n this.state.emuData.map(({ startYear, endYear, ...rest }) => ({\r\n ...rest,\r\n year: startYear\r\n }))\r\n );\r\n\r\n api.saveDatabase(databasePayload, this.signal.token).then(response => {\r\n const { id } = response.data;\r\n\r\n const databases = {\r\n ...this.state.databases,\r\n [id]: this.createDatabase(databasePayload)\r\n };\r\n\r\n this.setStateSafely({\r\n databases,\r\n notificationVariant: \"success\",\r\n notificationOpen: true,\r\n notificationMessage: this.props.t(\r\n 'Database \"{{databaseName}}\" was saved',\r\n {\r\n databaseName: databasePayload.name\r\n }\r\n )\r\n });\r\n });\r\n };\r\n\r\n onCloseNotification = () => {\r\n this.setStateSafely({\r\n notificationVariant: undefined,\r\n notificationOpen: false,\r\n notificationMessage: undefined\r\n });\r\n };\r\n\r\n componentDidMount() {\r\n api.fetchDatabases(this.signal.token).then(response => {\r\n if (!response) {\r\n return;\r\n }\r\n\r\n const databases = normalizeDatabases(response.data);\r\n\r\n this.setStateSafely({\r\n databases: databases,\r\n defaultCountries: getCountries(\r\n databases,\r\n findDefaultDatabaseId(databases)\r\n )\r\n });\r\n });\r\n }\r\n\r\n componentWillUnmount() {\r\n this.unmounting = true;\r\n this.signal.cancel();\r\n }\r\n\r\n render() {\r\n return (\r\n <PrepareData\r\n match={this.props.match}\r\n databases={this.state.databases}\r\n surveyDatabaseCountries={this.getCountries(\r\n this.state.selectedSurveyDatabaseId\r\n )}\r\n selectedSurveyDatabaseId={this.state.selectedSurveyDatabaseId}\r\n selectedSurveyDataCountryNumericCode={\r\n this.state.selectedSurveyDataCountryNumericCode\r\n }\r\n surveyData={this.state.surveyData}\r\n newSurveyDatabaseName={this.state.newSurveyDatabaseName}\r\n populationDatabaseCountries={this.getCountries(\r\n this.state.selectedPopulationDatabaseId\r\n )}\r\n selectedPopulationDatabaseId={this.state.selectedPopulationDatabaseId}\r\n selectedPopulationDataCountryNumericCode={\r\n this.state.selectedPopulationDataCountryNumericCode\r\n }\r\n populationData={this.state.populationData}\r\n newPopulationDatabaseName={this.state.newPopulationDatabaseName}\r\n emuDatabaseCountries={this.getCountries(\r\n this.state.selectedEmuDatabaseId || this.findDefaultDatabaseId()\r\n )}\r\n selectedEmuDatabaseId={this.state.selectedEmuDatabaseId}\r\n selectedEmuDataCountryNumericCode={\r\n this.state.selectedEmuDataCountryNumericCode\r\n }\r\n emuData={this.state.emuData}\r\n newEmuDatabaseName={this.state.newEmuDatabaseName}\r\n notificationVariant={this.state.notificationVariant}\r\n notificationOpen={this.state.notificationOpen}\r\n notificationMessage={this.state.notificationMessage}\r\n onSelectSurveyDatabase={this.onSelectSurveyDatabase}\r\n onSelectSurveyDataCountry={this.onSelectSurveyDataCountry}\r\n onLoadCountrySurveyData={this.onLoadCountrySurveyData}\r\n onAddNewSurveyItem={this.onAddNewSurveyItem}\r\n onEditSurveyItem={this.onEditSurveyItem}\r\n onDeleteSurveyItem={this.onDeleteSurveyItem}\r\n onClearSurveyData={this.onClearSurveyData}\r\n onChangeSurveyDatabaseName={this.onChangeSurveyDatabaseName}\r\n onSaveSurveyDatabase={this.onSaveSurveyDatabase}\r\n onSelectPopulationDatabase={this.onSelectPopulationDatabase}\r\n onSelectPopulationDataCountry={this.onSelectPopulationDataCountry}\r\n onLoadCountryPopulationData={this.onLoadCountryPopulationData}\r\n onAddNewPopulationItem={this.onAddNewPopulationItem}\r\n onEditPopulationItem={this.onEditPopulationItem}\r\n onDeletePopulationItem={this.onDeletePopulationItem}\r\n onClearPopulationData={this.onClearPopulationData}\r\n onChangePopulationDatabaseName={this.onChangePopulationDatabaseName}\r\n onSavePopulationDatabase={this.onSavePopulationDatabase}\r\n onSelectEmuDatabase={this.onSelectEmuDatabase}\r\n onSelectEmuDataCountry={this.onSelectEmuDataCountry}\r\n onLoadCountryEmuData={this.onLoadCountryEmuData}\r\n onAddNewEmuItem={this.onAddNewEmuItem}\r\n onEditEmuItem={this.onEditEmuItem}\r\n onDeleteEmuItem={this.onDeleteEmuItem}\r\n onClearEmuData={this.onClearEmuData}\r\n onChangeEmuDatabaseName={this.onChangeEmuDatabaseName}\r\n onSaveEmuDatabase={this.onSaveEmuDatabase}\r\n onCloseNotification={this.onCloseNotification}\r\n />\r\n );\r\n }\r\n}\r\n\r\nexport default withTranslation()(withErrorBoundary(PrepareDataContainer));\r\n","import React from \"react\";\r\nimport * as PropTypes from \"prop-types\";\r\nimport { formatDateTime } from \"../utilities\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { withStyles } from \"@material-ui/core/styles\";\r\nimport IconButton from \"@material-ui/core/IconButton\";\r\nimport Table from \"@material-ui/core/Table\";\r\nimport TableBody from \"@material-ui/core/TableBody\";\r\nimport TableCell from \"@material-ui/core/TableCell\";\r\nimport TableHead from \"@material-ui/core/TableHead\";\r\nimport TableRow from \"@material-ui/core/TableRow\";\r\nimport Tooltip from \"@material-ui/core/Tooltip\";\r\nimport HourglassFullIcon from \"@material-ui/icons/HourglassFull\";\r\nimport HourglassEmptyIcon from \"@material-ui/icons/HourglassEmpty\";\r\nimport InfoIcon from \"@material-ui/icons/Info\";\r\nimport { withTranslation } from \"react-i18next\";\r\nimport Loading from \"./Loading\";\r\nimport Notification from \"./Notification\";\r\n\r\nconst styles = {\r\n button: {\r\n marginTop: 20\r\n },\r\n failed: {\r\n color: \"red\"\r\n },\r\n note: {\r\n marginBottom: 0\r\n },\r\n succeeded: {\r\n color: \"green\"\r\n },\r\n table: {\r\n width: \"initial\"\r\n }\r\n};\r\n\r\nconst RunHistory = ({ t, ...rest }) => (\r\n <Loading loading={rest.loadingData} message={t(\"Loading runs...\")}>\r\n <p className={rest.classes.note}>\r\n {t(\"The run history will refresh automatically.\")}\r\n </p>\r\n\r\n <Table className={rest.classes.table}>\r\n <TableHead>\r\n <TableRow>\r\n <TableCell>{t(\"Run name\")}</TableCell>\r\n <TableCell>{t(\"Started at\")}</TableCell>\r\n <TableCell />\r\n <TableCell />\r\n </TableRow>\r\n </TableHead>\r\n\r\n <TableBody>\r\n {rest.runs\r\n .sort((a, b) => b.startedAt - a.startedAt)\r\n .map(run => (\r\n <TableRow key={run.name}>\r\n <TableCell>\r\n {run.completed && !run.failed ? (\r\n <Tooltip title={t(\"Load run\")}>\r\n <Link to={`/viewrun/survey?run=${run.id}`}>{run.name}</Link>\r\n </Tooltip>\r\n ) : (\r\n <span>{run.name}</span>\r\n )}\r\n </TableCell>\r\n <TableCell>{formatDateTime(run.startedAt)}</TableCell>\r\n <TableCell>\r\n <Tooltip\r\n title={\r\n run.completed\r\n ? !run.failed\r\n ? t(\"Run has completed\")\r\n : t(\"Run failed\")\r\n : t(\"Run is in progress\")\r\n }\r\n >\r\n {run.completed ? (\r\n <HourglassFullIcon\r\n className={\r\n !run.failed\r\n ? rest.classes.succeeded\r\n : rest.classes.failed\r\n }\r\n />\r\n ) : (\r\n <HourglassEmptyIcon />\r\n )}\r\n </Tooltip>\r\n </TableCell>\r\n <TableCell>\r\n <IconButton\r\n onClick={() => {\r\n rest.onDownloadRunLog(run.id);\r\n }}\r\n >\r\n <Tooltip title={t(\"Log\")}>\r\n <InfoIcon />\r\n </Tooltip>\r\n </IconButton>\r\n </TableCell>\r\n </TableRow>\r\n ))}\r\n </TableBody>\r\n </Table>\r\n\r\n <Notification\r\n variant={rest.notificationVariant}\r\n open={rest.notificationOpen}\r\n message={rest.notificationMessage}\r\n onClose={rest.onCloseNotification}\r\n />\r\n </Loading>\r\n);\r\n\r\nRunHistory.propTypes = {\r\n loadingData: PropTypes.bool,\r\n runs: PropTypes.arrayOf(\r\n PropTypes.shape({\r\n id: PropTypes.string.isRequired,\r\n name: PropTypes.string.isRequired,\r\n startedAt: PropTypes.instanceOf(Date).isRequired,\r\n completed: PropTypes.bool.isRequired\r\n })\r\n ),\r\n notificationVariant: PropTypes.string,\r\n notificationOpen: PropTypes.bool,\r\n notificationMessage: PropTypes.string,\r\n onDownloadRunLog: PropTypes.func.isRequired,\r\n onCloseNotification: PropTypes.func.isRequired\r\n};\r\n\r\nRunHistory.defaultProps = {\r\n loadingData: false,\r\n runs: [],\r\n notificationOpen: false\r\n};\r\n\r\nexport default withTranslation()(withStyles(styles)(RunHistory));\r\n","import React, { Component } from \"react\";\r\nimport { createSlug } from \"../utilities\";\r\nimport { normalizeRuns } from \"../data\";\r\nimport * as api from \"../api/api\";\r\nimport fileDownload from \"js-file-download\";\r\nimport { withErrorBoundary } from \"../errors\";\r\nimport { withTranslation } from \"react-i18next\";\r\nimport RunHistory from \"../components/RunHistory\";\r\n\r\nconst createInitialState = () => ({});\r\n\r\nconst getNewlyCompletedRunIds = (previousRuns, currentRuns) => {\r\n if (!previousRuns) {\r\n return [];\r\n }\r\n\r\n const previouslyCompletedRunIds = new Set(\r\n (previousRuns || []).filter(run => run.completed).map(run => run.id)\r\n );\r\n\r\n const currentlyCompletedRunIds = (currentRuns || [])\r\n .filter(run => run.completed)\r\n .map(run => run.id);\r\n\r\n return currentlyCompletedRunIds.filter(\r\n runId => !previouslyCompletedRunIds.has(runId)\r\n );\r\n};\r\n\r\nclass RunHistoryContainer extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.signal = api.getSignal();\r\n\r\n this.state = createInitialState();\r\n }\r\n\r\n setStateSafely = (state, callback) => {\r\n if (!this.unmounting) {\r\n this.setState(state, callback);\r\n }\r\n };\r\n\r\n fetchRuns = refreshing => {\r\n this.setStateSafely({\r\n loadingData: !refreshing\r\n });\r\n\r\n api\r\n .fetchRuns(true, true, this.signal.token)\r\n .then(response => {\r\n if (!response) {\r\n this.runsHash = undefined;\r\n\r\n return;\r\n }\r\n\r\n const runs = Object.entries(normalizeRuns(response.data)).map(\r\n ([id, run]) => ({\r\n id: id,\r\n name: run.name,\r\n startedAt: run.startedAt,\r\n completed: run.completed,\r\n failed: run.failed\r\n })\r\n );\r\n\r\n const newlyCompletedRunIds = getNewlyCompletedRunIds(\r\n this.state.runs,\r\n runs\r\n );\r\n\r\n const notification = newlyCompletedRunIds.length && {\r\n notificationVariant: \"success\",\r\n notificationOpen: true,\r\n notificationMessage: this.props.t(\r\n \"{{runCount}} run(s) recently completed\",\r\n {\r\n runCount: newlyCompletedRunIds.length\r\n }\r\n )\r\n };\r\n\r\n this.setStateSafely({\r\n runs: Object.entries(normalizeRuns(response.data)).map(\r\n ([id, run]) => ({\r\n id: id,\r\n name: run.name,\r\n startedAt: run.startedAt,\r\n completed: run.completed,\r\n failed: run.failed\r\n })\r\n ),\r\n ...(notification || {})\r\n });\r\n })\r\n .finally(() => {\r\n this.setStateSafely({\r\n loadingData: false\r\n });\r\n\r\n this.refreshTimer = window.setTimeout(\r\n () => this.fetchRuns(true),\r\n 60000\r\n );\r\n });\r\n };\r\n\r\n onDownloadRunLog = runId => {\r\n api.fetchRunLog(runId, this.signal.token).then(response => {\r\n if (!response) {\r\n return;\r\n }\r\n\r\n const run = this.state.runs.find(run => run.id === runId);\r\n\r\n if (run) {\r\n fileDownload(response.data, createSlug(run.name, \"run.log\"));\r\n }\r\n });\r\n };\r\n\r\n onCloseNotification = () => {\r\n this.setStateSafely({\r\n notificationOpen: false\r\n });\r\n };\r\n\r\n componentDidMount() {\r\n this.fetchRuns(false);\r\n }\r\n\r\n componentWillUnmount() {\r\n this.unmounting = true;\r\n\r\n if (this.refreshTimer) {\r\n window.clearTimeout(this.refreshTimer);\r\n }\r\n\r\n this.signal.cancel();\r\n }\r\n\r\n render() {\r\n return (\r\n <RunHistory\r\n loadingData={this.state.loadingData}\r\n runs={this.state.runs}\r\n notificationVariant={this.state.notificationVariant}\r\n notificationOpen={this.state.notificationOpen}\r\n notificationMessage={this.state.notificationMessage}\r\n onDownloadRunLog={this.onDownloadRunLog}\r\n onCloseNotification={this.onCloseNotification}\r\n />\r\n );\r\n }\r\n}\r\n\r\nexport default withTranslation()(withErrorBoundary(RunHistoryContainer));\r\n","import React from \"react\";\r\nimport * as PropTypes from \"prop-types\";\r\nimport { withStyles } from \"@material-ui/core/styles\";\r\nimport classNames from \"classnames\";\r\nimport Button from \"@material-ui/core/Button\";\r\nimport InputLabel from \"@material-ui/core/InputLabel\";\r\nimport LinearProgress from \"@material-ui/core/LinearProgress\";\r\nimport { withTranslation } from \"react-i18next\";\r\n\r\nconst styles = {\r\n additionalButton: {\r\n marginTop: 10\r\n },\r\n button: {\r\n width: \"100%\"\r\n },\r\n externalDatabasePath: {\r\n marginTop: 10\r\n },\r\n fileInput: {\r\n display: \"none\"\r\n },\r\n inputLabel: {\r\n fontSize: \"75%\"\r\n }\r\n};\r\n\r\nconst StartRunDatabaseUploader = ({ t, ...rest }) => (\r\n <div>\r\n {!rest.databaseName ? (\r\n <div>\r\n <input\r\n id=\"external-database-file\"\r\n type=\"file\"\r\n accept=\".csv\"\r\n className={rest.classes.fileInput}\r\n onChange={e => rest.onSelectDatabase(e.target.files[0])}\r\n />\r\n <label htmlFor=\"external-database-file\">\r\n <Button\r\n variant=\"contained\"\r\n component=\"span\"\r\n className={rest.classes.button}\r\n >\r\n {t(\"Choose database\")}\r\n </Button>\r\n </label>\r\n </div>\r\n ) : (\r\n undefined\r\n )}\r\n\r\n {rest.databaseName && !rest.uploadingDatabase ? (\r\n <div>\r\n <Button\r\n variant=\"contained\"\r\n color=\"primary\"\r\n className={rest.classes.button}\r\n onClick={rest.onUpload}\r\n >\r\n {t(\"Upload database\")}\r\n </Button>\r\n\r\n <Button\r\n variant=\"contained\"\r\n color=\"secondary\"\r\n className={classNames(\r\n rest.classes.button,\r\n rest.classes.additionalButton\r\n )}\r\n onClick={rest.onCancelUpload}\r\n >\r\n {t(\"Cancel\")}\r\n </Button>\r\n </div>\r\n ) : (\r\n undefined\r\n )}\r\n\r\n {rest.uploadingDatabase ? (\r\n <div>\r\n <LinearProgress\r\n variant=\"determinate\"\r\n value={rest.databaseUploadProgress}\r\n />\r\n </div>\r\n ) : (\r\n undefined\r\n )}\r\n\r\n <div className={rest.classes.externalDatabasePath}>\r\n <InputLabel className={rest.classes.inputLabel}>\r\n {t(\"Database to upload\")}\r\n </InputLabel>\r\n\r\n <div>{rest.databaseName || t(\"No database chosen\")}</div>\r\n </div>\r\n </div>\r\n);\r\n\r\nStartRunDatabaseUploader.propTypes = {\r\n databaseName: PropTypes.string,\r\n uploadingDatabase: PropTypes.bool,\r\n databaseUploadProgress: PropTypes.number,\r\n onSelectDatabase: PropTypes.func.isRequired,\r\n onUpload: PropTypes.func.isRequired,\r\n onCancelUpload: PropTypes.func.isRequired\r\n};\r\n\r\nStartRunDatabaseUploader.defaultProps = {\r\n uploadingDatabase: false,\r\n databaseUploadProgress: 0\r\n};\r\n\r\nexport default withTranslation()(withStyles(styles)(StartRunDatabaseUploader));\r\n","import React, { Component } from \"react\";\r\nimport * as PropTypes from \"prop-types\";\r\nimport { databasePropType, databaseTypePropType } from \"../../propTypes\";\r\nimport { withStyles } from \"@material-ui/core/styles\";\r\nimport FormControl from \"@material-ui/core/FormControl\";\r\nimport FormControlLabel from \"@material-ui/core/FormControlLabel\";\r\nimport InputLabel from \"@material-ui/core/InputLabel\";\r\nimport Radio from \"@material-ui/core/Radio\";\r\nimport RadioGroup from \"@material-ui/core/RadioGroup\";\r\nimport Select from \"react-select\";\r\nimport { withTranslation } from \"react-i18next\";\r\nimport DatabaseUploader from \"./StartRunDatabaseUploader\";\r\n\r\nconst styles = {\r\n dataTypeSpecificComponents: {\r\n margin: \"10px 0\"\r\n },\r\n inputLabel: {\r\n fontSize: \"75%\"\r\n },\r\n radio: {\r\n padding: \"2px 12px\"\r\n },\r\n select: {\r\n marginTop: 10\r\n }\r\n};\r\n\r\nclass StartRunDatabasePicker extends Component {\r\n getDatabaseTypeSpecificComponents = () => {\r\n switch (this.props.databaseType) {\r\n case \"default\":\r\n const defaultDatabases = this.props.defaultDatabases.map(\r\n ({ id, name }) => ({\r\n value: id,\r\n label: name\r\n })\r\n );\r\n\r\n return (\r\n <div>\r\n <InputLabel className={this.props.classes.inputLabel}>\r\n {this.props.t(\"Choose default database\")}\r\n </InputLabel>\r\n\r\n <Select\r\n placeholder={this.props.t(\"Select database...\")}\r\n options={defaultDatabases}\r\n value={defaultDatabases.filter(\r\n ({ value }) => value === this.props.selectedDatabaseId\r\n )}\r\n noOptionsMessage={() =>\r\n this.props.t(\"No default databases available\")\r\n }\r\n className={this.props.classes.select}\r\n onChange={({ value }) => this.props.onSelectDatabase(value)}\r\n />\r\n </div>\r\n );\r\n\r\n case \"custom\":\r\n const customDatabases = this.props.customDatabases.map(\r\n ({ id, name }) => ({\r\n value: id,\r\n label: name\r\n })\r\n );\r\n\r\n return (\r\n <div>\r\n <InputLabel className={this.props.classes.inputLabel}>\r\n Choose custom database\r\n </InputLabel>\r\n\r\n <Select\r\n placeholder={this.props.t(\"Select database...\")}\r\n options={customDatabases}\r\n value={customDatabases.filter(\r\n ({ value }) => value === this.props.selectedDatabaseId\r\n )}\r\n noOptionsMessage={() =>\r\n this.props.t(\"No custom databases available\")\r\n }\r\n className={this.props.classes.select}\r\n onChange={({ value }) => this.props.onSelectDatabase(value)}\r\n />\r\n </div>\r\n );\r\n\r\n case \"external\":\r\n return (\r\n <DatabaseUploader\r\n databaseName={this.props.uploadedDatabaseName}\r\n uploadingDatabase={this.props.uploadingDatabase}\r\n databaseUploadProgress={this.props.databaseUploadProgress}\r\n onSelectDatabase={this.props.onSelectDatabaseFile}\r\n onUpload={this.props.onUploadDatabase}\r\n onCancelUpload={this.props.onCancelDatabaseUpload}\r\n />\r\n );\r\n\r\n default:\r\n console.error(`${this.props.databaseType} is an unknown database type`);\r\n\r\n break;\r\n }\r\n };\r\n\r\n render() {\r\n return (\r\n <div>\r\n <FormControl component=\"fieldset\">\r\n <RadioGroup\r\n aria-label=\"Database type\"\r\n value={this.props.databaseType}\r\n onChange={(_, value) => this.props.onChangeDatabaseType(value)}\r\n >\r\n {this.props.variant !== \"emu\" && (\r\n <FormControlLabel\r\n value=\"default\"\r\n control={<Radio className={this.props.classes.radio} />}\r\n label={this.props.t(\"Default\")}\r\n />\r\n )}\r\n <FormControlLabel\r\n value=\"custom\"\r\n control={<Radio className={this.props.classes.radio} />}\r\n label={this.props.t(\"Custom\")}\r\n />\r\n <FormControlLabel\r\n value=\"external\"\r\n control={<Radio className={this.props.classes.radio} />}\r\n label={this.props.t(\"External\")}\r\n />\r\n </RadioGroup>\r\n </FormControl>\r\n\r\n <div className={this.props.classes.dataTypeSpecificComponents}>\r\n {this.getDatabaseTypeSpecificComponents()}\r\n </div>\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nStartRunDatabasePicker.propTypes = {\r\n variant: PropTypes.oneOf([\"default\", \"emu\"]),\r\n databaseType: databaseTypePropType,\r\n defaultDatabases: PropTypes.arrayOf(databasePropType),\r\n customDatabases: PropTypes.arrayOf(databasePropType).isRequired,\r\n selectedDatabaseId: PropTypes.string,\r\n uploadedDatabaseName: PropTypes.string,\r\n uploadingDatabase: PropTypes.bool,\r\n databaseUploadProgress: PropTypes.number,\r\n onChangeDatabaseType: PropTypes.func.isRequired,\r\n onSelectDatabase: PropTypes.func.isRequired,\r\n onSelectDatabaseFile: PropTypes.func.isRequired,\r\n onUploadDatabase: PropTypes.func.isRequired,\r\n onCancelDatabaseUpload: PropTypes.func.isRequired\r\n};\r\n\r\nStartRunDatabasePicker.defaultProps = {\r\n variant: \"default\",\r\n databaseType: \"default\",\r\n defaultDatabases: [],\r\n uploadingDatabase: false\r\n};\r\n\r\nexport default withTranslation()(withStyles(styles)(StartRunDatabasePicker));\r\n","import React from \"react\";\r\nimport * as PropTypes from \"prop-types\";\r\nimport { databaseTypePropType, periodPropType } from \"../../propTypes\";\r\nimport { withStyles } from \"@material-ui/core/styles\";\r\nimport Button from \"@material-ui/core/Button\";\r\nimport Divider from \"@material-ui/core/Divider\";\r\nimport InputLabel from \"@material-ui/core/InputLabel\";\r\nimport LinearProgress from \"@material-ui/core/LinearProgress\";\r\nimport TextField from \"@material-ui/core/TextField\";\r\nimport Select from \"react-select\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport DatabasePicker from \"./StartRunDatabasePicker\";\r\nimport PeriodSelector from \"../PeriodSelector/PeriodSelector\";\r\nimport ProgressButton from \"../ProgressButton\";\r\n\r\nconst styles = {\r\n actionButton: {\r\n display: \"inline-flex\",\r\n minHeight: 36,\r\n marginTop: 10\r\n },\r\n divider: {\r\n margin: \"10px 0\"\r\n },\r\n drawerItem: {\r\n flexShrink: 0\r\n },\r\n instruction: {\r\n margin: \"10px 0\",\r\n fontWeight: \"bold\"\r\n },\r\n periodSelector: {\r\n margin: \"40px 10px\"\r\n },\r\n periodSelectorGroup: {\r\n marginTop: 10,\r\n zIndex: -1\r\n },\r\n periodSelectorLabel: {\r\n fontSize: \"75%\"\r\n },\r\n progress: {\r\n margin: \"15px 0 5px\"\r\n },\r\n select: {\r\n marginBottom: 10\r\n }\r\n};\r\n\r\nconst groupDatabases = databases => {\r\n const denormalizedDatabases = Object.entries(databases).map(\r\n ([id, database]) => ({\r\n id,\r\n ...database\r\n })\r\n );\r\n\r\n return {\r\n surveyDatabases: denormalizedDatabases.filter(\r\n database => database.type === \"survey\" && database.isGlobal\r\n ),\r\n customSurveyDatabases: denormalizedDatabases.filter(\r\n database => database.type === \"survey\" && !database.isGlobal\r\n ),\r\n populationDatabases: denormalizedDatabases.filter(\r\n database => database.type === \"population\" && database.isGlobal\r\n ),\r\n customPopulationDatabases: denormalizedDatabases.filter(\r\n database => database.type === \"population\" && !database.isGlobal\r\n ),\r\n emuDatabases: denormalizedDatabases.filter(\r\n database => database.type === \"emu\" && database.isGlobal\r\n ),\r\n customEmuDatabases: denormalizedDatabases.filter(\r\n database => database.type === \"emu\" && !database.isGlobal\r\n )\r\n };\r\n};\r\n\r\nconst StartRunDrawerContent = props => {\r\n const {\r\n surveyDatabases,\r\n customSurveyDatabases,\r\n populationDatabases,\r\n customPopulationDatabases,\r\n customEmuDatabases\r\n } = groupDatabases(props.databases);\r\n\r\n const countries = Object.entries(props.countries || {})\r\n .map(([numericCode, country]) => ({\r\n value: parseInt(numericCode, 10),\r\n label: country.name\r\n }))\r\n .sort((a, b) => a.label.localeCompare(b.label));\r\n\r\n const regions = props.regions.map((region, index) => ({\r\n value: -index - 1,\r\n label: region\r\n }));\r\n\r\n const selectedRegion = regions.find(\r\n region => region.label === props.selectedRegion\r\n );\r\n\r\n const selectedRegionValue = selectedRegion && selectedRegion.value;\r\n\r\n const countriesAndRegions = countries.concat(regions);\r\n\r\n// const getNations = (countryCode) => {\r\n// if (!countryCode) {\r\n// return [];\r\n// }\r\n\r\n// return [\r\n// { value: \"National\", label: \"National\" },\r\n// { value: \"Subnational\", label: \"Subnational\" },\r\n// ] \r\n// }\r\n\r\n// const selectedNationValue = props.selectedNation;\r\n// const nations = getNations(props.selectedCountryNumericCode);\r\n\r\n const { t } = useTranslation();\r\n\r\n return (\r\n <>\r\n {props.loadingData && (\r\n <div className={props.classes.progress}>\r\n <LinearProgress />\r\n </div>\r\n )}\r\n\r\n <div className={props.classes.instruction}>\r\n 1a. {t(\"Select survey database\")}\r\n </div>\r\n\r\n <DatabasePicker\r\n databaseType={props.surveyDatabaseType}\r\n defaultDatabases={surveyDatabases}\r\n customDatabases={customSurveyDatabases}\r\n selectedDatabaseId={props.selectedSurveyDatabaseId}\r\n uploadedDatabaseName={props.uploadedSurveyDatabaseName}\r\n databaseUploadProgress={props.surveyDatabaseUploadProgress}\r\n uploadingDatabase={props.uploadingSurveyDatabase}\r\n onChangeDatabaseType={props.onChangeSurveyDatabaseType}\r\n onSelectDatabase={props.onSelectSurveyDatabase}\r\n onSelectDatabaseFile={props.onSelectSurveyDatabaseFile}\r\n onUploadDatabase={props.onUploadSurveyDatabase}\r\n onCancelDatabaseUpload={props.onCancelSurveyDatabaseUpload}\r\n />\r\n\r\n <Divider className={props.classes.divider} />\r\n\r\n <div className={props.classes.instruction}>\r\n 1b. {t(\"Select population database\")}\r\n </div>\r\n\r\n <DatabasePicker\r\n databaseType={props.populationDatabaseType}\r\n defaultDatabases={populationDatabases}\r\n customDatabases={customPopulationDatabases}\r\n selectedDatabaseId={props.selectedPopulationDatabaseId}\r\n uploadedDatabaseName={props.uploadedPopulationDatabaseName}\r\n databaseUploadProgress={props.populationDatabaseUploadProgress}\r\n uploadingDatabase={props.uploadingPopulationDatabase}\r\n onChangeDatabaseType={props.onChangePopulationDatabaseType}\r\n onSelectDatabase={props.onSelectPopulationDatabase}\r\n onSelectDatabaseFile={props.onSelectPopulationDatabaseFile}\r\n onUploadDatabase={props.onUploadPopulationDatabase}\r\n onCancelDatabaseUpload={props.onCancelPopulationDatabaseUpload}\r\n />\r\n\r\n <Divider className={props.classes.divider} />\r\n\r\n <div className={props.classes.instruction}>\r\n 2. {t(\"Select service statistics\")}\r\n </div>\r\n\r\n <DatabasePicker\r\n variant=\"emu\"\r\n databaseType={props.emuDatabaseType}\r\n customDatabases={[{ id: \"\", name: t(\"None\") }, ...customEmuDatabases]}\r\n selectedDatabaseId={props.selectedEmuDatabaseId}\r\n uploadedDatabaseName={props.uploadedEmuDatabaseName}\r\n databaseUploadProgress={props.emuDatabaseUploadProgress}\r\n uploadingDatabase={props.uploadingEmuDatabase}\r\n onChangeDatabaseType={props.onChangeEmuDatabaseType}\r\n onSelectDatabase={props.onSelectEmuDatabase}\r\n onSelectDatabaseFile={props.onSelectEmuDatabaseFile}\r\n onUploadDatabase={props.onUploadEmuDatabase}\r\n onCancelDatabaseUpload={props.onCancelEmuDatabaseUpload}\r\n />\r\n\r\n <Divider className={props.classes.divider} />\r\n\r\n <div className={props.classes.instruction}>\r\n 3. {t(\"Select country/population\")}\r\n </div>\r\n\r\n <Select\r\n placeholder={t(\"Select country/population\")}\r\n options={countriesAndRegions}\r\n value={countriesAndRegions.filter(\r\n ({ value }) =>\r\n value === (selectedRegionValue || props.selectedCountryNumericCode)\r\n )}\r\n noOptionsMessage={() => \"No countries available\"}\r\n className={props.classes.select}\r\n onChange={({ value }) => {\r\n if (value >= 0) {\r\n props.onSelectCountry(value);\r\n } else {\r\n props.onSelectRegion(\r\n regions.find(region => region.value === value).label\r\n );\r\n }\r\n }}\r\n />\r\n\r\n <Divider className={props.classes.divider} />\r\n\r\n {/* <>\r\n <div className={props.classes.instruction}>\r\n 3b. {t(\"Select national/subnational\")}\r\n </div>\r\n\r\n <Select\r\n placeholder={t(\"Select national/subnational\")}\r\n options={nations}\r\n value={nations.filter(\r\n ({ value }) =>\r\n value === (selectedNationValue)\r\n )}\r\n noOptionsMessage={() => \"No options available\"}\r\n className={props.classes.select}\r\n onChange={({ value }) => {\r\n props.onSelectNation(value);\r\n }}\r\n />\r\n\r\n <Divider className={props.classes.divider} />\r\n </> */}\r\n\r\n <div className={props.classes.instruction}>\r\n 4. {t(\"Input run settings\")}\r\n </div>\r\n\r\n <TextField\r\n label={t(\"Run name\")}\r\n placeholder={t(\"Enter run name...\")}\r\n InputLabelProps={{\r\n shrink: true,\r\n required: true\r\n }}\r\n value={props.runName || \"\"}\r\n className={props.classes.drawerItem}\r\n onChange={e => {\r\n props.onRunNameChanged(e.target.value);\r\n }}\r\n />\r\n\r\n <div className={props.classes.periodSelectorGroup}>\r\n <div className=\"hidden\">\r\n <InputLabel className={props.classes.periodSelectorLabel}>\r\n {t(\"Estimate years\")}\r\n </InputLabel>\r\n\r\n <div className={props.classes.periodSelector}>\r\n <PeriodSelector\r\n period={props.period}\r\n onChange={props.onChangePeriod}\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <Divider className={props.classes.divider} />\r\n\r\n <ProgressButton\r\n variant=\"contained\"\r\n disabled={!(props.selectedCountryNumericCode || props.selectedRegion)}\r\n loading={props.loadingTables}\r\n className={props.classes.actionButton}\r\n onClick={props.onReviewData}\r\n >\r\n {t(\"Review data\")}\r\n </ProgressButton>\r\n\r\n <Button\r\n variant=\"contained\"\r\n color=\"primary\"\r\n disabled={\r\n !(props.selectedCountryNumericCode || props.selectedRegion) ||\r\n !props.runName\r\n }\r\n className={props.classes.actionButton}\r\n onClick={props.onStartRun}\r\n >\r\n {t(\"Start run\")}\r\n </Button>\r\n </>\r\n );\r\n};\r\n\r\nStartRunDrawerContent.propTypes = {\r\n loadingData: PropTypes.bool,\r\n databases: PropTypes.objectOf(\r\n PropTypes.shape({\r\n name: PropTypes.string.isRequired\r\n })\r\n ),\r\n surveyDatabaseType: databaseTypePropType,\r\n selectedSurveyDatabaseId: PropTypes.string,\r\n uploadedSurveyDatabaseName: PropTypes.string,\r\n uploadingSurveyDatabase: PropTypes.bool,\r\n surveyDatabaseUploadProgress: PropTypes.number,\r\n populationDatabaseType: databaseTypePropType,\r\n selectedPopulationDatabaseId: PropTypes.string,\r\n uploadedPopulationDatabaseName: PropTypes.string,\r\n uploadingPopulationDatabase: PropTypes.bool,\r\n populationDatabaseUploadProgress: PropTypes.number,\r\n emuDatabaseType: databaseTypePropType,\r\n selectedEmuDatabaseId: PropTypes.string,\r\n uploadedEmuDatabaseName: PropTypes.string,\r\n uploadingEmuDatabase: PropTypes.bool,\r\n emuDatabaseUploadProgress: PropTypes.number,\r\n countries: PropTypes.objectOf(\r\n PropTypes.shape({\r\n name: PropTypes.string.isRequired\r\n })\r\n ),\r\n selectedCountryNumericCode: PropTypes.number,\r\n regions: PropTypes.arrayOf(PropTypes.string),\r\n selectedRegion: PropTypes.string,\r\n // selectedNation: PropTypes.string,\r\n runName: PropTypes.string,\r\n period: periodPropType,\r\n loadingTables: PropTypes.bool,\r\n onChangeSurveyDatabaseType: PropTypes.func.isRequired,\r\n onSelectSurveyDatabase: PropTypes.func.isRequired,\r\n onSelectSurveyDatabaseFile: PropTypes.func.isRequired,\r\n onUploadSurveyDatabase: PropTypes.func.isRequired,\r\n onCancelSurveyDatabaseUpload: PropTypes.func.isRequired,\r\n onChangePopulationDatabaseType: PropTypes.func.isRequired,\r\n onSelectPopulationDatabase: PropTypes.func.isRequired,\r\n onSelectPopulationDatabaseFile: PropTypes.func.isRequired,\r\n onUploadPopulationDatabase: PropTypes.func.isRequired,\r\n onCancelPopulationDatabaseUpload: PropTypes.func.isRequired,\r\n onChangeEmuDatabaseType: PropTypes.func.isRequired,\r\n onSelectEmuDatabase: PropTypes.func.isRequired,\r\n onSelectEmuDatabaseFile: PropTypes.func.isRequired,\r\n onUploadEmuDatabase: PropTypes.func.isRequired,\r\n onCancelEmuDatabaseUpload: PropTypes.func.isRequired,\r\n onSelectCountry: PropTypes.func.isRequired,\r\n onSelectRegion: PropTypes.func.isRequired,\r\n onRunNameChanged: PropTypes.func.isRequired,\r\n onChangePeriod: PropTypes.func.isRequired,\r\n onReviewData: PropTypes.func.isRequired,\r\n onStartRun: PropTypes.func.isRequired,\r\n // onSelectNation : PropTypes.func.isRequired,\r\n};\r\n\r\nStartRunDrawerContent.defaultProps = {\r\n loadingData: false,\r\n databases: {},\r\n surveyDatabaseType: \"default\",\r\n uploadingSurveyDatabase: false,\r\n populationDatabaseType: \"default\",\r\n uploadingPopulationDatabase: false,\r\n emuDatabaseType: \"default\",\r\n uploadingEmuDatabase: false,\r\n regions: [],\r\n loadingTables: false\r\n};\r\n\r\nexport default withStyles(styles)(StartRunDrawerContent);\r\n","import React from \"react\";\r\nimport * as PropTypes from \"prop-types\";\r\nimport { formatNumericCell } from \"../utilities\";\r\nimport { AgGridColumn, AgGridReact } from \"ag-grid-react\";\r\nimport \"ag-grid-enterprise\";\r\nimport \"ag-grid-community/dist/styles/ag-grid.css\";\r\nimport \"ag-grid-community/dist/styles/ag-theme-material.css\";\r\nimport { withTranslation } from \"react-i18next\";\r\nimport { translateGridText } from \"../i18n\";\r\n\r\nconst EmuData = ({ t, ...rest }) => (\r\n <div className=\"ag-theme-material\">\r\n <AgGridReact\r\n domLayout=\"autoHeight\"\r\n defaultColDef={{\r\n sortable: true,\r\n filter: true\r\n }}\r\n pagination={true}\r\n paginationPageSize={10}\r\n suppressColumnVirtualisation={true}\r\n suppressCellSelection={true}\r\n overlayNoRowsTemplate=\"<span />\"\r\n localeTextFunc={translateGridText}\r\n rowData={rest.data}\r\n onGridReady={params => {\r\n params.columnApi.autoSizeColumns(\r\n params.columnApi.getAllColumns().map(column => column.colId)\r\n );\r\n }}\r\n >\r\n <AgGridColumn \r\n headerName={t(\"Region code\")} \r\n field=\"regionCode\" \r\n />\r\n <AgGridColumn\r\n headerName={t(\"Reference pop\")}\r\n field=\"referencePop\"\r\n />\r\n <AgGridColumn\r\n headerName={t(\"Service statistic type\")}\r\n field=\"serviceStatisticType\"\r\n />\r\n <AgGridColumn\r\n headerName={t(\"Year\")}\r\n field=\"startYear\"\r\n type=\"numericColumn\"\r\n filter=\"agNumberColumnFilter\"\r\n />\r\n <AgGridColumn\r\n headerName={t(\"EMU\")}\r\n field=\"emu\"\r\n type=\"numericColumn\"\r\n filter=\"agNumberColumnFilter\"\r\n valueFormatter={params => formatNumericCell(params.value, 3)}\r\n />\r\n <AgGridColumn\r\n headerName={t(\"SD_EMU\")}\r\n field=\"sD_EMU\"\r\n />\r\n <AgGridColumn\r\n headerName={t(\"EMU_ROC\")}\r\n field=\"emU_ROC\"\r\n />\r\n <AgGridColumn\r\n headerName={t(\"SD_EMU_ROC\")}\r\n field=\"sD_EMU_ROC\"\r\n />\r\n <AgGridColumn\r\n headerName={t(\"Include?\")}\r\n field=\"included\"\r\n /> \r\n <AgGridColumn />\r\n <AgGridColumn />\r\n </AgGridReact>\r\n </div>\r\n);\r\n\r\nEmuData.propTypes = {\r\n data: PropTypes.array\r\n};\r\n\r\nEmuData.defaultProps = {\r\n data: []\r\n};\r\n\r\nexport default withTranslation()(EmuData);\r\n","import React from \"react\";\r\nimport * as PropTypes from \"prop-types\";\r\nimport { populationDatumPropType } from \"../propTypes\";\r\nimport { formatLogicalCell } from \"../utilities\";\r\nimport { AgGridColumn, AgGridReact } from \"ag-grid-react\";\r\nimport \"ag-grid-enterprise\";\r\nimport \"ag-grid-community/dist/styles/ag-grid.css\";\r\nimport \"ag-grid-community/dist/styles/ag-theme-material.css\";\r\nimport { withTranslation } from \"react-i18next\";\r\nimport { translateGridText } from \"../i18n\";\r\n\r\nconst PopulationData = ({ t, ...rest }) => (\r\n <div className=\"ag-theme-material\">\r\n <AgGridReact\r\n domLayout=\"autoHeight\"\r\n defaultColDef={{\r\n sortable: true,\r\n filter: true\r\n }}\r\n pagination={true}\r\n paginationPageSize={10}\r\n suppressColumnVirtualisation={true}\r\n suppressCellSelection={true}\r\n overlayNoRowsTemplate=\"<span />\"\r\n localeTextFunc={translateGridText}\r\n rowData={rest.data}\r\n onGridReady={params => {\r\n params.columnApi.autoSizeColumns(\r\n params.columnApi.getAllColumns().map(column => column.colId)\r\n );\r\n }}\r\n >\r\n <AgGridColumn headerName={t(\"Region code\")} field=\"regionCode\" />\r\n <AgGridColumn\r\n headerName={t(\"In union?\")}\r\n field=\"isInUnion\"\r\n valueFormatter={params => formatLogicalCell(params.value)}\r\n />\r\n <AgGridColumn headerName=\"Age\" field=\"ageRange\" />\r\n <AgGridColumn\r\n headerName={t(\"Year\")}\r\n field=\"midYear\"\r\n type=\"numericColumn\"\r\n filter=\"agNumberColumnFilter\"\r\n />\r\n <AgGridColumn\r\n headerName={t(\"Population\")}\r\n field=\"population\"\r\n type=\"numericColumn\"\r\n filter=\"agNumberColumnFilter\"\r\n />\r\n </AgGridReact>\r\n </div>\r\n);\r\n\r\nPopulationData.propTypes = {\r\n data: PropTypes.arrayOf(populationDatumPropType)\r\n};\r\n\r\nPopulationData.defaultProps = {\r\n data: []\r\n};\r\n\r\nexport default withTranslation()(PopulationData);\r\n","import React from \"react\";\r\nimport * as PropTypes from \"prop-types\";\r\nimport { surveyDatumPropType } from \"../propTypes\";\r\nimport { formatLogicalCell, formatNumericCell } from \"../utilities\";\r\nimport { AgGridColumn, AgGridReact } from \"ag-grid-react\";\r\nimport \"ag-grid-enterprise\";\r\nimport \"ag-grid-community/dist/styles/ag-grid.css\";\r\nimport \"ag-grid-community/dist/styles/ag-theme-material.css\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { translateGridText } from \"../i18n\";\r\n\r\nconst SurveyData = props => {\r\n const { t } = useTranslation();\r\n\r\n return (\r\n <div className=\"ag-theme-material\">\r\n <AgGridReact\r\n domLayout=\"autoHeight\"\r\n defaultColDef={{\r\n sortable: true,\r\n filter: true\r\n }}\r\n pagination={true}\r\n paginationPageSize={10}\r\n suppressColumnVirtualisation={true}\r\n suppressCellSelection={true}\r\n overlayNoRowsTemplate=\"<span />\"\r\n localeTextFunc={translateGridText}\r\n rowData={props.data}\r\n onGridReady={params => {\r\n params.columnApi.autoSizeColumns(\r\n params.columnApi.getAllColumns().map(column => column.colId)\r\n );\r\n }}\r\n >\r\n <AgGridColumn \r\n headerName={t(\"Region code\")} \r\n field=\"regionCode\" \r\n />\r\n <AgGridColumn\r\n headerName={t(\"possible_outlier\")}\r\n field=\"possible_outlier\"\r\n />\r\n <AgGridColumn\r\n headerName={t(\"possible_outlier_userinput\")}\r\n field=\"possible_outlier_userinput\"\r\n />\r\n <AgGridColumn\r\n headerName={t(\"Start year\")}\r\n field=\"startDate\"\r\n type=\"numericColumn\"\r\n filter=\"agNumberColumnFilter\"\r\n valueFormatter={params => formatNumericCell(params.value, 2)}\r\n />\r\n <AgGridColumn\r\n headerName={t(\"End year\")}\r\n field=\"endDate\"\r\n type=\"numericColumn\"\r\n filter=\"agNumberColumnFilter\"\r\n valueFormatter={params => formatNumericCell(params.value, 2)}\r\n />\r\n <AgGridColumn\r\n headerName={t(\"In union?\")}\r\n field=\"isInUnion\"\r\n valueFormatter={params => formatLogicalCell(params.value)}\r\n />\r\n <AgGridColumn \r\n headerName={t(\"Age\")} \r\n field=\"ageRange\" \r\n />\r\n <AgGridColumn\r\n headerName={t(\"Data series/type\")}\r\n field=\"dataSeriesType\"\r\n />\r\n <AgGridColumn\r\n headerName={t(\"Population\")}\r\n field=\"groupTypeRelativeToBaseline\"\r\n headerTooltip={t(\"Group type relative to baseline\")}\r\n />\r\n <AgGridColumn\r\n headerName={t(\"Modern contraceptive use\")}\r\n field=\"contraceptiveUseModern\"\r\n type=\"numericColumn\"\r\n filter=\"agNumberColumnFilter\"\r\n valueFormatter={params => formatNumericCell(params.value, 3)}\r\n headerTooltip={t(\"Contraceptive use (modern)\")}\r\n />\r\n <AgGridColumn\r\n headerName={t(\"Traditional contraceptive use\")}\r\n field=\"contraceptiveUseTraditional\"\r\n type=\"numericColumn\"\r\n filter=\"agNumberColumnFilter\"\r\n valueFormatter={params => formatNumericCell(params.value, 3)}\r\n headerTooltip={t(\"Contraceptive use (traditional)\")}\r\n />\r\n <AgGridColumn\r\n headerName={t(\"All contraceptive use\")}\r\n field=\"contraceptiveUseAny\"\r\n type=\"numericColumn\"\r\n filter=\"agNumberColumnFilter\"\r\n valueFormatter={params => formatNumericCell(params.value, 3)}\r\n headerTooltip={t(\"Contraceptive use (all)\")}\r\n />\r\n <AgGridColumn\r\n headerName={t(\"Modern methods unmet need\")}\r\n field=\"unmetNeedModern\"\r\n type=\"numericColumn\"\r\n filter=\"agNumberColumnFilter\"\r\n valueFormatter={params => formatNumericCell(params.value, 3)}\r\n headerTooltip={t(\"Unmet need for modern methods\")}\r\n />\r\n <AgGridColumn\r\n headerName={t(\"Any method unmet need\")}\r\n field=\"unmetNeedAny\"\r\n type=\"numericColumn\"\r\n filter=\"agNumberColumnFilter\"\r\n valueFormatter={params => formatNumericCell(params.value, 3)}\r\n headerTooltip={t(\"Unmet need for any method\")}\r\n />\r\n <AgGridColumn\r\n headerName={t(\"Pertaining to methods used since last pregnancy\")}\r\n field=\"pertainingToMethodsUsedSinceLastPregnancyReason\"\r\n />\r\n <AgGridColumn\r\n headerName={t(\"Geographical bias\")}\r\n field=\"geographicalRegionBiasReason\"\r\n />\r\n <AgGridColumn\r\n headerName={t(\"Non-pregnant and other positive biases\")}\r\n field=\"nonPregnantAndOtherPositiveBiasesReason\"\r\n />\r\n <AgGridColumn headerName={t(\"Age bias\")} field=\"ageGroupBias\" />\r\n <AgGridColumn\r\n headerName={t(\"Modern method bias\")}\r\n field=\"modernMethodBias\"\r\n />\r\n <AgGridColumn\r\n headerName={t(\"Traditional method bias\")}\r\n field=\"traditionalMethodBiasReason\"\r\n />\r\n <AgGridColumn\r\n headerName={t(\"Absence of probing question bias?\")}\r\n field=\"hasAbsenceOfProbingQuestionsBias\"\r\n valueFormatter={params => formatLogicalCell(params.value)}\r\n />\r\n <AgGridColumn\r\n headerName={t(\"SE log-ratio modern/no use\")}\r\n field=\"seLogRModernNoUse\"\r\n type=\"numericColumn\"\r\n filter=\"agNumberColumnFilter\"\r\n valueFormatter={params => formatNumericCell(params.value, 2)}\r\n headerTooltip={t(\r\n \"Sampling error for the log-ratio of modern contraceptive method use to no use\"\r\n )}\r\n />\r\n <AgGridColumn\r\n headerName={t(\"SE log-ratio traditional/no use\")}\r\n field=\"seLogRTraditionalNoUse\"\r\n type=\"numericColumn\"\r\n filter=\"agNumberColumnFilter\"\r\n valueFormatter={params => formatNumericCell(params.value, 2)}\r\n headerTooltip={t(\r\n \"Sampling error for the log-ratio of traditional contraceptive method use to no use\"\r\n )}\r\n />\r\n <AgGridColumn\r\n headerName={t(\"SE log-ratio unmet/no need\")}\r\n field=\"seLogRUnmetNoNeed\"\r\n type=\"numericColumn\"\r\n filter=\"agNumberColumnFilter\"\r\n valueFormatter={params => formatNumericCell(params.value, 2)}\r\n headerTooltip={t(\r\n \"Sampling error for the log-ratio of unmet need (any method) to no need\"\r\n )}\r\n />\r\n <AgGridColumn\r\n headerName={t(\"Source ID\")}\r\n field=\"sourceId\"\r\n type=\"numericColumn\"\r\n />\r\n </AgGridReact>\r\n </div>\r\n );\r\n};\r\n\r\nSurveyData.propTypes = {\r\n data: PropTypes.arrayOf(surveyDatumPropType)\r\n};\r\n\r\nSurveyData.defaultProps = {\r\n data: []\r\n};\r\n\r\nexport default SurveyData;\r\n","import React from \"react\";\r\nimport * as PropTypes from \"prop-types\";\r\nimport {\r\n emuDatumPropType,\r\n populationDatumPropType,\r\n surveyDatumPropType\r\n} from \"../../propTypes\";\r\nimport { Route, Switch, Redirect } from \"react-router-dom\";\r\nimport { withStyles } from \"@material-ui/core/styles\";\r\nimport { withTranslation } from \"react-i18next\";\r\nimport EmuData from \"../EmuData\";\r\nimport PopulationData from \"../PopulationData\";\r\nimport NavigationTab from \"../NavigationTab\";\r\nimport SurveyData from \"../SurveyData\";\r\nimport Title from \"../Title\";\r\n\r\nconst styles = {\r\n tabPage: {\r\n margin: 10\r\n },\r\n title: {\r\n marginBottom: 20\r\n }\r\n};\r\n\r\nconst StartRunMainContent = ({ match, t, ...rest }) => (\r\n <div>\r\n <div className={rest.classes.title}>\r\n <Title title={rest.runTitle} />\r\n </div>\r\n\r\n <NavigationTab to=\"/startrun/survey\">{t(\"Survey data\")}</NavigationTab>\r\n <NavigationTab to=\"/startrun/population\">\r\n {t(\"Population data\")}\r\n </NavigationTab>\r\n <NavigationTab to=\"/startrun/emu\">{t(\"Service statistics\")}</NavigationTab>\r\n\r\n <div className={rest.classes.tabPage}>\r\n <Switch>\r\n <Route\r\n exact\r\n path={match.path}\r\n render={() => <Redirect replace to={`${match.path}/survey`} />}\r\n />\r\n <Route\r\n path={`${match.path}/survey`}\r\n render={() => <SurveyData data={rest.surveyData} />}\r\n />\r\n <Route\r\n path={`${match.path}/population`}\r\n render={() => <PopulationData data={rest.populationData} />}\r\n />\r\n <Route\r\n path={`${match.path}/emu`}\r\n render={() => <EmuData data={rest.emuData} />}\r\n />\r\n </Switch>\r\n </div>\r\n </div>\r\n);\r\n\r\nStartRunMainContent.propTypes = {\r\n runTitle: PropTypes.string,\r\n surveyData: PropTypes.arrayOf(surveyDatumPropType),\r\n populationData: PropTypes.arrayOf(populationDatumPropType),\r\n emuData: PropTypes.arrayOf(emuDatumPropType)\r\n};\r\n\r\nStartRunMainContent.defaultProps = {\r\n surveyData: [],\r\n populationData: [],\r\n emuData: []\r\n};\r\n\r\nexport default withTranslation()(withStyles(styles)(StartRunMainContent));\r\n","import React from \"react\";\r\nimport * as PropTypes from \"prop-types\";\r\nimport contentWithDrawer from \"../contentWithDrawer\";\r\nimport DrawerContent from \"./StartRunDrawerContent\";\r\nimport MainContent from \"./StartRunMainContent\";\r\nimport Notification from \"../Notification\";\r\n\r\nconst Component = contentWithDrawer(MainContent, DrawerContent);\r\n\r\nconst StartRun = ({\r\n notificationVariant,\r\n notificationOpen,\r\n notificationMessage,\r\n onCloseNotification,\r\n ...rest\r\n}) => (\r\n <div>\r\n <Component {...rest} />\r\n\r\n <Notification\r\n variant={notificationVariant}\r\n open={notificationOpen}\r\n message={notificationMessage}\r\n onClose={onCloseNotification}\r\n />\r\n </div>\r\n);\r\n\r\nStartRun.propTypes = {\r\n notificationVariant: PropTypes.string,\r\n notificationOpen: PropTypes.bool,\r\n notificationMessage: PropTypes.string,\r\n onCloseNotification: PropTypes.func.isRequired\r\n};\r\n\r\nStartRun.defaultProps = {\r\n notificationOpen: false\r\n};\r\n\r\nexport default StartRun;\r\n","import React, { Component } from \"react\";\r\nimport { defaultFirstYear, minimumYear, maximumYear } from \"../constants\";\r\nimport { getDefaultLastYear } from \"../utilities\";\r\nimport * as api from \"../api/api\";\r\nimport {\r\n filterPopulationData,\r\n filterSurveyData,\r\n normalizeDatabases,\r\n normalizeEmuData,\r\n normalizePopulationData,\r\n normalizeSurveyData\r\n} from \"../data\";\r\nimport { withErrorBoundary } from \"../errors\";\r\nimport { withTranslation } from \"react-i18next\";\r\nimport StartRun from \"../components/StartRun/StartRun\";\r\n\r\nconst createInitialState = () => {\r\n return {\r\n emuDatabaseType: \"custom\",\r\n period: {\r\n firstYear: defaultFirstYear,\r\n lastYear: getDefaultLastYear()\r\n }\r\n };\r\n};\r\n\r\nconst removeFileExtension = filename => filename.replace(/\\.[^/.]+$/, \"\");\r\n\r\nconst getDatabaseName = file => file && removeFileExtension(file.name);\r\n\r\nclass StartRunContainer extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.signal = api.getSignal();\r\n\r\n this.state = createInitialState();\r\n }\r\n\r\n setStateSafely = (state, callback) => {\r\n if (!this.unmounting) {\r\n this.setState(state, callback);\r\n }\r\n };\r\n\r\n uploadDatabase = (file, databaseType, onProgress) => {\r\n const data = new FormData();\r\n\r\n data.append(\"file\", file, file.name);\r\n\r\n return api.uploadDatabase(\r\n data,\r\n databaseType,\r\n onProgress,\r\n this.signal.token\r\n );\r\n };\r\n\r\n getCountryIntersection = (\r\n surveyDatabaseId,\r\n populationDatabaseId,\r\n emuDatabaseId\r\n ) => {\r\n if (!surveyDatabaseId || !populationDatabaseId) {\r\n return {};\r\n }\r\n\r\n const surveyDatabase = this.state.databases[surveyDatabaseId];\r\n const populationDatabase = this.state.databases[populationDatabaseId];\r\n const emuDatabase = emuDatabaseId && this.state.databases[emuDatabaseId];\r\n\r\n return Object.keys(surveyDatabase.divisions).reduce(\r\n (result, divisionNumericCode) => {\r\n const division = surveyDatabase.divisions[divisionNumericCode];\r\n\r\n if (\r\n division.isCountry &&\r\n populationDatabase.divisions[divisionNumericCode] &&\r\n (!emuDatabase || emuDatabase.divisions[divisionNumericCode])\r\n ) {\r\n result[divisionNumericCode] = division;\r\n }\r\n\r\n return result;\r\n },\r\n {}\r\n );\r\n };\r\n\r\n getRegionIntersection = (\r\n surveyDatabaseId,\r\n populationDatabaseId,\r\n emuDatabaseId\r\n ) => {\r\n if (!surveyDatabaseId || !populationDatabaseId) {\r\n return [];\r\n }\r\n\r\n const surveyRegions =\r\n this.state.databases[surveyDatabaseId].regionCodes || [];\r\n\r\n const populationRegionSet = new Set(\r\n this.state.databases[populationDatabaseId].regionCodes || []\r\n );\r\n\r\n const emuRegionSet =\r\n emuDatabaseId &&\r\n new Set(this.state.databases[emuDatabaseId].regionCodes || []);\r\n\r\n return surveyRegions.reduce((result, region) => {\r\n if (\r\n populationRegionSet.has(region) &&\r\n (!emuRegionSet || emuRegionSet.has(region))\r\n ) {\r\n result.push(region);\r\n }\r\n\r\n return result;\r\n }, []);\r\n };\r\n\r\n selectDefaultCountryOrRegion = (\r\n surveyDatabaseId,\r\n populationDatabaseId,\r\n emuDatabaseId\r\n ) => {\r\n const countries = this.getCountryIntersection(\r\n surveyDatabaseId,\r\n populationDatabaseId,\r\n emuDatabaseId\r\n );\r\n\r\n const countryNumericCodes = Object.keys(countries);\r\n\r\n const regions = this.getRegionIntersection(\r\n surveyDatabaseId,\r\n populationDatabaseId,\r\n emuDatabaseId\r\n );\r\n\r\n if (countryNumericCodes.length + regions.length === 1) {\r\n if (countryNumericCodes.length) {\r\n this.setStateSafely({\r\n selectedCountryNumericCode: parseInt(countryNumericCodes[0], 10)\r\n });\r\n } else {\r\n this.setStateSafely({\r\n selectedRegion: regions[0]\r\n });\r\n }\r\n }\r\n };\r\n\r\n createRunTitle = () => {\r\n let countryAlphaCodeOrRegion;\r\n\r\n if (this.state.selectedRegion) {\r\n countryAlphaCodeOrRegion = this.state.selectedRegion;\r\n } else if (this.state.selectedCountryNumericCode) {\r\n countryAlphaCodeOrRegion = this.state.databases[\r\n this.state.selectedSurveyDatabaseId\r\n ].divisions[this.state.selectedCountryNumericCode].alphaCode;\r\n }\r\n\r\n if (countryAlphaCodeOrRegion) {\r\n const { firstYear, lastYear } = this.state.period;\r\n\r\n return this.props.t(\r\n \"Defining run for {{countryAlphaCodeOrRegion}} during {{firstYear}}-{{lastYear}}\",\r\n {\r\n countryAlphaCodeOrRegion,\r\n firstYear,\r\n lastYear\r\n }\r\n );\r\n }\r\n };\r\n\r\n showNotification = (variant, message) => {\r\n this.setStateSafely({\r\n notificationVariant: variant,\r\n notificationOpen: true,\r\n notificationMessage: message\r\n });\r\n };\r\n\r\n onChangeSurveyDatabaseType = type => {\r\n this.setStateSafely({\r\n surveyDatabaseType: type,\r\n selectedSurveyDatabaseId: undefined,\r\n selectedCountryNumericCode: undefined,\r\n selectedRegion: undefined\r\n });\r\n };\r\n\r\n onSelectSurveyDatabase = databaseId => {\r\n this.setStateSafely({\r\n selectedSurveyDatabaseId: databaseId,\r\n selectedCountryNumericCode: undefined,\r\n selectedRegion: undefined\r\n });\r\n\r\n this.selectDefaultCountryOrRegion(\r\n databaseId,\r\n this.state.selectedPopulationDatabaseId,\r\n this.state.selectedEmuDatabaseId\r\n );\r\n };\r\n\r\n onSelectSurveyDatabaseFile = file => {\r\n debugger\r\n this.setStateSafely({\r\n uploadedSurveyDatabaseFile: file\r\n });\r\n };\r\n\r\n onUploadSurveyDatabase = () => {\r\n const file = this.state.uploadedSurveyDatabaseFile;\r\n\r\n this.setStateSafely({\r\n uploadingSurveyDatabase: true\r\n });\r\n\r\n this.uploadDatabase(file, \"survey\", this.onProgressSurveyDatabaseUpload)\r\n .then(uploadDatabaseResponse => {\r\n return api\r\n .fetchDatabases(this.signal.token)\r\n .then(fetchDatabasesResponse => {\r\n const database = uploadDatabaseResponse.data;\r\n\r\n this.setStateSafely({\r\n databases: normalizeDatabases(fetchDatabasesResponse.data),\r\n selectedSurveyDatabaseId: database.id,\r\n surveyDatabaseType: \"custom\"\r\n });\r\n });\r\n })\r\n .catch(error => {\r\n const filename = this.state.uploadedSurveyDatabaseFile.name;\r\n\r\n this.showNotification(\"error\", `Failed to upload \"${filename}\"`);\r\n\r\n throw error;\r\n })\r\n .finally(() => {\r\n this.setStateSafely({\r\n uploadedSurveyDatabaseFile: undefined,\r\n uploadingSurveyDatabase: false\r\n });\r\n });\r\n };\r\n\r\n onProgressSurveyDatabaseUpload = progressEvent => {\r\n this.setState({\r\n surveyDatabaseUploadProgress:\r\n (progressEvent.loaded / progressEvent.total) * 100\r\n });\r\n };\r\n\r\n onCancelSurveyDatabaseUpload = () => {\r\n this.setStateSafely({\r\n uploadedSurveyDatabaseFile: undefined\r\n });\r\n };\r\n\r\n onChangePopulationDatabaseType = type => {\r\n this.setStateSafely({\r\n populationDatabaseType: type,\r\n selectedPopulationDatabaseId: undefined,\r\n selectedCountryNumericCode: undefined,\r\n selectedRegion: undefined\r\n });\r\n };\r\n\r\n onSelectPopulationDatabase = databaseId => {\r\n this.setStateSafely({\r\n selectedPopulationDatabaseId: databaseId,\r\n selectedCountryNumericCode: undefined,\r\n selectedRegion: undefined\r\n });\r\n\r\n this.selectDefaultCountryOrRegion(\r\n this.state.selectedSurveyDatabaseId,\r\n databaseId,\r\n this.state.selectedEmuDatabaseId\r\n );\r\n };\r\n\r\n onSelectPopulationDatabaseFile = file => {\r\n this.setStateSafely({\r\n uploadedPopulationDatabaseFile: file\r\n });\r\n };\r\n\r\n onUploadPopulationDatabase = () => {\r\n const file = this.state.uploadedPopulationDatabaseFile;\r\n\r\n this.setStateSafely({\r\n uploadingPopulationDatabase: true\r\n });\r\n\r\n this.uploadDatabase(\r\n file,\r\n \"population\",\r\n this.onProgressPopulationDatabaseUpload\r\n )\r\n .then(uploadDatabaseResponse => {\r\n return api\r\n .fetchDatabases(this.signal.token)\r\n .then(fetchDatabasesResponse => {\r\n const database = uploadDatabaseResponse.data;\r\n\r\n this.setStateSafely({\r\n databases: normalizeDatabases(fetchDatabasesResponse.data),\r\n selectedPopulationDatabaseId: database.id,\r\n populationDatabaseType: \"custom\"\r\n });\r\n });\r\n })\r\n .catch(error => {\r\n const filename = this.state.uploadedPopulationDatabaseFile.name;\r\n\r\n this.showNotification(\"error\", `Failed to upload \"${filename}\"`);\r\n\r\n throw error;\r\n })\r\n .finally(() => {\r\n this.setStateSafely({\r\n uploadedPopulationDatabaseFile: undefined,\r\n uploadingPopulationDatabase: false\r\n });\r\n });\r\n };\r\n\r\n onProgressPopulationDatabaseUpload = progressEvent => {\r\n this.setState({\r\n populationDatabaseUploadProgress:\r\n (progressEvent.loaded / progressEvent.total) * 100\r\n });\r\n };\r\n\r\n onCancelPopulationDatabaseUpload = () => {\r\n this.setStateSafely({\r\n uploadedPopulationDatabaseFile: undefined\r\n });\r\n };\r\n\r\n onChangeEmuDatabaseType = type => {\r\n this.setStateSafely({\r\n emuDatabaseType: type,\r\n selectedEmuDatabaseId: undefined,\r\n selectedCountryNumericCode: undefined,\r\n selectedRegion: undefined\r\n });\r\n };\r\n\r\n onSelectEmuDatabase = databaseId => {\r\n this.setStateSafely({\r\n selectedEmuDatabaseId: databaseId,\r\n selectedCountryNumericCode: undefined,\r\n selectedRegion: undefined\r\n });\r\n\r\n this.selectDefaultCountryOrRegion(\r\n this.state.selectedSurveyDatabaseId,\r\n this.state.selectedPopulationDatabaseId,\r\n databaseId\r\n );\r\n };\r\n\r\n onSelectEmuDatabaseFile = file => {\r\n this.setStateSafely({\r\n uploadedEmuDatabaseFile: file\r\n });\r\n };\r\n\r\n onUploadEmuDatabase = () => {\r\n const file = this.state.uploadedEmuDatabaseFile;\r\n\r\n this.setStateSafely({\r\n uploadingEmuDatabase: true\r\n });\r\n\r\n this.uploadDatabase(file, \"emu\", this.onProgressEmuDatabaseUpload)\r\n .then(uploadDatabaseResponse => {\r\n return api\r\n .fetchDatabases(this.signal.token)\r\n .then(fetchDatabasesResponse => {\r\n const database = uploadDatabaseResponse.data;\r\n\r\n this.setStateSafely({\r\n databases: normalizeDatabases(fetchDatabasesResponse.data),\r\n selectedEmuDatabaseId: database.id,\r\n emuDatabaseType: \"custom\"\r\n });\r\n });\r\n })\r\n .catch(error => {\r\n const filename = this.state.uploadedEmuDatabaseFile.name;\r\n\r\n this.showNotification(\"error\", `Failed to upload \"${filename}\"`);\r\n\r\n throw error;\r\n })\r\n .finally(() => {\r\n this.setStateSafely({\r\n uploadedEmuDatabaseFile: undefined,\r\n uploadingEmuDatabase: false\r\n });\r\n });\r\n };\r\n\r\n onProgressEmuDatabaseUpload = progressEvent => {\r\n this.setState({\r\n emuDatabaseUploadProgress:\r\n (progressEvent.loaded / progressEvent.total) * 100\r\n });\r\n };\r\n\r\n onCancelEmuDatabaseUpload = () => {\r\n this.setStateSafely({\r\n uploadedEmuDatabaseFile: undefined\r\n });\r\n };\r\n\r\n onSelectCountry = countryNumericCode => {\r\n this.setStateSafely({\r\n selectedCountryNumericCode: countryNumericCode,\r\n selectedRegion: undefined\r\n });\r\n };\r\n\r\n onSelectRegion = region => {\r\n this.setStateSafely({\r\n selectedRegion: region\r\n });\r\n };\r\n\r\n onSelectNation = nation => {\r\n this.setStateSafely({\r\n selectedNation: nation\r\n });\r\n }\r\n\r\n onRunNameChanged = runName => {\r\n this.setStateSafely({\r\n runName\r\n });\r\n };\r\n\r\n onChangePeriod = period => {\r\n this.setStateSafely({\r\n period\r\n });\r\n };\r\n\r\n onReviewData = () => {\r\n const countryNumericCodeOrRegion =\r\n this.state.selectedRegion ||\r\n this.state.selectedCountryNumericCode.toString();\r\n\r\n this.setStateSafely({\r\n loadingTables: true\r\n });\r\n\r\n // noinspection JSCheckFunctionSignatures\r\n Promise.all([\r\n api.fetchSurveyDatabase(\r\n this.state.selectedSurveyDatabaseId,\r\n countryNumericCodeOrRegion,\r\n undefined,\r\n this.signal.token\r\n ),\r\n api.fetchPopulationDatabase(\r\n this.state.selectedPopulationDatabaseId,\r\n countryNumericCodeOrRegion,\r\n this.signal.token\r\n ),\r\n this.state.selectedEmuDatabaseId\r\n ? api.fetchEmuDatabase(\r\n this.state.selectedEmuDatabaseId,\r\n countryNumericCodeOrRegion,\r\n this.signal.token\r\n )\r\n : new Promise(resolve =>\r\n resolve({\r\n data: []\r\n })\r\n )\r\n ])\r\n .then(response => {\r\n if (!response || response.some(item => !item)) {\r\n return;\r\n }\r\n\r\n const [surveyData, populationData, emuData] = response;\r\n\r\n this.setStateSafely({\r\n surveyData: normalizeSurveyData(surveyData.data),\r\n populationData: normalizePopulationData(populationData.data),\r\n emuData: normalizeEmuData(emuData.data)\r\n });\r\n })\r\n .finally(() => {\r\n this.setStateSafely({\r\n loadingTables: false\r\n });\r\n });\r\n };\r\n\r\n onStartRun = () => {\r\n api\r\n .startRun(\r\n this.state.runName,\r\n this.state.selectedSurveyDatabaseId,\r\n this.state.selectedPopulationDatabaseId,\r\n this.state.selectedEmuDatabaseId || undefined,\r\n this.state.selectedCountryNumericCode,\r\n this.state.selectedRegion,\r\n this.state.period\r\n )\r\n .then(() => {\r\n this.props.history.push(\"/history\");\r\n });\r\n };\r\n\r\n onCloseNotification = () => {\r\n this.setStateSafely({\r\n notificationOpen: false\r\n });\r\n };\r\n\r\n componentDidMount() {\r\n this.setStateSafely({\r\n loadingData: true\r\n });\r\n\r\n api\r\n .fetchDatabases(this.signal.token)\r\n .then(response => {\r\n if (!response) {\r\n return;\r\n }\r\n\r\n this.setStateSafely({\r\n databases: normalizeDatabases(response.data)\r\n });\r\n })\r\n .finally(() => {\r\n this.setStateSafely({\r\n loadingData: false\r\n });\r\n });\r\n }\r\n\r\n componentWillUnmount() {\r\n this.unmounting = true;\r\n this.signal.cancel();\r\n }\r\n\r\n render() {\r\n const countries = this.getCountryIntersection(\r\n this.state.selectedSurveyDatabaseId,\r\n this.state.selectedPopulationDatabaseId,\r\n this.state.selectedEmuDatabaseId\r\n );\r\n\r\n const regions = this.getRegionIntersection(\r\n this.state.selectedSurveyDatabaseId,\r\n this.state.selectedPopulationDatabaseId,\r\n this.state.selectedEmuDatabaseId\r\n );\r\n\r\n const { firstYear, lastYear } = {\r\n firstYear: minimumYear,\r\n lastYear: maximumYear\r\n };\r\n\r\n const surveyData = filterSurveyData(\r\n this.state.surveyData,\r\n firstYear,\r\n lastYear\r\n );\r\n\r\n const populationData = filterPopulationData(\r\n this.state.populationData,\r\n firstYear,\r\n lastYear\r\n );\r\n\r\n return (\r\n <StartRun\r\n match={this.props.match}\r\n loadingData={this.state.loadingData}\r\n databases={this.state.databases}\r\n surveyDatabaseType={this.state.surveyDatabaseType}\r\n selectedSurveyDatabaseId={this.state.selectedSurveyDatabaseId}\r\n uploadedSurveyDatabaseName={getDatabaseName(\r\n this.state.uploadedSurveyDatabaseFile\r\n )}\r\n uploadingSurveyDatabase={this.state.uploadingSurveyDatabase}\r\n surveyDatabaseUploadProgress={this.state.surveyDatabaseUploadProgress}\r\n populationDatabaseType={this.state.populationDatabaseType}\r\n selectedPopulationDatabaseId={this.state.selectedPopulationDatabaseId}\r\n uploadedPopulationDatabaseName={getDatabaseName(\r\n this.state.uploadedPopulationDatabaseFile\r\n )}\r\n uploadingPopulationDatabase={this.state.uploadingPopulationDatabase}\r\n populationDatabaseUploadProgress={\r\n this.state.populationDatabaseUploadProgress\r\n }\r\n emuDatabaseType={this.state.emuDatabaseType}\r\n selectedEmuDatabaseId={this.state.selectedEmuDatabaseId}\r\n uploadedEmuDatabaseName={getDatabaseName(\r\n this.state.uploadedEmuDatabaseFile\r\n )}\r\n uploadingEmuDatabase={this.state.uploadingEmuDatabase}\r\n emuDatabaseUploadProgress={this.state.emuDatabaseUploadProgress}\r\n countries={countries}\r\n selectedCountryNumericCode={this.state.selectedCountryNumericCode}\r\n regions={regions}\r\n selectedRegion={this.state.selectedRegion}\r\n selectedNation={this.state.selectedNation}\r\n runName={this.state.runName}\r\n period={this.state.period}\r\n runTitle={this.createRunTitle()}\r\n loadingTables={this.state.loadingTables}\r\n surveyData={surveyData}\r\n populationData={populationData}\r\n emuData={this.state.emuData}\r\n notificationVariant={this.state.notificationVariant}\r\n notificationOpen={this.state.notificationOpen}\r\n notificationMessage={this.state.notificationMessage}\r\n onChangeSurveyDatabaseType={this.onChangeSurveyDatabaseType}\r\n onSelectSurveyDatabase={this.onSelectSurveyDatabase}\r\n onSelectSurveyDatabaseFile={this.onSelectSurveyDatabaseFile}\r\n onUploadSurveyDatabase={this.onUploadSurveyDatabase}\r\n onCancelSurveyDatabaseUpload={this.onCancelSurveyDatabaseUpload}\r\n onChangePopulationDatabaseType={this.onChangePopulationDatabaseType}\r\n onSelectPopulationDatabase={this.onSelectPopulationDatabase}\r\n onSelectPopulationDatabaseFile={this.onSelectPopulationDatabaseFile}\r\n onUploadPopulationDatabase={this.onUploadPopulationDatabase}\r\n onCancelPopulationDatabaseUpload={this.onCancelPopulationDatabaseUpload}\r\n onChangeEmuDatabaseType={this.onChangeEmuDatabaseType}\r\n onSelectEmuDatabase={this.onSelectEmuDatabase}\r\n onSelectEmuDatabaseFile={this.onSelectEmuDatabaseFile}\r\n onUploadEmuDatabase={this.onUploadEmuDatabase}\r\n onCancelEmuDatabaseUpload={this.onCancelEmuDatabaseUpload}\r\n onSelectCountry={this.onSelectCountry}\r\n onSelectRegion={this.onSelectRegion}\r\n onSelectNation={this.onSelectNation}\r\n onRunNameChanged={this.onRunNameChanged}\r\n onChangePeriod={this.onChangePeriod}\r\n onReviewData={this.onReviewData}\r\n onStartRun={this.onStartRun}\r\n onCloseNotification={this.onCloseNotification}\r\n />\r\n );\r\n }\r\n}\r\n\r\nexport default withTranslation()(withErrorBoundary(StartRunContainer));\r\n","import React from \"react\";\r\nimport * as PropTypes from \"prop-types\";\r\nimport { periodPropType } from \"../../propTypes\";\r\nimport { withStyles } from \"@material-ui/core/styles\";\r\nimport Divider from \"@material-ui/core/Divider\";\r\nimport LinearProgress from \"@material-ui/core/LinearProgress\";\r\nimport Select from \"react-select\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport PeriodSelector from \"../PeriodSelector/PeriodSelector\";\r\nimport ProgressButton from \"../ProgressButton\";\r\n\r\nconst styles = {\r\n actionButton: {\r\n display: \"inline-flex\",\r\n margin: \"10px 0\"\r\n },\r\n countrySelector: {\r\n display: \"none\"\r\n },\r\n divider: {\r\n margin: \"10px 0\"\r\n },\r\n instruction: {\r\n margin: \"10px 0\",\r\n fontWeight: \"bold\"\r\n },\r\n periodSelector: {\r\n margin: \"30px 20px 40px\",\r\n zIndex: -1\r\n },\r\n progress: {\r\n margin: \"15px 0 5px\"\r\n },\r\n select: {\r\n marginBottom: 10\r\n },\r\n stepNumber: {\r\n display: \"none\"\r\n }\r\n};\r\n\r\nconst ViewRunDrawerContent = props => {\r\n const runs = Object.entries(props.runs).map(([id, run]) => ({\r\n value: id,\r\n label: run.name\r\n }));\r\n\r\n const countries = Object.entries(props.countries)\r\n .map(([numericCode, country]) => ({\r\n value: parseInt(numericCode, 10),\r\n label: country.name\r\n }))\r\n .sort((a, b) => a.label.localeCompare(b.label));\r\n\r\n const regions = props.regions.map((region, index) => ({\r\n value: -index - 1,\r\n label: region\r\n }));\r\n\r\n const selectedRegion = regions.find(\r\n region => region.label === props.selectedRegion\r\n );\r\n\r\n const selectedRegionValue = selectedRegion && selectedRegion.value;\r\n\r\n const countriesAndRegions = countries.concat(regions);\r\n\r\n// const getPopulations = (countryCode) => {\r\n// if (!countryCode) {\r\n// return [];\r\n// }\r\n\r\n// // HACK: Need a way to determine if run is a subnationals run.\r\n// const isSubnationalRun = true;\r\n\r\n// if (isSubnationalRun) {\r\n// return [\r\n// // { value: \"Aggregated\", label: \"Aggregated\" },\r\n// { value: \"population_1\", label: \"population_1\" },\r\n// { value: \"population_2\", label: \"population_2\" },\r\n// { value: \"population_3\", label: \"population_3\" }\r\n// ] \r\n// }\r\n// else {\r\n// return [];\r\n// }\r\n// }\r\n\r\n// const selectedPopulationValue = props.selectedPopulation;\r\n// const populations = getPopulations(props.selectedCountryNumericCode);\r\n\r\n const { t } = useTranslation();\r\n\r\n return (\r\n <>\r\n {props.loadingData && (\r\n <div className={props.classes.progress}>\r\n <LinearProgress />\r\n </div>\r\n )}\r\n\r\n <div className={props.classes.instruction}>\r\n <span className={props.classes.stepNumber}>1.</span>{\" \"}\r\n {t(\"Select existing run\")}\r\n </div>\r\n\r\n <Select\r\n placeholder={t(\"Select run...\")}\r\n options={runs}\r\n value={runs.filter(({ value }) => value === props.selectedRunId)}\r\n className={props.classes.select}\r\n onChange={({ value }) => props.onSelectRun(value)}\r\n />\r\n\r\n {/* {\r\n props.selectedRunId && populations.length > 0 && (\r\n <>\r\n \r\n <div className={props.classes.instruction}>\r\n <span className={props.classes.stepNumber}>2.</span>{\" \"}\r\n {t(\"Select population\")}\r\n </div>\r\n <Select\r\n placeholder={t(\"Select population...\")}\r\n options={populations}\r\n value={populations.filter(({ value }) => value === selectedPopulationValue)}\r\n className={props.classes.select}\r\n onChange={({ value }) => props.onSelectPopulation(value)}\r\n />\r\n </>\r\n )\r\n } */}\r\n\r\n <div className={props.classes.countrySelector}>\r\n <Divider className={props.classes.divider} />\r\n\r\n <div className={props.classes.instruction}>\r\n 2. {t(\"Select country/population to view\")}\r\n </div>\r\n\r\n <Select\r\n placeholder={t(\"Select country/population...\")}\r\n options={countriesAndRegions}\r\n value={countriesAndRegions.filter(\r\n ({ value }) =>\r\n value ===\r\n (selectedRegionValue || props.selectedCountryNumericCode)\r\n )}\r\n className={props.classes.select}\r\n onChange={({ value }) => {\r\n if (value >= 0) {\r\n props.onSelectCountry(value);\r\n } else {\r\n props.onSelectRegion(\r\n regions.find(region => region.value === value).label\r\n );\r\n }\r\n }}\r\n />\r\n\r\n <Divider className={props.classes.divider} />\r\n </div>\r\n\r\n <ProgressButton\r\n variant=\"contained\"\r\n color=\"primary\"\r\n disabled={!(props.selectedCountryNumericCode || props.selectedRegion)}\r\n loading={props.loadingRun}\r\n className={props.classes.actionButton}\r\n onClick={props.onViewRun}\r\n >\r\n {t(\"View run\")}\r\n </ProgressButton>\r\n\r\n <Divider className={props.classes.divider} />\r\n\r\n <div className={props.classes.instruction}>\r\n {t(\"Select years for display/export of results\")}\r\n </div>\r\n\r\n <div className={props.classes.periodSelector}>\r\n <PeriodSelector period={props.period} onChange={props.onChangePeriod} />\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nViewRunDrawerContent.propTypes = {\r\n loadingData: PropTypes.bool,\r\n runs: PropTypes.objectOf(\r\n PropTypes.shape({\r\n name: PropTypes.string.isRequired\r\n })\r\n ),\r\n selectedRunId: PropTypes.string,\r\n countries: PropTypes.objectOf(\r\n PropTypes.shape({\r\n name: PropTypes.string.isRequired\r\n })\r\n ),\r\n selectedCountryNumericCode: PropTypes.number,\r\n regions: PropTypes.arrayOf(PropTypes.string),\r\n selectedRegion: PropTypes.string,\r\n period: periodPropType,\r\n loadingRun: PropTypes.bool,\r\n onSelectRun: PropTypes.func.isRequired,\r\n onSelectCountry: PropTypes.func.isRequired,\r\n onSelectRegion: PropTypes.func.isRequired,\r\n onViewRun: PropTypes.func.isRequired,\r\n// selectedPopulation : PropTypes.string.isRequired,\r\n// onSelectPopulation : PropTypes.func.isRequired,\r\n};\r\n\r\nViewRunDrawerContent.defaultProps = {\r\n loadingData: false,\r\n runs: {},\r\n countries: {},\r\n regions: [],\r\n loadingRun: false,\r\n};\r\n\r\nexport default withStyles(styles)(ViewRunDrawerContent);\r\n","import React from \"react\";\r\nimport * as PropTypes from \"prop-types\";\r\nimport { maritalStatusPropType } from \"../propTypes\";\r\nimport NativeSelect from \"@material-ui/core/NativeSelect\";\r\n\r\nconst SentenceMaritalStatusSelector = props => (\r\n <NativeSelect\r\n value={props.value}\r\n className={props.className}\r\n onChange={e => {\r\n props.onChange(e.target.value);\r\n }}\r\n >\r\n <option value=\"married\">married</option>\r\n <option value=\"unmarried\">unmarried</option>\r\n <option value=\"all_women\">all</option>\r\n </NativeSelect>\r\n);\r\n\r\nSentenceMaritalStatusSelector.propTypes = {\r\n value: maritalStatusPropType,\r\n className: PropTypes.string,\r\n onChange: PropTypes.func.isRequired\r\n};\r\n\r\nexport default SentenceMaritalStatusSelector;\r\n","import React from \"react\";\r\nimport * as PropTypes from \"prop-types\";\r\nimport { maritalStatusPropType } from \"../../propTypes\";\r\nimport { maximumYear, minimumYear } from \"../../constants\";\r\nimport { withStyles } from \"@material-ui/core/styles\";\r\nimport classNames from \"classnames\";\r\nimport NativeSelect from \"@material-ui/core/NativeSelect\";\r\nimport TextField from \"@material-ui/core/TextField\";\r\nimport MaritalStatusSelector from \"../SentenceMaritalStatusSelector\";\r\n\r\nconst styles = {\r\n container: {\r\n display: \"inline-flex\",\r\n flexWrap: \"wrap\",\r\n alignItems: \"baseline\"\r\n },\r\n input: {\r\n margin: \"0 0.5em\"\r\n },\r\n year: {\r\n width: \"4rem\"\r\n }\r\n};\r\n\r\nconst ProgressContraceptionMethodSpecification = props => (\r\n <div>\r\n <span>The change in the number of</span>\r\n\r\n <MaritalStatusSelector\r\n value={props.maritalStatus}\r\n className={props.classes.input}\r\n onChange={props.onSelectMaritalStatus}\r\n />\r\n\r\n <span>women</span>\r\n\r\n <NativeSelect\r\n value={props.contraceptiveMethod}\r\n className={props.classes.input}\r\n onChange={e => {\r\n props.onSelectContraceptiveMethod(e.target.value);\r\n }}\r\n >\r\n {props.contraceptiveMethods.map(contraceptiveMethod => (\r\n <option\r\n key={contraceptiveMethod.value}\r\n value={contraceptiveMethod.value}\r\n >\r\n {contraceptiveMethod.label}\r\n </option>\r\n ))}\r\n </NativeSelect>\r\n\r\n <span>from the year</span>\r\n\r\n <TextField\r\n type=\"number\"\r\n margin=\"dense\"\r\n inputProps={{\r\n min: minimumYear,\r\n max: maximumYear\r\n }}\r\n value={(props.period && props.period.firstYear) || \"\"}\r\n className={classNames(props.classes.input, props.classes.year)}\r\n onChange={e => {\r\n props.onChangeFirstYear(parseInt(e.target.value, 10) || undefined);\r\n }}\r\n onBlur={e => {\r\n props.onChangeFirstYear(\r\n parseInt(e.target.value, 10) || undefined,\r\n true\r\n );\r\n }}\r\n />\r\n\r\n <span>to the year</span>\r\n\r\n <TextField\r\n type=\"number\"\r\n margin=\"dense\"\r\n inputProps={{\r\n min: minimumYear,\r\n max: maximumYear\r\n }}\r\n value={(props.period && props.period.lastYear) || \"\"}\r\n className={classNames(props.classes.input, props.classes.year)}\r\n onChange={e => {\r\n props.onChangeLastYear(parseInt(e.target.value, 10) || undefined);\r\n }}\r\n onBlur={e => {\r\n props.onChangeLastYear(parseInt(e.target.value, 10) || undefined, true);\r\n }}\r\n />\r\n\r\n <span>is...</span>\r\n </div>\r\n);\r\n\r\nProgressContraceptionMethodSpecification.propTypes = {\r\n contraceptiveMethods: PropTypes.arrayOf(\r\n PropTypes.shape({\r\n value: PropTypes.string.isRequired,\r\n label: PropTypes.string.isRequired\r\n })\r\n ).isRequired,\r\n maritalStatus: maritalStatusPropType,\r\n contraceptiveMethod: PropTypes.string.isRequired,\r\n onSelectMaritalStatus: PropTypes.func.isRequired,\r\n onSelectContraceptiveMethod: PropTypes.func.isRequired,\r\n onChangeFirstYear: PropTypes.func.isRequired,\r\n onChangeLastYear: PropTypes.func.isRequired\r\n};\r\n\r\nexport default withStyles(styles)(ProgressContraceptionMethodSpecification);\r\n","import React from \"react\";\r\nimport * as PropTypes from \"prop-types\";\r\nimport { maritalStatusPropType } from \"../../propTypes\";\r\nimport { maximumYear, minimumYear } from \"../../constants\";\r\nimport { withStyles } from \"@material-ui/core/styles\";\r\nimport classNames from \"classnames\";\r\nimport NativeSelect from \"@material-ui/core/NativeSelect\";\r\nimport TextField from \"@material-ui/core/TextField\";\r\nimport MaritalStatusSelector from \"../SentenceMaritalStatusSelector\";\r\n\r\nconst styles = {\r\n container: {\r\n display: \"inline-flex\",\r\n flexWrap: \"wrap\",\r\n alignItems: \"baseline\"\r\n },\r\n input: {\r\n margin: \"0 0.5em\"\r\n },\r\n year: {\r\n width: \"4rem\"\r\n }\r\n};\r\n\r\nconst ProgressIndicatorSpecification = props => (\r\n <div className={props.classes.container}>\r\n <span>The change in</span>\r\n\r\n <NativeSelect\r\n value={props.indicator}\r\n className={props.classes.input}\r\n onChange={e => {\r\n props.onSelectIndicator(e.target.value);\r\n }}\r\n >\r\n {props.indicators.map(indicator => (\r\n <option key={indicator.value} value={indicator.value}>\r\n {indicator.label}\r\n </option>\r\n ))}\r\n </NativeSelect>\r\n\r\n <span>among</span>\r\n\r\n <MaritalStatusSelector\r\n value={props.maritalStatus}\r\n className={props.classes.input}\r\n onChange={props.onSelectMaritalStatus}\r\n />\r\n\r\n <span>women from the year</span>\r\n\r\n <TextField\r\n type=\"number\"\r\n margin=\"dense\"\r\n inputProps={{\r\n min: minimumYear,\r\n max: maximumYear\r\n }}\r\n value={(props.period && props.period.firstYear) || \"\"}\r\n className={classNames(props.classes.input, props.classes.year)}\r\n onChange={e => {\r\n props.onChangeFirstYear(parseInt(e.target.value, 10) || undefined);\r\n }}\r\n onBlur={e => {\r\n props.onChangeFirstYear(\r\n parseInt(e.target.value, 10) || undefined,\r\n true\r\n );\r\n }}\r\n />\r\n\r\n <span>to the year</span>\r\n\r\n <TextField\r\n type=\"number\"\r\n margin=\"dense\"\r\n inputProps={{\r\n min: minimumYear,\r\n max: maximumYear\r\n }}\r\n value={(props.period && props.period.lastYear) || \"\"}\r\n className={classNames(props.classes.input, props.classes.year)}\r\n onChange={e => {\r\n props.onChangeLastYear(parseInt(e.target.value, 10) || undefined);\r\n }}\r\n onBlur={e => {\r\n props.onChangeLastYear(parseInt(e.target.value, 10) || undefined, true);\r\n }}\r\n />\r\n\r\n <span>is...</span>\r\n </div>\r\n);\r\n\r\nProgressIndicatorSpecification.propTypes = {\r\n indicators: PropTypes.arrayOf(\r\n PropTypes.shape({\r\n value: PropTypes.string.isRequired,\r\n label: PropTypes.string.isRequired\r\n })\r\n ).isRequired,\r\n indicator: PropTypes.string.isRequired,\r\n maritalStatus: maritalStatusPropType,\r\n period: PropTypes.shape({\r\n firstYear: PropTypes.number,\r\n lastYear: PropTypes.number\r\n }),\r\n onSelectIndicator: PropTypes.func.isRequired,\r\n onSelectMaritalStatus: PropTypes.func.isRequired,\r\n onChangeFirstYear: PropTypes.func.isRequired,\r\n onChangeLastYear: PropTypes.func.isRequired\r\n};\r\n\r\nexport default withStyles(styles)(ProgressIndicatorSpecification);\r\n","import React from \"react\";\r\nimport * as PropTypes from \"prop-types\";\r\nimport { maritalStatusPropType } from \"../../propTypes\";\r\nimport { formatPercentage } from \"../../utilities\";\r\nimport { withStyles } from \"@material-ui/core/styles\";\r\nimport Divider from \"@material-ui/core/Divider\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport { withTranslation } from \"react-i18next\";\r\nimport ProgressButton from \"../ProgressButton\";\r\nimport ProgressContraceptionMethodSpecification from \"./ProgressContraceptionMethodSpecification\";\r\nimport ProgressIndicatorSpecification from \"./ProgressIndicatorSpecification\";\r\n\r\nconst styles = {\r\n answer: {\r\n fontWeight: \"bold\"\r\n },\r\n button: {\r\n display: \"table\",\r\n marginTop: 20\r\n },\r\n panel: {\r\n margin: \"20px 0 33px\"\r\n }\r\n};\r\n\r\nconst formatQuantiles = (\r\n [lower, median, upper],\r\n percentages,\r\n includeConfidenceIntervals = false\r\n) => {\r\n const formattedMedian = percentages\r\n ? formatPercentage(median, 1)\r\n : median.toFixed(0);\r\n\r\n const formattedLower = percentages\r\n ? formatPercentage(lower, 1)\r\n : lower.toFixed(0);\r\n\r\n const formattedUpper = percentages\r\n ? formatPercentage(upper, 1)\r\n : upper.toFixed(0);\r\n\r\n return includeConfidenceIntervals\r\n ? `${formattedMedian} (${formattedLower}, ${formattedUpper})`\r\n : formattedMedian;\r\n};\r\n\r\nconst Progress = ({ t, ...rest }) => (\r\n <div>\r\n <Typography variant=\"h5\">\r\n {t(\"Information for measuring progress\")}\r\n </Typography>\r\n\r\n <p>\r\n {t(\r\n \"These options tell you the difference between two selected years for median estimates of either prevalence or number of women.\"\r\n )}\r\n </p>\r\n\r\n <Divider />\r\n\r\n <div className={rest.classes.panel}>\r\n <ProgressIndicatorSpecification\r\n indicators={rest.indicators}\r\n indicator={rest.indicatorProgressParameters.indicator}\r\n maritalStatus={rest.indicatorProgressParameters.maritalStatus}\r\n period={rest.indicatorProgressParameters.period}\r\n onSelectIndicator={rest.onSelectIndicatorProgressIndicator}\r\n onSelectMaritalStatus={rest.onSelectIndicatorProgressMaritalStatus}\r\n onChangeFirstYear={rest.onChangeIndicatorProgressFirstYear}\r\n onChangeLastYear={rest.onChangeIndicatorProgressLastYear}\r\n />\r\n <p className={rest.classes.answer}>\r\n {rest.indicatorProgress != null\r\n ? formatQuantiles(rest.indicatorProgress, true)\r\n : \"???\"}\r\n </p>\r\n </div>\r\n\r\n <Divider />\r\n\r\n <div className={rest.classes.panel}>\r\n <ProgressContraceptionMethodSpecification\r\n contraceptiveMethods={rest.contraceptiveMethods}\r\n maritalStatus={rest.contraceptiveMethodProgressParameters.maritalStatus}\r\n contraceptiveMethod={\r\n rest.contraceptiveMethodProgressParameters.contraceptiveMethod\r\n }\r\n period={rest.contraceptiveMethodProgressParameters.period}\r\n onSelectMaritalStatus={\r\n rest.onSelectContraceptiveMethodProgressMaritalStatus\r\n }\r\n onSelectContraceptiveMethod={\r\n rest.onSelectContraceptiveMethodProgressContraceptiveMethod\r\n }\r\n onChangeFirstYear={rest.onChangeContraceptiveMethodProgressFirstYear}\r\n onChangeLastYear={rest.onChangeContraceptiveMethodProgressLastYear}\r\n />\r\n <p className={rest.classes.answer}>\r\n {rest.contraceptiveMethodProgress != null\r\n ? formatQuantiles(rest.contraceptiveMethodProgress, false)\r\n : \"???\"}\r\n </p>\r\n </div>\r\n\r\n <Divider />\r\n\r\n <ProgressButton\r\n variant=\"contained\"\r\n color=\"primary\"\r\n disabled={!rest.valid}\r\n loading={rest.calculating}\r\n className={rest.classes.button}\r\n onClick={rest.onCalculate}\r\n >\r\n {t(\"Calculate\")}\r\n </ProgressButton>\r\n </div>\r\n);\r\n\r\nProgress.propTypes = {\r\n indicators: PropTypes.arrayOf(\r\n PropTypes.shape({\r\n value: PropTypes.string.isRequired,\r\n label: PropTypes.string.isRequired\r\n })\r\n ).isRequired,\r\n contraceptiveMethods: PropTypes.arrayOf(\r\n PropTypes.shape({\r\n value: PropTypes.string.isRequired,\r\n label: PropTypes.string.isRequired\r\n })\r\n ).isRequired,\r\n indicatorProgressParameters: PropTypes.shape({\r\n indicator: PropTypes.string.isRequired,\r\n maritalStatus: maritalStatusPropType,\r\n period: PropTypes.shape({\r\n firstYear: PropTypes.number,\r\n lastYear: PropTypes.number\r\n })\r\n }).isRequired,\r\n indicatorProgress: PropTypes.arrayOf(PropTypes.number),\r\n contraceptiveMethodProgressParameters: PropTypes.shape({\r\n maritalStatus: maritalStatusPropType,\r\n contraceptiveMethod: PropTypes.string.isRequired,\r\n period: PropTypes.shape({\r\n firstYear: PropTypes.number,\r\n lastYear: PropTypes.number\r\n })\r\n }).isRequired,\r\n contraceptiveMethodProgress: PropTypes.arrayOf(PropTypes.number),\r\n valid: PropTypes.bool.isRequired,\r\n calculating: PropTypes.bool,\r\n onSelectIndicatorProgressIndicator: PropTypes.func.isRequired,\r\n onSelectIndicatorProgressMaritalStatus: PropTypes.func.isRequired,\r\n onChangeIndicatorProgressFirstYear: PropTypes.func.isRequired,\r\n onChangeIndicatorProgressLastYear: PropTypes.func.isRequired,\r\n onSelectContraceptiveMethodProgressMaritalStatus: PropTypes.func.isRequired,\r\n onSelectContraceptiveMethodProgressContraceptiveMethod:\r\n PropTypes.func.isRequired,\r\n onChangeContraceptiveMethodProgressFirstYear: PropTypes.func.isRequired,\r\n onChangeContraceptiveMethodProgressLastYear: PropTypes.func.isRequired,\r\n onCalculate: PropTypes.func.isRequired\r\n};\r\n\r\nProgress.defaultProps = {\r\n calculating: false\r\n};\r\n\r\nexport default withTranslation()(withStyles(styles)(Progress));\r\n","import React, { Component } from \"react\";\r\nimport * as PropTypes from \"prop-types\";\r\nimport { contraceptiveMethods, indicators } from \"../constants\";\r\nimport { trimYearToRange } from \"../utilities\";\r\nimport * as api from \"../api/api\";\r\nimport Progress from \"../components/Progress/Progress\";\r\n\r\nconst createInitialState = () => {\r\n return {\r\n indicatorProgressParameters: {\r\n indicator: indicators[0].value,\r\n maritalStatus: \"married\"\r\n },\r\n contraceptiveMethodProgressParameters: {\r\n maritalStatus: \"married\",\r\n contraceptiveMethod: contraceptiveMethods[0].value\r\n }\r\n };\r\n};\r\n\r\nconst validatePeriod = period =>\r\n period &&\r\n period.firstYear &&\r\n period.lastYear &&\r\n period.firstYear <= period.lastYear;\r\n\r\nconst createPayload = state => {\r\n const payload = {};\r\n\r\n if (validatePeriod(state.indicatorProgressParameters.period)) {\r\n payload.indicatorProgressParameters = state.indicatorProgressParameters;\r\n }\r\n\r\n if (validatePeriod(state.contraceptiveMethodProgressParameters.period)) {\r\n payload.contraceptiveMethodProgressParameters =\r\n state.contraceptiveMethodProgressParameters;\r\n }\r\n\r\n return payload;\r\n};\r\n\r\nclass ProgressContainer extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.signal = api.getSignal();\r\n\r\n this.state = createInitialState();\r\n }\r\n\r\n setStateSafely = (state, callback) => {\r\n if (!this.unmounting) {\r\n this.setState(state, callback);\r\n }\r\n };\r\n\r\n onSelectIndicatorProgressIndicator = indicator => {\r\n this.setStateSafely({\r\n indicatorProgressParameters: {\r\n ...this.state.indicatorProgressParameters,\r\n indicator\r\n }\r\n });\r\n };\r\n\r\n onSelectIndicatorProgressMaritalStatus = maritalStatus => {\r\n this.setStateSafely({\r\n indicatorProgressParameters: {\r\n ...this.state.indicatorProgressParameters,\r\n maritalStatus\r\n }\r\n });\r\n };\r\n\r\n onChangeIndicatorProgressFirstYear = (firstYear, enforceRange) => {\r\n firstYear = trimYearToRange(firstYear, enforceRange);\r\n\r\n this.setStateSafely({\r\n indicatorProgressParameters: {\r\n ...this.state.indicatorProgressParameters,\r\n period: {\r\n ...this.state.indicatorProgressParameters.period,\r\n firstYear\r\n }\r\n }\r\n });\r\n };\r\n\r\n onChangeIndicatorProgressLastYear = (lastYear, enforceRange) => {\r\n lastYear = trimYearToRange(lastYear, enforceRange);\r\n\r\n this.setStateSafely({\r\n indicatorProgressParameters: {\r\n ...this.state.indicatorProgressParameters,\r\n period: {\r\n ...this.state.indicatorProgressParameters.period,\r\n lastYear\r\n }\r\n }\r\n });\r\n };\r\n\r\n onSelectContraceptiveMethodProgressMaritalStatus = maritalStatus => {\r\n this.setStateSafely({\r\n contraceptiveMethodProgressParameters: {\r\n ...this.state.contraceptiveMethodProgressParameters,\r\n maritalStatus\r\n }\r\n });\r\n };\r\n\r\n onSelectContraceptiveMethodProgressContraceptiveMethod = contraceptiveMethod => {\r\n this.setStateSafely({\r\n contraceptiveMethodProgressParameters: {\r\n ...this.state.contraceptiveMethodProgressParameters,\r\n contraceptiveMethod\r\n }\r\n });\r\n };\r\n\r\n onChangeContraceptiveMethodProgressFirstYear = (firstYear, enforceRange) => {\r\n firstYear = trimYearToRange(firstYear, enforceRange);\r\n\r\n this.setStateSafely({\r\n contraceptiveMethodProgressParameters: {\r\n ...this.state.contraceptiveMethodProgressParameters,\r\n period: {\r\n ...this.state.contraceptiveMethodProgressParameters.period,\r\n firstYear\r\n }\r\n }\r\n });\r\n };\r\n\r\n onChangeContraceptiveMethodProgressLastYear = (lastYear, enforceRange) => {\r\n lastYear = trimYearToRange(lastYear, enforceRange);\r\n\r\n this.setStateSafely({\r\n contraceptiveMethodProgressParameters: {\r\n ...this.state.contraceptiveMethodProgressParameters,\r\n period: {\r\n ...this.state.contraceptiveMethodProgressParameters.period,\r\n lastYear\r\n }\r\n }\r\n });\r\n };\r\n\r\n onCalculate = () => {\r\n this.setStateSafely({\r\n calculating: true\r\n });\r\n\r\n const countryNumericCodeOrRegion =\r\n this.props.countryNumericCode || this.props.region;\r\n\r\n api\r\n .calculateProgress(\r\n this.props.runId,\r\n countryNumericCodeOrRegion,\r\n createPayload(this.state),\r\n this.signal.token\r\n )\r\n .then(response => {\r\n if (!response) {\r\n return;\r\n }\r\n this.setStateSafely({\r\n ...response.data\r\n });\r\n })\r\n .finally(() => {\r\n this.setStateSafely({\r\n calculating: false\r\n });\r\n });\r\n };\r\n\r\n componentWillUnmount() {\r\n this.unmounting = true;\r\n this.signal.cancel();\r\n }\r\n\r\n render() {\r\n return (\r\n <Progress\r\n indicators={indicators}\r\n contraceptiveMethods={contraceptiveMethods}\r\n indicatorProgressParameters={this.state.indicatorProgressParameters}\r\n indicatorProgress={this.state.indicatorProgress}\r\n contraceptiveMethodProgressParameters={\r\n this.state.contraceptiveMethodProgressParameters\r\n }\r\n contraceptiveMethodProgress={this.state.contraceptiveMethodProgress}\r\n valid={\r\n (!!this.props.countryNumericCode || !!this.props.region) &&\r\n Object.keys(createPayload(this.state)).length > 0\r\n }\r\n calculating={this.state.calculating}\r\n onSelectIndicatorProgressIndicator={\r\n this.onSelectIndicatorProgressIndicator\r\n }\r\n onSelectIndicatorProgressMaritalStatus={\r\n this.onSelectIndicatorProgressMaritalStatus\r\n }\r\n onChangeIndicatorProgressFirstYear={\r\n this.onChangeIndicatorProgressFirstYear\r\n }\r\n onChangeIndicatorProgressLastYear={\r\n this.onChangeIndicatorProgressLastYear\r\n }\r\n onSelectContraceptiveMethodProgressMaritalStatus={\r\n this.onSelectContraceptiveMethodProgressMaritalStatus\r\n }\r\n onSelectContraceptiveMethodProgressContraceptiveMethod={\r\n this.onSelectContraceptiveMethodProgressContraceptiveMethod\r\n }\r\n onChangeContraceptiveMethodProgressFirstYear={\r\n this.onChangeContraceptiveMethodProgressFirstYear\r\n }\r\n onChangeContraceptiveMethodProgressLastYear={\r\n this.onChangeContraceptiveMethodProgressLastYear\r\n }\r\n onCalculate={this.onCalculate}\r\n />\r\n );\r\n }\r\n}\r\n\r\nProgressContainer.propTypes = {\r\n runId: PropTypes.string,\r\n countryNumericCode: PropTypes.number,\r\n region: PropTypes.string\r\n};\r\n\r\nexport default ProgressContainer;\r\n","import React from \"react\";\r\nimport * as PropTypes from \"prop-types\";\r\nimport { maximumYear, minimumYear } from \"../../constants\";\r\nimport {\r\n directionPropType,\r\n labeledValuePropType,\r\n maritalStatusPropType\r\n} from \"../../propTypes\";\r\nimport { withStyles } from \"@material-ui/core/styles\";\r\nimport classNames from \"classnames\";\r\nimport NativeSelect from \"@material-ui/core/NativeSelect\";\r\nimport TextField from \"@material-ui/core/TextField\";\r\nimport MaritalStatusSelector from \"../SentenceMaritalStatusSelector\";\r\n\r\nconst styles = {\r\n container: {\r\n display: \"inline-flex\",\r\n flexWrap: \"wrap\",\r\n alignItems: \"baseline\"\r\n },\r\n input: {\r\n margin: \"0 0.5em\"\r\n },\r\n probability: {\r\n width: \"5rem\"\r\n },\r\n year: {\r\n width: \"4rem\"\r\n }\r\n};\r\n\r\nconst TargetsIndicatorLevelSpecification = props => (\r\n <div className={props.classes.container}>\r\n <span>What target of</span>\r\n\r\n <NativeSelect\r\n value={props.indicator}\r\n className={props.classes.input}\r\n onChange={e => {\r\n props.onSelectIndicator(e.target.value);\r\n }}\r\n >\r\n {props.indicators.map(indicator => (\r\n <option key={indicator.value} value={indicator.value}>\r\n {indicator.label}\r\n </option>\r\n ))}\r\n </NativeSelect>\r\n\r\n <span>among</span>\r\n\r\n <MaritalStatusSelector\r\n value={props.maritalStatus}\r\n className={props.classes.input}\r\n onChange={props.onSelectMaritalStatus}\r\n />\r\n\r\n <span>women in the year</span>\r\n\r\n <TextField\r\n type=\"number\"\r\n margin=\"dense\"\r\n inputProps={{\r\n min: minimumYear,\r\n max: maximumYear\r\n }}\r\n value={props.year || \"\"}\r\n className={classNames(props.classes.input, props.classes.year)}\r\n onChange={e => {\r\n props.onChangeYear(parseInt(e.target.value, 10) || undefined);\r\n }}\r\n onBlur={e => {\r\n props.onChangeYear(parseInt(e.target.value, 10) || undefined, true);\r\n }}\r\n />\r\n\r\n <span>corresponds to an attainment probability of</span>\r\n\r\n <TextField\r\n value={props.probability || \"\"}\r\n margin=\"dense\"\r\n className={classNames(props.classes.input, props.classes.probability)}\r\n onChange={e => {\r\n props.onChangeProbability(e.target.value || undefined);\r\n }}\r\n />\r\n\r\n <span>\r\n where attainment probability refers to the probability of an outcome\r\n </span>\r\n\r\n <NativeSelect\r\n value={props.direction}\r\n className={props.classes.input}\r\n onChange={e => {\r\n props.onSelectDirection(e.target.value);\r\n }}\r\n >\r\n <option value=\"greaterThan\">greater</option>\r\n <option value=\"lessThan\">smaller</option>\r\n </NativeSelect>\r\n\r\n <span>than the target value?</span>\r\n </div>\r\n);\r\n\r\nTargetsIndicatorLevelSpecification.propTypes = {\r\n indicators: PropTypes.arrayOf(labeledValuePropType).isRequired,\r\n indicator: PropTypes.string.isRequired,\r\n maritalStatus: maritalStatusPropType,\r\n year: PropTypes.number,\r\n probability: PropTypes.string,\r\n direction: directionPropType,\r\n level: PropTypes.number,\r\n onSelectIndicator: PropTypes.func.isRequired,\r\n onSelectMaritalStatus: PropTypes.func.isRequired,\r\n onChangeYear: PropTypes.func.isRequired,\r\n onChangeProbability: PropTypes.func.isRequired,\r\n onSelectDirection: PropTypes.func.isRequired\r\n};\r\n\r\nexport default withStyles(styles)(TargetsIndicatorLevelSpecification);\r\n","import React from \"react\";\r\nimport * as PropTypes from \"prop-types\";\r\nimport {\r\n directionPropType,\r\n labeledValuePropType,\r\n maritalStatusPropType,\r\n} from \"../../propTypes\";\r\nimport { maximumYear, minimumYear } from \"../../constants\";\r\nimport { withStyles } from \"@material-ui/core/styles\";\r\nimport classNames from \"classnames\";\r\nimport Input from \"@material-ui/core/Input\";\r\nimport InputAdornment from \"@material-ui/core/InputAdornment\";\r\nimport NativeSelect from \"@material-ui/core/NativeSelect\";\r\nimport MaritalStatusSelector from \"../SentenceMaritalStatusSelector\";\r\n\r\nconst styles = {\r\n container: {\r\n display: \"inline-flex\",\r\n flexWrap: \"wrap\",\r\n alignItems: \"baseline\",\r\n },\r\n input: {\r\n margin: \"0 0.5em\",\r\n },\r\n percentage: {\r\n width: \"5rem\",\r\n },\r\n year: {\r\n width: \"4rem\",\r\n },\r\n};\r\n\r\nconst TargetsIndicatorProbabilitySpecification = (props) => (\r\n <div className={props.classes.container}>\r\n <span>What is the probability that</span>\r\n\r\n <NativeSelect\r\n value={props.indicator}\r\n className={props.classes.input}\r\n onChange={(e) => {\r\n props.onSelectIndicator(e.target.value);\r\n }}\r\n >\r\n {props.indicators.map((indicator) => (\r\n <option key={indicator.value} value={indicator.value}>\r\n {indicator.label}\r\n </option>\r\n ))}\r\n </NativeSelect>\r\n\r\n <span>among</span>\r\n\r\n <MaritalStatusSelector\r\n value={props.maritalStatus}\r\n className={props.classes.input}\r\n onChange={props.onSelectMaritalStatus}\r\n />\r\n\r\n <span>women in the year</span>\r\n\r\n <Input\r\n type=\"number\"\r\n margin=\"dense\"\r\n inputProps={{\r\n min: minimumYear,\r\n max: maximumYear,\r\n }}\r\n value={props.year || \"\"}\r\n className={classNames(props.classes.input, props.classes.year)}\r\n onChange={(e) => {\r\n props.onChangeYear(parseInt(e.target.value, 10) || undefined);\r\n }}\r\n onBlur={(e) => {\r\n props.onChangeYear(parseInt(e.target.value, 10) || undefined, true);\r\n }}\r\n />\r\n\r\n <span>is</span>\r\n\r\n <NativeSelect\r\n value={props.direction}\r\n className={props.classes.input}\r\n onChange={(e) => {\r\n props.onSelectDirection(e.target.value);\r\n }}\r\n >\r\n <option value=\"greaterThan\">above</option>\r\n <option value=\"lessThan\">below</option>\r\n </NativeSelect>\r\n\r\n <Input\r\n type=\"number\"\r\n margin=\"dense\"\r\n inputProps={{\r\n min: 0,\r\n max: 100,\r\n }}\r\n endAdornment={<InputAdornment position=\"start\">%</InputAdornment>}\r\n value={props.level || \"\"}\r\n className={classNames(props.classes.input, props.classes.percentage)}\r\n onChange={(e) => {\r\n props.onChangeLevel(parseFloat(e.target.value) || undefined);\r\n }}\r\n />\r\n\r\n <span>?</span>\r\n </div>\r\n);\r\n\r\nTargetsIndicatorProbabilitySpecification.propTypes = {\r\n indicators: PropTypes.arrayOf(labeledValuePropType).isRequired,\r\n indicator: PropTypes.string.isRequired,\r\n maritalStatus: maritalStatusPropType,\r\n year: PropTypes.number,\r\n direction: directionPropType,\r\n level: PropTypes.number,\r\n probability: PropTypes.number,\r\n onSelectIndicator: PropTypes.func.isRequired,\r\n onSelectMaritalStatus: PropTypes.func.isRequired,\r\n onChangeYear: PropTypes.func.isRequired,\r\n onSelectDirection: PropTypes.func.isRequired,\r\n onChangeLevel: PropTypes.func.isRequired,\r\n};\r\n\r\nexport default withStyles(styles)(TargetsIndicatorProbabilitySpecification);\r\n","import React from \"react\";\r\nimport * as PropTypes from \"prop-types\";\r\nimport { maximumYear, minimumYear } from \"../../constants\";\r\nimport { withStyles } from \"@material-ui/core/styles\";\r\nimport classNames from \"classnames\";\r\nimport NativeSelect from \"@material-ui/core/NativeSelect\";\r\nimport TextField from \"@material-ui/core/TextField\";\r\nimport MaritalStatusSelector from \"../SentenceMaritalStatusSelector\";\r\nimport {\r\n deltaPropType,\r\n directionPropType,\r\n maritalStatusPropType\r\n} from \"../../propTypes\";\r\n\r\nconst styles = {\r\n container: {\r\n display: \"inline-flex\",\r\n flexWrap: \"wrap\",\r\n alignItems: \"baseline\"\r\n },\r\n input: {\r\n margin: \"0 0.5em\"\r\n },\r\n probability: {\r\n width: \"5rem\"\r\n },\r\n year: {\r\n width: \"4rem\"\r\n }\r\n};\r\n\r\nconst TargetsPopulationLevelSpecification = props => (\r\n <div className={props.classes.container}>\r\n <span>What target of</span>\r\n\r\n <NativeSelect\r\n value={props.delta}\r\n className={props.classes.input}\r\n onChange={e => {\r\n props.onSelectDelta(e.target.value);\r\n }}\r\n >\r\n <option value=\"total\">total</option>\r\n <option value=\"additional\">additional</option>\r\n </NativeSelect>\r\n\r\n {props.delta === \"additional\" && (\r\n <>\r\n <span>(relative to the year</span>\r\n\r\n <TextField\r\n type=\"number\"\r\n margin=\"dense\"\r\n inputProps={{\r\n min: minimumYear,\r\n max: maximumYear\r\n }}\r\n value={props.relativeToYear || \"\"}\r\n className={classNames(props.classes.input, props.classes.year)}\r\n onChange={e => {\r\n props.onChangeRelativeToYear(\r\n parseInt(e.target.value, 10) || undefined\r\n );\r\n }}\r\n onBlur={e => {\r\n props.onChangeRelativeToYear(\r\n parseInt(e.target.value, 10) || undefined,\r\n true\r\n );\r\n }}\r\n />\r\n </>\r\n )}\r\n\r\n <span>{`${props.delta === \"additional\" ? \") \" : \"\"}number of`}</span>\r\n\r\n <MaritalStatusSelector\r\n value={props.maritalStatus}\r\n className={props.classes.input}\r\n onChange={props.onSelectMaritalStatus}\r\n />\r\n\r\n <span>women</span>\r\n\r\n <NativeSelect\r\n value={props.contraceptiveMethod}\r\n className={props.classes.input}\r\n onChange={e => {\r\n props.onSelectContraceptiveMethod(e.target.value);\r\n }}\r\n >\r\n {props.contraceptiveMethods.map(indicator => (\r\n <option key={indicator.value} value={indicator.value}>\r\n {indicator.label}\r\n </option>\r\n ))}\r\n </NativeSelect>\r\n\r\n <span>in the year</span>\r\n\r\n <TextField\r\n type=\"number\"\r\n margin=\"dense\"\r\n inputProps={{\r\n min: minimumYear,\r\n max: maximumYear\r\n }}\r\n value={props.year || \"\"}\r\n className={classNames(props.classes.input, props.classes.year)}\r\n onChange={e => {\r\n props.onChangeYear(parseInt(e.target.value, 10) || undefined);\r\n }}\r\n onBlur={e => {\r\n props.onChangeYear(parseInt(e.target.value, 10) || undefined, true);\r\n }}\r\n />\r\n\r\n <span>corresponds to an attainment probability of</span>\r\n\r\n <TextField\r\n value={props.probability || \"\"}\r\n margin=\"dense\"\r\n className={classNames(props.classes.input, props.classes.probability)}\r\n onChange={e => {\r\n props.onChangeProbability(e.target.value || undefined);\r\n }}\r\n />\r\n\r\n <span>\r\n where attainment probability refers to the probability of an outcome\r\n </span>\r\n\r\n <NativeSelect\r\n value={props.direction}\r\n className={props.classes.input}\r\n onChange={e => {\r\n props.onSelectDirection(e.target.value);\r\n }}\r\n >\r\n <option value=\"greaterThan\">greater</option>\r\n <option value=\"lessThan\">smaller</option>\r\n </NativeSelect>\r\n\r\n <span>than the target value?</span>\r\n </div>\r\n);\r\n\r\nTargetsPopulationLevelSpecification.propTypes = {\r\n contraceptiveMethods: PropTypes.arrayOf(\r\n PropTypes.shape({\r\n value: PropTypes.string.isRequired,\r\n label: PropTypes.string.isRequired\r\n })\r\n ).isRequired,\r\n delta: deltaPropType,\r\n relativeToYear: PropTypes.number,\r\n maritalStatus: maritalStatusPropType,\r\n contraceptiveMethod: PropTypes.string.isRequired,\r\n year: PropTypes.number,\r\n probability: PropTypes.string,\r\n direction: directionPropType,\r\n level: PropTypes.number,\r\n onSelectDelta: PropTypes.func.isRequired,\r\n onSelectMaritalStatus: PropTypes.func.isRequired,\r\n onChangeRelativeToYear: PropTypes.func.isRequired,\r\n onSelectContraceptiveMethod: PropTypes.func.isRequired,\r\n onChangeYear: PropTypes.func.isRequired,\r\n onChangeProbability: PropTypes.func.isRequired,\r\n onSelectDirection: PropTypes.func.isRequired\r\n};\r\n\r\nexport default withStyles(styles)(TargetsPopulationLevelSpecification);\r\n","import React from \"react\";\r\nimport * as PropTypes from \"prop-types\";\r\nimport {\r\n deltaPropType,\r\n directionPropType,\r\n maritalStatusPropType\r\n} from \"../../propTypes\";\r\nimport { maximumYear, minimumYear } from \"../../constants\";\r\nimport { withStyles } from \"@material-ui/core/styles\";\r\nimport classNames from \"classnames\";\r\nimport NativeSelect from \"@material-ui/core/NativeSelect\";\r\nimport TextField from \"@material-ui/core/TextField\";\r\nimport MaritalStatusSelector from \"../SentenceMaritalStatusSelector\";\r\n\r\nconst styles = {\r\n container: {\r\n display: \"inline-flex\",\r\n flexWrap: \"wrap\",\r\n alignItems: \"baseline\"\r\n },\r\n input: {\r\n margin: \"0 0.5em\"\r\n },\r\n level: {\r\n width: \"8rem\"\r\n },\r\n year: {\r\n width: \"4rem\"\r\n }\r\n};\r\n\r\nconst TargetsPopulationProbabilitySpecification = props => (\r\n <div className={props.classes.container}>\r\n <span>What is the probability that the</span>\r\n\r\n <NativeSelect\r\n value={props.delta}\r\n className={props.classes.input}\r\n onChange={e => {\r\n props.onSelectDelta(e.target.value);\r\n }}\r\n >\r\n <option value=\"total\">total</option>\r\n <option value=\"additional\">additional</option>\r\n </NativeSelect>\r\n\r\n {props.delta === \"additional\" && (\r\n <>\r\n <span>(relative to the year</span>\r\n\r\n <TextField\r\n type=\"number\"\r\n margin=\"dense\"\r\n inputProps={{\r\n min: minimumYear,\r\n max: maximumYear\r\n }}\r\n value={props.relativeToYear || \"\"}\r\n className={classNames(props.classes.input, props.classes.year)}\r\n onChange={e => {\r\n props.onChangeRelativeToYear(\r\n parseInt(e.target.value, 10) || undefined\r\n );\r\n }}\r\n onBlur={e => {\r\n props.onChangeRelativeToYear(\r\n parseInt(e.target.value, 10) || undefined,\r\n true\r\n );\r\n }}\r\n />\r\n </>\r\n )}\r\n\r\n <span>{`${props.delta === \"additional\" ? \") \" : \"\"}number of`}</span>\r\n\r\n <MaritalStatusSelector\r\n value={props.maritalStatus}\r\n className={props.classes.input}\r\n onChange={props.onSelectMaritalStatus}\r\n />\r\n\r\n <span>women</span>\r\n\r\n <NativeSelect\r\n value={props.contraceptiveMethod}\r\n className={props.classes.input}\r\n onChange={e => {\r\n props.onSelectContraceptiveMethod(e.target.value);\r\n }}\r\n >\r\n {props.contraceptiveMethods.map(indicator => (\r\n <option key={indicator.value} value={indicator.value}>\r\n {indicator.label}\r\n </option>\r\n ))}\r\n </NativeSelect>\r\n\r\n <span>in the year</span>\r\n\r\n <TextField\r\n type=\"number\"\r\n margin=\"dense\"\r\n inputProps={{\r\n min: minimumYear,\r\n max: maximumYear\r\n }}\r\n value={props.year || \"\"}\r\n className={classNames(props.classes.input, props.classes.year)}\r\n onChange={e => {\r\n props.onChangeYear(parseInt(e.target.value, 10) || undefined);\r\n }}\r\n onBlur={e => {\r\n props.onChangeYear(parseInt(e.target.value, 10) || undefined, true);\r\n }}\r\n />\r\n\r\n <span>is</span>\r\n\r\n <NativeSelect\r\n value={props.direction}\r\n className={props.classes.input}\r\n onChange={e => {\r\n props.onSelectrDirection(e.target.value);\r\n }}\r\n >\r\n <option value=\"greaterThan\">above</option>\r\n <option value=\"lessThan\">below</option>\r\n </NativeSelect>\r\n\r\n <TextField\r\n type=\"number\"\r\n margin=\"dense\"\r\n inputProps={{\r\n min: 0\r\n }}\r\n value={props.level || \"\"}\r\n className={classNames(props.classes.input, props.classes.level)}\r\n onChange={e => {\r\n props.onChangeLevel(e.target.value || undefined);\r\n }}\r\n />\r\n\r\n <span>?</span>\r\n </div>\r\n);\r\n\r\nTargetsPopulationProbabilitySpecification.propTypes = {\r\n contraceptiveMethods: PropTypes.arrayOf(\r\n PropTypes.shape({\r\n value: PropTypes.string.isRequired,\r\n label: PropTypes.string.isRequired\r\n })\r\n ).isRequired,\r\n delta: deltaPropType,\r\n relativeToYear: PropTypes.number,\r\n maritalStatus: maritalStatusPropType,\r\n contraceptiveMethod: PropTypes.string.isRequired,\r\n year: PropTypes.number,\r\n level: PropTypes.number,\r\n direction: directionPropType,\r\n probability: PropTypes.number,\r\n onSelectDelta: PropTypes.func.isRequired,\r\n onChangeRelativeToYear: PropTypes.func.isRequired,\r\n onSelectMaritalStatus: PropTypes.func.isRequired,\r\n onSelectContraceptiveMethod: PropTypes.func.isRequired,\r\n onChangeYear: PropTypes.func.isRequired,\r\n onSelectDirection: PropTypes.func.isRequired,\r\n onChangeLevel: PropTypes.func.isRequired\r\n};\r\n\r\nexport default withStyles(styles)(TargetsPopulationProbabilitySpecification);\r\n","import React from \"react\";\r\nimport * as PropTypes from \"prop-types\";\r\nimport {\r\n deltaPropType,\r\n directionPropType,\r\n maritalStatusPropType,\r\n} from \"../../propTypes\";\r\nimport { withStyles } from \"@material-ui/core/styles\";\r\nimport Divider from \"@material-ui/core/Divider\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport { withTranslation } from \"react-i18next\";\r\nimport ProgressButton from \"../ProgressButton\";\r\nimport TargetsIndicatorLevelSpecification from \"./TargetsIndicatorLevelSpecification\";\r\nimport TargetsIndicatorProbabilitySpecification from \"./TargetsIndicatorProbabilitySpecification\";\r\nimport TargetsPopulationLevelSpecification from \"./TargetsPopulationLevelSpecification\";\r\nimport TargetsPopulationProbabilitySpecification from \"./TargetsPopulationProbabilitySpecification\";\r\n\r\nconst styles = {\r\n answer: {\r\n fontWeight: \"bold\",\r\n },\r\n button: {\r\n display: \"table\",\r\n marginTop: 20,\r\n },\r\n panel: {\r\n margin: \"20px 0 33px\",\r\n },\r\n};\r\n\r\nconst Targets = ({ t, ...rest }) => (\r\n <div>\r\n <Typography variant=\"h5\">{t(\"Information for target setting\")}</Typography>\r\n\r\n <p>\r\n {t(\r\n \"Select entries below to find a probability associated with a given level of an indicator of interest and vice versa.\"\r\n )}\r\n </p>\r\n\r\n <Divider />\r\n\r\n <p>\r\n {t(\r\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.\"\r\n )}\r\n </p>\r\n\r\n <div className={rest.classes.panel}>\r\n <TargetsIndicatorProbabilitySpecification\r\n indicators={rest.indicators}\r\n indicator={rest.indicatorProbabilityParameters.indicator}\r\n maritalStatus={rest.indicatorProbabilityParameters.maritalStatus}\r\n year={rest.indicatorProbabilityParameters.year}\r\n direction={rest.indicatorProbabilityParameters.direction}\r\n level={rest.indicatorProbabilityParameters.level}\r\n probability={rest.indicatorProbabilityParameters.probability}\r\n onSelectIndicator={rest.onSelectIndicatorProbabilityIndicator}\r\n onSelectMaritalStatus={rest.onSelectIndicatorProbabilityMaritalStatus}\r\n onChangeYear={rest.onChangeIndicatorProbabilityYear}\r\n onSelectDirection={rest.onSelectIndicatorProbabilityDirection}\r\n onChangeLevel={rest.onChangeIndicatorProbabilityLevel}\r\n />\r\n <p className={rest.classes.answer}>\r\n The probability is{\" \"}\r\n {rest.indicatorProbability != null\r\n ? `${(rest.indicatorProbability * 100).toFixed(0)}%`\r\n : \"???\"}\r\n </p>\r\n </div>\r\n\r\n <Divider />\r\n\r\n <p>\r\n {t(\r\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.'\r\n )}\r\n </p>\r\n\r\n <div className={rest.classes.panel}>\r\n <TargetsIndicatorLevelSpecification\r\n indicators={rest.indicators}\r\n indicator={rest.indicatorLevelParameters.indicator}\r\n maritalStatus={rest.indicatorLevelParameters.maritalStatus}\r\n year={rest.indicatorLevelParameters.year}\r\n probability={rest.indicatorLevelParameters.probability}\r\n direction={rest.indicatorLevelParameters.direction}\r\n level={rest.indicatorLevelParameters.level}\r\n onSelectIndicator={rest.onSelectIndicatorLevelIndicator}\r\n onSelectMaritalStatus={rest.onSelectIndicatorLevelMaritalStatus}\r\n onChangeYear={rest.onChangeIndicatorLevelYear}\r\n onChangeProbability={rest.onChangeIndicatorLevelProbability}\r\n onSelectDirection={rest.onSelectIndicatorLevelDirection}\r\n />\r\n <p className={rest.classes.answer}>\r\n {rest.indicatorLevel != null\r\n ? `${(rest.indicatorLevel * 100).toFixed(2)}%`\r\n : \"???\"}\r\n </p>\r\n </div>\r\n\r\n <Divider />\r\n\r\n <p>\r\n {t(\r\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.\"\r\n )}\r\n </p>\r\n\r\n <div className={rest.classes.panel}>\r\n <TargetsPopulationProbabilitySpecification\r\n contraceptiveMethods={rest.contraceptiveMethods}\r\n delta={rest.populationProbabilityParameters.delta}\r\n maritalStatus={rest.populationProbabilityParameters.maritalStatus}\r\n relativeToYear={rest.populationProbabilityParameters.relativeToYear}\r\n contraceptiveMethod={\r\n rest.populationProbabilityParameters.contraceptiveMethod\r\n }\r\n year={rest.populationProbabilityParameters.year}\r\n direction={rest.populationProbabilityParameters.direction}\r\n level={rest.populationProbabilityParameters.level}\r\n probability={rest.populationProbabilityParameters.probability}\r\n onSelectDelta={rest.onSelectPopulationProbabilityDelta}\r\n onSelectMaritalStatus={rest.onSelectPopulationProbabilityMaritalStatus}\r\n onChangeRelativeToYear={\r\n rest.onChangePopulationProbabilityRelativeToYear\r\n }\r\n onSelectContraceptiveMethod={\r\n rest.onSelectPopulationProbabilityContraceptiveMethod\r\n }\r\n onChangeYear={rest.onChangePopulationProbabilityYear}\r\n onSelectDirection={rest.onSelectPopulationProbabilityDirection}\r\n onChangeLevel={rest.onChangePopulationProbabilityLevel}\r\n />\r\n <p className={rest.classes.answer}>\r\n The probability is{\" \"}\r\n {rest.populationProbability != null\r\n ? `${(rest.populationProbability * 100).toFixed(0)}%`\r\n : \"???\"}\r\n </p>\r\n </div>\r\n\r\n <Divider />\r\n\r\n <p>\r\n {t(\r\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.\"\r\n )}\r\n </p>\r\n\r\n <div className={rest.classes.panel}>\r\n <TargetsPopulationLevelSpecification\r\n contraceptiveMethods={rest.contraceptiveMethods}\r\n delta={rest.populationLevelParameters.delta}\r\n maritalStatus={rest.populationLevelParameters.maritalStatus}\r\n relativeToYear={rest.populationLevelParameters.relativeToYear}\r\n contraceptiveMethod={rest.populationLevelParameters.contraceptiveMethod}\r\n year={rest.populationLevelParameters.year}\r\n direction={rest.populationLevelParameters.direction}\r\n level={rest.populationLevelParameters.level}\r\n probability={rest.populationLevelParameters.probability}\r\n onSelectDelta={rest.onSelectPopulationLevelDelta}\r\n onSelectMaritalStatus={rest.onSelectPopulationLevelMaritalStatus}\r\n onChangeRelativeToYear={rest.onChangePopulationLevelRelativeToYear}\r\n onSelectContraceptiveMethod={\r\n rest.onSelectPopulationLevelContraceptiveMethod\r\n }\r\n onChangeYear={rest.onChangePopulationLevelYear}\r\n onSelectDirection={rest.onSelectPopulationLevelDirection}\r\n onChangeProbability={rest.onChangePopulationLevelProbability}\r\n />\r\n <p className={rest.classes.answer}>\r\n {rest.populationLevel != null ? rest.populationLevel.toFixed(0) : \"???\"}\r\n </p>\r\n </div>\r\n\r\n <Divider />\r\n\r\n <ProgressButton\r\n variant=\"contained\"\r\n color=\"primary\"\r\n disabled={!rest.valid}\r\n loading={rest.calculating}\r\n className={rest.classes.button}\r\n onClick={rest.onCalculate}\r\n >\r\n {t(\"Calculate\")}\r\n </ProgressButton>\r\n </div>\r\n);\r\n\r\nTargets.propTypes = {\r\n indicators: PropTypes.array.isRequired,\r\n indicatorProbabilityParameters: PropTypes.shape({\r\n indicator: PropTypes.string.isRequired,\r\n maritalStatus: maritalStatusPropType,\r\n year: PropTypes.number,\r\n direction: directionPropType,\r\n level: PropTypes.number,\r\n }).isRequired,\r\n indicatorProbability: PropTypes.number,\r\n indicatorLevelParameters: PropTypes.shape({\r\n indicator: PropTypes.string.isRequired,\r\n maritalStatus: maritalStatusPropType,\r\n year: PropTypes.number,\r\n probability: PropTypes.string,\r\n direction: directionPropType,\r\n }).isRequired,\r\n indicatorLevel: PropTypes.number,\r\n populationProbabilityParameters: PropTypes.shape({\r\n delta: deltaPropType,\r\n maritalStatus: maritalStatusPropType,\r\n contraceptiveMethod: PropTypes.string.isRequired,\r\n year: PropTypes.number,\r\n direction: directionPropType,\r\n level: PropTypes.number,\r\n }).isRequired,\r\n populationProbability: PropTypes.number,\r\n populationLevelParameters: PropTypes.shape({\r\n delta: deltaPropType,\r\n maritalStatus: maritalStatusPropType,\r\n contraceptiveMethod: PropTypes.string.isRequired,\r\n year: PropTypes.number,\r\n probability: PropTypes.string,\r\n direction: directionPropType,\r\n }).isRequired,\r\n populationLevel: PropTypes.number,\r\n valid: PropTypes.bool.isRequired,\r\n calculating: PropTypes.bool,\r\n onSelectIndicatorProbabilityIndicator: PropTypes.func.isRequired,\r\n onSelectIndicatorProbabilityMaritalStatus: PropTypes.func.isRequired,\r\n onChangeIndicatorProbabilityYear: PropTypes.func.isRequired,\r\n onSelectIndicatorProbabilityDirection: PropTypes.func.isRequired,\r\n onChangeIndicatorProbabilityLevel: PropTypes.func.isRequired,\r\n onSelectIndicatorLevelIndicator: PropTypes.func.isRequired,\r\n onSelectIndicatorLevelMaritalStatus: PropTypes.func.isRequired,\r\n onChangeIndicatorLevelYear: PropTypes.func.isRequired,\r\n onChangeIndicatorLevelProbability: PropTypes.func.isRequired,\r\n onSelectIndicatorLevelDirection: PropTypes.func.isRequired,\r\n onSelectPopulationProbabilityDelta: PropTypes.func.isRequired,\r\n onSelectPopulationProbabilityMaritalStatus: PropTypes.func.isRequired,\r\n onChangePopulationProbabilityRelativeToYear: PropTypes.func.isRequired,\r\n onSelectPopulationProbabilityContraceptiveMethod: PropTypes.func.isRequired,\r\n onChangePopulationProbabilityYear: PropTypes.func.isRequired,\r\n onSelectPopulationProbabilityDirection: PropTypes.func.isRequired,\r\n onChangePopulationProbabilityLevel: PropTypes.func.isRequired,\r\n onSelectPopulationLevelDelta: PropTypes.func.isRequired,\r\n onSelectPopulationLevelMaritalStatus: PropTypes.func.isRequired,\r\n onChangePopulationLevelRelativeToYear: PropTypes.func.isRequired,\r\n onSelectPopulationLevelContraceptiveMethod: PropTypes.func.isRequired,\r\n onChangePopulationLevelYear: PropTypes.func.isRequired,\r\n onChangePopulationLevelProbability: PropTypes.func.isRequired,\r\n onSelectPopulationLevelDirection: PropTypes.func.isRequired,\r\n onCalculate: PropTypes.func.isRequired,\r\n};\r\n\r\nTargets.defaultProps = {\r\n calculating: false,\r\n};\r\n\r\nexport default withTranslation()(withStyles(styles)(Targets));\r\n","import React, { Component } from \"react\";\r\nimport * as PropTypes from \"prop-types\";\r\nimport { contraceptiveMethods, indicators } from \"../constants\";\r\nimport { trimToRange, trimYearToRange } from \"../utilities\";\r\nimport * as api from \"../api/api\";\r\nimport Targets from \"../components/Targets/Targets\";\r\n\r\nconst createInitialState = () => ({\r\n indicatorProbabilityParameters: {\r\n indicator: indicators[0].value,\r\n maritalStatus: \"married\",\r\n direction: \"greaterThan\"\r\n },\r\n indicatorLevelParameters: {\r\n indicator: indicators[0].value,\r\n maritalStatus: \"married\",\r\n direction: \"greaterThan\"\r\n },\r\n populationProbabilityParameters: {\r\n delta: \"total\",\r\n maritalStatus: \"married\",\r\n contraceptiveMethod: contraceptiveMethods[0].value,\r\n direction: \"greaterThan\"\r\n },\r\n populationLevelParameters: {\r\n delta: \"total\",\r\n maritalStatus: \"married\",\r\n contraceptiveMethod: contraceptiveMethods[0].value,\r\n direction: \"greaterThan\"\r\n }\r\n});\r\n\r\nconst createPayload = state => {\r\n const payload = {};\r\n\r\n if (\r\n state.indicatorProbabilityParameters.year &&\r\n !isNaN(state.indicatorProbabilityParameters.level)\r\n ) {\r\n payload.indicatorProbabilityParameters = {\r\n ...state.indicatorProbabilityParameters,\r\n level: state.indicatorProbabilityParameters.level / 100\r\n };\r\n }\r\n\r\n if (\r\n state.indicatorLevelParameters.year &&\r\n !isNaN(state.indicatorLevelParameters.probability)\r\n ) {\r\n payload.indicatorLevelParameters = state.indicatorLevelParameters;\r\n }\r\n\r\n if (\r\n state.populationProbabilityParameters.year &&\r\n !isNaN(state.populationProbabilityParameters.level)\r\n ) {\r\n payload.populationProbabilityParameters =\r\n state.populationProbabilityParameters;\r\n }\r\n\r\n if (\r\n state.populationLevelParameters.year &&\r\n !isNaN(state.populationLevelParameters.probability)\r\n ) {\r\n payload.populationLevelParameters = state.populationLevelParameters;\r\n }\r\n\r\n return payload;\r\n};\r\n\r\nclass TargetsContainer extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.signal = api.getSignal();\r\n\r\n this.state = createInitialState();\r\n }\r\n\r\n setStateSafely = (state, callback) => {\r\n if (!this.unmounting) {\r\n this.setState(state, callback);\r\n }\r\n };\r\n\r\n onSelectIndicatorProbabilityIndicator = indicator => {\r\n this.setStateSafely({\r\n indicatorProbabilityParameters: {\r\n ...this.state.indicatorProbabilityParameters,\r\n indicator\r\n }\r\n });\r\n };\r\n\r\n onSelectIndicatorProbabilityMaritalStatus = maritalStatus => {\r\n this.setStateSafely({\r\n indicatorProbabilityParameters: {\r\n ...this.state.indicatorProbabilityParameters,\r\n maritalStatus\r\n }\r\n });\r\n };\r\n\r\n onChangeIndicatorProbabilityYear = (year, enforceRange) => {\r\n year = trimYearToRange(year, enforceRange);\r\n\r\n this.setStateSafely({\r\n indicatorProbabilityParameters: {\r\n ...this.state.indicatorProbabilityParameters,\r\n year\r\n }\r\n });\r\n };\r\n\r\n onSelectIndicatorProbabilityDirection = direction => {\r\n this.setStateSafely({\r\n indicatorProbabilityParameters: {\r\n ...this.state.indicatorProbabilityParameters,\r\n direction\r\n }\r\n });\r\n };\r\n\r\n onChangeIndicatorProbabilityLevel = level => {\r\n level = trimToRange(level, 0, 100);\r\n\r\n this.setStateSafely({\r\n indicatorProbabilityParameters: {\r\n ...this.state.indicatorProbabilityParameters,\r\n level\r\n }\r\n });\r\n };\r\n\r\n onSelectIndicatorLevelIndicator = indicator => {\r\n this.setStateSafely({\r\n indicatorLevelParameters: {\r\n ...this.state.indicatorLevelParameters,\r\n indicator\r\n }\r\n });\r\n };\r\n\r\n onSelectIndicatorLevelMaritalStatus = maritalStatus => {\r\n this.setStateSafely({\r\n indicatorLevelParameters: {\r\n ...this.state.indicatorLevelParameters,\r\n maritalStatus\r\n }\r\n });\r\n };\r\n\r\n onChangeIndicatorLevelYear = (year, enforceRange) => {\r\n year = trimYearToRange(year, enforceRange);\r\n\r\n this.setStateSafely({\r\n indicatorLevelParameters: {\r\n ...this.state.indicatorLevelParameters,\r\n year\r\n }\r\n });\r\n };\r\n\r\n onChangeIndicatorLevelProbability = probability => {\r\n if (!probability) {\r\n probability = \"\";\r\n } else if (!probability.match(/^(0?(\\.\\d*)?|1)$/)) {\r\n probability = this.state.indicatorLevelParameters.probability;\r\n }\r\n\r\n this.setStateSafely({\r\n indicatorLevelParameters: {\r\n ...this.state.indicatorLevelParameters,\r\n probability\r\n }\r\n });\r\n };\r\n\r\n onSelectIndicatorLevelDirection = direction => {\r\n this.setStateSafely({\r\n indicatorLevelParameters: {\r\n ...this.state.indicatorLevelParameters,\r\n direction\r\n }\r\n });\r\n };\r\n\r\n onSelectPopulationProbabilityDelta = delta => {\r\n this.setStateSafely({\r\n populationProbabilityParameters: {\r\n ...this.state.populationProbabilityParameters,\r\n delta\r\n }\r\n });\r\n };\r\n\r\n onSelectPopulationProbabilityMaritalStatus = maritalStatus => {\r\n this.setStateSafely({\r\n populationProbabilityParameters: {\r\n ...this.state.populationProbabilityParameters,\r\n maritalStatus\r\n }\r\n });\r\n };\r\n\r\n onChangePopulationProbabilityRelativeToYear = (year, enforceRange) => {\r\n year = trimYearToRange(year, enforceRange);\r\n\r\n this.setStateSafely({\r\n populationProbabilityParameters: {\r\n ...this.state.populationProbabilityParameters,\r\n relativeToYear: year\r\n }\r\n });\r\n };\r\n\r\n onSelectPopulationProbabilityContraceptiveMethod = contraceptiveMethod => {\r\n this.setStateSafely({\r\n populationProbabilityParameters: {\r\n ...this.state.populationProbabilityParameters,\r\n contraceptiveMethod\r\n }\r\n });\r\n };\r\n\r\n onChangePopulationProbabilityYear = (year, enforceRange) => {\r\n year = trimYearToRange(year, enforceRange);\r\n\r\n this.setStateSafely({\r\n populationProbabilityParameters: {\r\n ...this.state.populationProbabilityParameters,\r\n year\r\n }\r\n });\r\n };\r\n\r\n onSelectPopulationProbabilityDirection = direction => {\r\n this.setStateSafely({\r\n populationProbabilityParameters: {\r\n ...this.state.populationProbabilityParameters,\r\n direction\r\n }\r\n });\r\n };\r\n\r\n onChangePopulationProbabilityLevel = level => {\r\n level = trimToRange(level, 0, Number.MAX_VALUE);\r\n\r\n this.setStateSafely({\r\n populationProbabilityParameters: {\r\n ...this.state.populationProbabilityParameters,\r\n level\r\n }\r\n });\r\n };\r\n\r\n onSelectPopulationLevelDelta = delta => {\r\n this.setStateSafely({\r\n populationLevelParameters: {\r\n ...this.state.populationLevelParameters,\r\n delta\r\n }\r\n });\r\n };\r\n\r\n onSelectPopulationLevelMaritalStatus = maritalStatus => {\r\n this.setStateSafely({\r\n populationLevelParameters: {\r\n ...this.state.populationLevelParameters,\r\n maritalStatus\r\n }\r\n });\r\n };\r\n\r\n onChangePopulationLevelRelativeToYear = (year, enforceRange) => {\r\n year = trimYearToRange(year, enforceRange);\r\n\r\n this.setStateSafely({\r\n populationLevelParameters: {\r\n ...this.state.populationLevelParameters,\r\n relativeToYear: year\r\n }\r\n });\r\n };\r\n\r\n onSelectPopulationLevelContraceptiveMethod = contraceptiveMethod => {\r\n this.setStateSafely({\r\n populationLevelParameters: {\r\n ...this.state.populationLevelParameters,\r\n contraceptiveMethod\r\n }\r\n });\r\n };\r\n\r\n onChangePopulationLevelYear = (year, enforceRange) => {\r\n year = trimYearToRange(year, enforceRange);\r\n\r\n this.setStateSafely({\r\n populationLevelParameters: {\r\n ...this.state.populationLevelParameters,\r\n year\r\n }\r\n });\r\n };\r\n\r\n onChangePopulationLevelProbability = probability => {\r\n if (!probability) {\r\n probability = \"\";\r\n } else if (!probability.match(/^(0?(\\.\\d*)?|1)$/)) {\r\n probability = this.state.populationLevelParameters.probability;\r\n }\r\n\r\n this.setStateSafely({\r\n populationLevelParameters: {\r\n ...this.state.populationLevelParameters,\r\n probability\r\n }\r\n });\r\n };\r\n\r\n onSelectPopulationLevelDirection = direction => {\r\n this.setStateSafely({\r\n populationLevelParameters: {\r\n ...this.state.populationLevelParameters,\r\n direction\r\n }\r\n });\r\n };\r\n\r\n onCalculate = () => {\r\n this.setStateSafely({\r\n calculating: true\r\n });\r\n\r\n const countryNumericCodeOrRegion =\r\n this.props.countryNumericCode || this.props.region;\r\n\r\n api\r\n .calculateTargets(\r\n this.props.runId,\r\n countryNumericCodeOrRegion,\r\n createPayload(this.state),\r\n this.signal.token\r\n )\r\n .then(response => {\r\n if (!response) {\r\n return;\r\n }\r\n\r\n this.setStateSafely({\r\n ...response.data\r\n });\r\n })\r\n .finally(() => {\r\n this.setStateSafely({\r\n calculating: false\r\n });\r\n });\r\n };\r\n\r\n componentWillUnmount() {\r\n this.unmounting = true;\r\n this.signal.cancel();\r\n }\r\n\r\n render() {\r\n return (\r\n <Targets\r\n indicators={indicators}\r\n contraceptiveMethods={contraceptiveMethods}\r\n indicatorProbabilityParameters={\r\n this.state.indicatorProbabilityParameters\r\n }\r\n indicatorProbability={this.state.indicatorProbability}\r\n indicatorLevelParameters={this.state.indicatorLevelParameters}\r\n indicatorLevel={this.state.indicatorLevel}\r\n populationProbabilityParameters={\r\n this.state.populationProbabilityParameters\r\n }\r\n populationProbability={this.state.populationProbability}\r\n populationLevelParameters={this.state.populationLevelParameters}\r\n populationLevel={this.state.populationLevel}\r\n valid={\r\n (!!this.props.countryNumericCode || !!this.props.region) &&\r\n Object.keys(createPayload(this.state)).length > 0\r\n }\r\n calculating={this.state.calculating}\r\n onSelectIndicatorProbabilityIndicator={\r\n this.onSelectIndicatorProbabilityIndicator\r\n }\r\n onSelectIndicatorProbabilityMaritalStatus={\r\n this.onSelectIndicatorProbabilityMaritalStatus\r\n }\r\n onChangeIndicatorProbabilityYear={this.onChangeIndicatorProbabilityYear}\r\n onSelectIndicatorProbabilityDirection={\r\n this.onSelectIndicatorProbabilityDirection\r\n }\r\n onChangeIndicatorProbabilityLevel={\r\n this.onChangeIndicatorProbabilityLevel\r\n }\r\n onSelectIndicatorLevelIndicator={this.onSelectIndicatorLevelIndicator}\r\n onSelectIndicatorLevelMaritalStatus={\r\n this.onSelectIndicatorLevelMaritalStatus\r\n }\r\n onChangeIndicatorLevelYear={this.onChangeIndicatorLevelYear}\r\n onChangeIndicatorLevelProbability={\r\n this.onChangeIndicatorLevelProbability\r\n }\r\n onSelectIndicatorLevelDirection={this.onSelectIndicatorLevelDirection}\r\n onSelectPopulationProbabilityDelta={\r\n this.onSelectPopulationProbabilityDelta\r\n }\r\n onSelectPopulationProbabilityMaritalStatus={\r\n this.onSelectPopulationProbabilityMaritalStatus\r\n }\r\n onChangePopulationProbabilityRelativeToYear={\r\n this.onChangePopulationProbabilityRelativeToYear\r\n }\r\n onSelectPopulationProbabilityContraceptiveMethod={\r\n this.onSelectPopulationProbabilityContraceptiveMethod\r\n }\r\n onChangePopulationProbabilityYear={\r\n this.onChangePopulationProbabilityYear\r\n }\r\n onSelectPopulationProbabilityDirection={\r\n this.onSelectPopulationProbabilityDirection\r\n }\r\n onChangePopulationProbabilityLevel={\r\n this.onChangePopulationProbabilityLevel\r\n }\r\n onSelectPopulationLevelDelta={this.onSelectPopulationLevelDelta}\r\n onSelectPopulationLevelMaritalStatus={\r\n this.onSelectPopulationLevelMaritalStatus\r\n }\r\n onChangePopulationLevelRelativeToYear={\r\n this.onChangePopulationLevelRelativeToYear\r\n }\r\n onSelectPopulationLevelContraceptiveMethod={\r\n this.onSelectPopulationLevelContraceptiveMethod\r\n }\r\n onChangePopulationLevelYear={this.onChangePopulationLevelYear}\r\n onChangePopulationLevelProbability={\r\n this.onChangePopulationLevelProbability\r\n }\r\n onSelectPopulationLevelDirection={this.onSelectPopulationLevelDirection}\r\n onCalculate={this.onCalculate}\r\n />\r\n );\r\n }\r\n}\r\n\r\nTargetsContainer.propTypes = {\r\n runId: PropTypes.string,\r\n countryNumericCode: PropTypes.number,\r\n region: PropTypes.string\r\n};\r\n\r\nexport default TargetsContainer;\r\n","import React from \"react\";\r\nimport * as PropTypes from \"prop-types\";\r\nimport {\r\n emuDatumPropType,\r\n indicatorResultPropType,\r\n labeledValuePropType,\r\n maritalStatusPropType,\r\n measurePropType,\r\n populationDatumPropType,\r\n periodPropType,\r\n resultPropType,\r\n surveyDatumPropType\r\n} from \"../../propTypes\";\r\nimport { Route, Switch, Redirect } from \"react-router-dom\";\r\nimport { withStyles } from \"@material-ui/core/styles\";\r\nimport { withTranslation } from \"react-i18next\";\r\nimport Charts from \"../Charts/Charts\";\r\nimport EmuData from \"../EmuData\";\r\nimport NavigationTab from \"../NavigationTab\";\r\nimport PopulationData from \"../PopulationData\";\r\nimport ProgressContainer from \"../../containers/ProgressContainer\";\r\nimport Results from \"../Results/Results\";\r\nimport SurveyData from \"../SurveyData\";\r\nimport TargetsContainer from \"../../containers/TargetsContainer\";\r\nimport Title from \"../Title\";\r\n\r\nconst styles = {\r\n tabPage: {\r\n margin: 10\r\n },\r\n title: {\r\n marginBottom: 20\r\n }\r\n};\r\n\r\nconst ViewRunMainContent = ({ match, t, ...rest }) => (\r\n <div>\r\n <div className={rest.classes.title}>\r\n <Title title={rest.runTitle} />\r\n </div>\r\n <NavigationTab to=\"/viewrun/survey\">{t(\"Survey data\")}</NavigationTab>\r\n <NavigationTab to=\"/viewrun/population\">\r\n {t(\"Population data\")}\r\n </NavigationTab>\r\n <NavigationTab to=\"/viewrun/emu\">{t(\"Service statistics\")}</NavigationTab>\r\n <NavigationTab to=\"/viewrun/results\">{t(\"Results\")}</NavigationTab>\r\n <NavigationTab to=\"/viewrun/charts\">{t(\"Charts\")}</NavigationTab>\r\n <NavigationTab to=\"/viewrun/targets\">{t(\"Targets\")}</NavigationTab>\r\n <NavigationTab to=\"/viewrun/progress\">{t(\"Progress\")}</NavigationTab>\r\n <div className={rest.classes.tabPage}>\r\n <Switch>\r\n <Route\r\n exact\r\n path={match.path}\r\n render={() => <Redirect replace to={`${match.path}/survey`} />}\r\n />\r\n <Route\r\n path={`${match.path}/survey`}\r\n render={() => <SurveyData data={rest.surveyData} />}\r\n />\r\n <Route\r\n path={`${match.path}/population`}\r\n render={() => <PopulationData data={rest.populationData} />}\r\n />\r\n <Route\r\n path={`${match.path}/emu`}\r\n render={() => <EmuData data={rest.emuData} />}\r\n />\r\n <Route\r\n path={`${match.path}/results`}\r\n render={() => (\r\n <Results\r\n selectedMeasure={rest.selectedResultsMeasure}\r\n selectedIndicator={rest.selectedResultsIndicator}\r\n selectedMaritalStatus={rest.selectedResultsMaritalStatus}\r\n results={rest.tableResults}\r\n selectedExportedMeasures={rest.selectedExportedResultsMeasures}\r\n selectedExportedIndicators={\r\n rest.selectedExportedResultsIndicators\r\n }\r\n disableSelectedResultsDownload={\r\n rest.disableSelectedResultsDownload\r\n }\r\n disableAllResultsDownload={rest.disableAllResultsDownload}\r\n disableAllDataDownload={rest.disableAllDataDownload}\r\n onChangeMeasure={rest.onChangeResultsMeasure}\r\n onChangeIndicator={rest.onChangeResultsIndicator}\r\n onChangeMaritalStatus={rest.onChangeResultsMaritalStatus}\r\n onToggleExportedMeasure={rest.onToggleExportedResultsMeasure}\r\n onToggleExportedIndicator={rest.onToggleExportedResultsIndicator}\r\n onDownloadSelectedResults={rest.onDownloadSelectedResults}\r\n onDownloadAllResults={rest.onDownloadAllResults}\r\n onDownloadAllData={rest.onDownloadAllData}\r\n />\r\n )}\r\n />\r\n <Route\r\n path={`${match.path}/charts`}\r\n render={() => (\r\n <Charts\r\n period={rest.period}\r\n selectedMeasure={rest.selectedChartsMeasure}\r\n selectedMaritalStatus={rest.selectedChartsMaritalStatus}\r\n selectedChartsIndicators={rest.selectedChartsIndicators}\r\n showSurveyLegend={rest.showSurveyLegend}\r\n results={rest.chartResults}\r\n surveyData={rest.chartSurveyData}\r\n emuData={rest.chartEmuData}\r\n chartSets={rest.chartSets}\r\n selectedExportedChartSet={rest.selectedExportedChartSet}\r\n selectedExportedMeasure={rest.selectedExportedChartsMeasure}\r\n selectedExportedMaritalStatus={\r\n rest.selectedExportedChartsMaritalStatus\r\n }\r\n disableChartSetDownload={rest.disableChartSetDownload}\r\n disableSelectedChartsDownload={rest.disableSelectedChartsDownload}\r\n onChangeMeasure={rest.onChangeChartsMeasure}\r\n onChangeMaritalStatus={rest.onChangeChartsMaritalStatus}\r\n onToggleChart={rest.onToggleChart}\r\n onToggleSurveyLegend={rest.onToggleSurveyLegend}\r\n onChangeExportedChartSet={rest.onChangeExportedChartSet}\r\n onChangeExportedMeasure={rest.onChangeExportedChartsMeasure}\r\n onChangeExportedMaritalStatus={\r\n rest.onChangeExportedChartsMaritalStatus\r\n }\r\n onDownloadChartSet={rest.onDownloadChartSet}\r\n onDownloadSelectedCharts={rest.onDownloadSelectedCharts}\r\n />\r\n )}\r\n />\r\n <Route\r\n path={`${match.path}/targets`}\r\n render={() => (\r\n <TargetsContainer\r\n runId={rest.selectedRunId}\r\n countryNumericCode={rest.selectedCountryNumericCode}\r\n region={rest.selectedRegion}\r\n />\r\n )}\r\n />\r\n <Route\r\n path={`${match.path}/progress`}\r\n render={() => (\r\n <ProgressContainer\r\n runId={rest.selectedRunId}\r\n countryNumericCode={rest.selectedCountryNumericCode}\r\n region={rest.selectedRegion}\r\n />\r\n )}\r\n />\r\n </Switch>\r\n </div>\r\n </div>\r\n);\r\n\r\nViewRunMainContent.propTypes = {\r\n selectedRunId: PropTypes.string,\r\n selectedCountryNumericCode: PropTypes.number,\r\n selectedRegion: PropTypes.string,\r\n period: periodPropType,\r\n runTitle: PropTypes.string,\r\n surveyData: PropTypes.arrayOf(surveyDatumPropType),\r\n populationData: PropTypes.arrayOf(populationDatumPropType),\r\n emuData: PropTypes.arrayOf(emuDatumPropType),\r\n selectedResultsMeasure: PropTypes.oneOf([\"percentage\", \"count\"]).isRequired,\r\n selectedResultsIndicator: PropTypes.string.isRequired,\r\n selectedResultsMaritalStatus: PropTypes.string.isRequired,\r\n tableResults: PropTypes.arrayOf(indicatorResultPropType),\r\n selectedExportedResultsMeasures: PropTypes.arrayOf(measurePropType),\r\n selectedExportedResultsIndicators: PropTypes.arrayOf(PropTypes.string),\r\n disableSelectedResultsDownload: PropTypes.bool.isRequired,\r\n disableAllResultsDownload: PropTypes.bool.isRequired,\r\n disableAllDataDownload: PropTypes.bool.isRequired,\r\n selectedChartsMeasure: measurePropType.isRequired,\r\n selectedChartsMaritalStatus: maritalStatusPropType,\r\n selectedChartsIndicators: PropTypes.arrayOf(PropTypes.string),\r\n showSurveyLegend: PropTypes.bool,\r\n chartResults: resultPropType,\r\n chartSurveyData: PropTypes.arrayOf(surveyDatumPropType),\r\n chartEmuData: PropTypes.arrayOf(emuDatumPropType),\r\n chartSets: PropTypes.arrayOf(labeledValuePropType),\r\n selectedExportedChartSet: PropTypes.string.isRequired,\r\n selectedExportedChartsMeasure: measurePropType.isRequired,\r\n selectedExportedChartsMaritalStatus: maritalStatusPropType,\r\n disableChartSetDownload: PropTypes.bool.isRequired,\r\n disableSelectedChartsDownload: PropTypes.bool.isRequired,\r\n onChangeResultsMeasure: PropTypes.func.isRequired,\r\n onChangeResultsIndicator: PropTypes.func.isRequired,\r\n onChangeResultsMaritalStatus: PropTypes.func.isRequired,\r\n onToggleExportedResultsMeasure: PropTypes.func.isRequired,\r\n onToggleExportedResultsIndicator: PropTypes.func.isRequired,\r\n onDownloadSelectedResults: PropTypes.func.isRequired,\r\n onDownloadAllResults: PropTypes.func.isRequired,\r\n onDownloadAllData: PropTypes.func.isRequired,\r\n onChangeChartsMeasure: PropTypes.func.isRequired,\r\n onChangeChartsMaritalStatus: PropTypes.func.isRequired,\r\n onToggleChart: PropTypes.func.isRequired,\r\n onToggleSurveyLegend: PropTypes.func.isRequired,\r\n onChangeExportedChartSet: PropTypes.func.isRequired,\r\n onChangeExportedChartsMeasure: PropTypes.func.isRequired,\r\n onChangeExportedChartsMaritalStatus: PropTypes.func.isRequired,\r\n onDownloadChartSet: PropTypes.func.isRequired,\r\n onDownloadSelectedCharts: PropTypes.func.isRequired\r\n};\r\n\r\nViewRunMainContent.defaultProps = {\r\n surveyData: [],\r\n populationData: [],\r\n emuData: [],\r\n tableResults: [],\r\n selectedChartsIndicators: [],\r\n showSurveyLegend: false,\r\n chartSurveyData: [],\r\n chartEmuData: [],\r\n chartSets: [],\r\n selectedExportedResultsMeasures: [],\r\n selectedExportedResultsIndicators: []\r\n};\r\n\r\nexport default withTranslation()(withStyles(styles)(ViewRunMainContent));\r\n","import contentWithDrawer from \"../contentWithDrawer\";\r\nimport DrawerContent from \"./ViewRunDrawerContent\";\r\nimport MainContent from \"./ViewRunMainContent\";\r\n\r\nconst ViewRun = contentWithDrawer(MainContent, DrawerContent);\r\n\r\nexport default ViewRun;\r\n","import React, { Component } from \"react\";\r\nimport * as queryString from \"query-string\";\r\nimport {\r\n defaultFirstYear,\r\n indicators,\r\n maximumYear,\r\n minimumYear\r\n} from \"../constants\";\r\nimport {\r\n createSlug,\r\n getDefaultLastYear,\r\n toggleSetExistence\r\n} from \"../utilities\";\r\nimport {\r\n convertMaritalStatusToIsInUnion,\r\n filterPopulationData,\r\n filterResults,\r\n filterSurveyData,\r\n getPeriod,\r\n normalizeChartSets,\r\n normalizeDatabases,\r\n normalizeEmuData,\r\n normalizePopulationData,\r\n normalizeResults,\r\n normalizeRuns,\r\n normalizeSurveyData\r\n} from \"../data\";\r\nimport * as api from \"../api/api\";\r\nimport fileDownload from \"js-file-download\";\r\nimport { withErrorBoundary } from \"../errors\";\r\nimport { withTranslation } from \"react-i18next\";\r\nimport ViewRun from \"../components/ViewRun/ViewRun\";\r\n\r\nconst createInitialState = () => ({\r\n period: {\r\n firstYear: defaultFirstYear,\r\n lastYear: getDefaultLastYear()\r\n },\r\n selectedResultsMeasure: \"percentage\",\r\n selectedResultsIndicator: indicators[0].value,\r\n selectedResultsMaritalStatus: \"married\",\r\n selectedExportedResultsMeasures: new Set(),\r\n selectedExportedResultsIndicators: new Set(),\r\n selectedChartsMeasure: \"percentage\",\r\n selectedChartsMaritalStatus: \"married\",\r\n selectedChartsIndicators: new Set(\r\n indicators\r\n .filter(indicator => indicator.chart)\r\n .map(indicator => indicator.value)\r\n ),\r\n showSurveyLegend: true,\r\n chartSets: [\r\n {\r\n value: \"complete\",\r\n label: \"Complete\"\r\n }\r\n ],\r\n selectedExportedChartSet: \"complete\",\r\n selectedExportedChartsMeasure: \"percentage\",\r\n selectedExportedChartsMaritalStatus: \"married\"\r\n});\r\n\r\nclass ViewRunContainer extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.signal = api.getSignal();\r\n\r\n this.state = createInitialState();\r\n }\r\n\r\n setStateSafely = (state, callback) => {\r\n if (!this.unmounting) {\r\n this.setState(state, callback);\r\n }\r\n };\r\n\r\n getCountries = runId => {\r\n if (!runId) {\r\n return {};\r\n }\r\n\r\n const run = this.state.runs[runId];\r\n\r\n const divisions = this.state.databases[run.surveyDatabaseId].divisions;\r\n\r\n return run.countryNumericCodes.reduce((result, countryNumericCode) => {\r\n if (\r\n divisions[countryNumericCode] &&\r\n divisions[countryNumericCode].isCountry\r\n ) {\r\n result[countryNumericCode] = {\r\n numericCode: countryNumericCode,\r\n ...divisions[countryNumericCode]\r\n };\r\n }\r\n\r\n return result;\r\n }, {});\r\n };\r\n\r\n getRegions = runId => {\r\n if (!runId) {\r\n return [];\r\n }\r\n\r\n const run = this.state.runs[runId];\r\n\r\n return run.regionCodes || [];\r\n };\r\n\r\n selectDefaultCountryOrRegion = runId => {\r\n const countryNumericCodes = Object.keys(this.getCountries(runId));\r\n const regions = this.getRegions(runId);\r\n\r\n if (countryNumericCodes.length + regions.length === 1) {\r\n if (countryNumericCodes.length) {\r\n this.setStateSafely({\r\n selectedCountryNumericCode: parseInt(countryNumericCodes[0], 10)\r\n });\r\n } else {\r\n this.setStateSafely({\r\n selectedRegion: regions[0]\r\n });\r\n }\r\n }\r\n };\r\n\r\n getSelectedCountryNumericCodeOrRegion = () =>\r\n this.state.selectedRegion || this.state.selectedCountryNumericCode;\r\n\r\n createRunTitle = () => {\r\n let countryAlphaCodeOrRegion;\r\n\r\n if (this.state.selectedRegion) {\r\n countryAlphaCodeOrRegion = this.state.selectedRegion;\r\n } else if (this.state.selectedCountryNumericCode) {\r\n const selectedRun = this.state.runs[this.state.selectedRunId];\r\n\r\n countryAlphaCodeOrRegion = this.state.databases[\r\n selectedRun.surveyDatabaseId\r\n ].divisions[this.state.selectedCountryNumericCode].alphaCode;\r\n }\r\n\r\n if (countryAlphaCodeOrRegion) {\r\n const selectedRun = this.state.runs[this.state.selectedRunId];\r\n\r\n const { firstYear, lastYear } = this.state.period;\r\n\r\n return this.props.t(\r\n \"Run {{name}} for {{countryAlphaCodeOrRegion}} during {{firstYear}}-{{lastYear}}\",\r\n {\r\n name: selectedRun.name,\r\n countryAlphaCodeOrRegion,\r\n firstYear,\r\n lastYear\r\n }\r\n );\r\n }\r\n };\r\n\r\n viewRun = () => {\r\n this.setStateSafely({\r\n loadingRun: true\r\n });\r\n\r\n const run = this.state.runs[this.state.selectedRunId];\r\n\r\n const countryNumericCodeOrRegion =\r\n this.state.selectedRegion || this.state.selectedCountryNumericCode;\r\n\r\n // noinspection JSCheckFunctionSignatures\r\n Promise.all([\r\n api.fetchSurveyDatabase(\r\n run.surveyDatabaseId,\r\n countryNumericCodeOrRegion,\r\n this.state.selectedRunId,\r\n this.signal.token\r\n ),\r\n api.fetchPopulationDatabase(\r\n run.populationDatabaseId,\r\n countryNumericCodeOrRegion,\r\n this.signal.token\r\n ),\r\n api.fetchResults(\r\n this.state.selectedRunId,\r\n undefined,\r\n countryNumericCodeOrRegion,\r\n this.signal.token\r\n ),\r\n run.emuDatabaseId\r\n ? api.fetchEmuDatabase(\r\n run.emuDatabaseId,\r\n countryNumericCodeOrRegion,\r\n this.signal.token\r\n )\r\n : new Promise(resolve =>\r\n resolve({\r\n data: []\r\n })\r\n )\r\n ])\r\n .then(response => {\r\n console.log(\"Fetched survey\");\r\n\r\n if (!response || response.some(item => !item)) {\r\n return;\r\n }\r\n\r\n const [surveyData, populationData, results, emuData] = response;\r\n\r\n const period = getPeriod(results.data.proportions);\r\n\r\n this.setStateSafely({\r\n period,\r\n surveyData: normalizeSurveyData(surveyData.data),\r\n populationData: normalizePopulationData(populationData.data),\r\n emuData: normalizeEmuData(emuData.data),\r\n results: {\r\n proportions: normalizeResults(results.data.proportions),\r\n populations: normalizeResults(results.data.populations)\r\n }\r\n });\r\n })\r\n .finally(() => {\r\n this.setStateSafely({\r\n loadingRun: false\r\n });\r\n });\r\n };\r\n\r\n getMeasureResultsForPeriod = measure => {\r\n if (!this.state.results) {\r\n return;\r\n }\r\n\r\n const measureKey = measure === \"percentage\" ? \"proportions\" : \"populations\";\r\n\r\n return filterResults(\r\n this.state.results[measureKey],\r\n this.state.period.firstYear,\r\n this.state.period.lastYear\r\n );\r\n };\r\n\r\n getTableResults = () => {\r\n const results = this.getMeasureResultsForPeriod(\r\n this.state.selectedResultsMeasure\r\n );\r\n\r\n if (!results) {\r\n return results;\r\n }\r\n\r\n const isInUnion = convertMaritalStatusToIsInUnion(\r\n this.state.selectedResultsMaritalStatus\r\n );\r\n\r\n return results[this.state.selectedResultsIndicator].filter(\r\n datum => datum.isInUnion === isInUnion\r\n );\r\n };\r\n\r\n getChartSurveyData = surveyData => {\r\n if (!surveyData) {\r\n return;\r\n }\r\n\r\n const isInUnion = convertMaritalStatusToIsInUnion(\r\n this.state.selectedChartsMaritalStatus\r\n );\r\n\r\n return surveyData.filter(datum => datum.isInUnion === isInUnion);\r\n };\r\n\r\n getChartResults = () => {\r\n const measureResultsForPeriod = this.getMeasureResultsForPeriod(\r\n this.state.selectedChartsMeasure\r\n );\r\n\r\n if (!measureResultsForPeriod) {\r\n return;\r\n }\r\n\r\n const isInUnion = convertMaritalStatusToIsInUnion(\r\n this.state.selectedChartsMaritalStatus\r\n );\r\n\r\n const results = Object.keys(measureResultsForPeriod).reduce(\r\n (result, indicator) => {\r\n if (this.state.selectedChartsIndicators.has(indicator)) {\r\n result[indicator] = measureResultsForPeriod[indicator].filter(\r\n datum => datum.isInUnion === isInUnion\r\n );\r\n }\r\n\r\n return result;\r\n },\r\n {}\r\n );\r\n\r\n if (\r\n !Object.keys(results).length ||\r\n !results[Object.keys(results)[0]].length\r\n ) {\r\n return;\r\n }\r\n\r\n return results;\r\n };\r\n\r\n onSelectRun = runId => {\r\n this.setStateSafely({\r\n selectedRunId: runId,\r\n selectedCountryNumericCode: undefined,\r\n selectedRegion: undefined\r\n });\r\n\r\n this.selectDefaultCountryOrRegion(runId);\r\n };\r\n\r\n onSelectPopulation = population => {\r\n this.setStateSafely({\r\n selectedPopulation: population,\r\n });\r\n };\r\n\r\n onSelectCountry = countryNumericCode => {\r\n this.setStateSafely({\r\n selectedCountryNumericCode: countryNumericCode,\r\n selectedRegion: undefined\r\n });\r\n };\r\n\r\n onSelectRegion = region => {\r\n this.setStateSafely({\r\n selectedRegion: region\r\n });\r\n };\r\n\r\n onChangePeriod = period => {\r\n this.setStateSafely({\r\n period\r\n });\r\n };\r\n\r\n onViewRun = () => {\r\n this.viewRun();\r\n };\r\n\r\n onChangeResultsMeasure = measure => {\r\n this.setStateSafely({\r\n selectedResultsMeasure: measure,\r\n selectedResultsIndicator:\r\n measure === \"percentage\" ||\r\n this.state.selectedResultsIndicator !== \"ratioModernAny\"\r\n ? this.state.selectedResultsIndicator\r\n : indicators[0].value\r\n });\r\n };\r\n\r\n onChangeResultsIndicator = indicator => {\r\n this.setStateSafely({\r\n selectedResultsIndicator: indicator\r\n });\r\n };\r\n\r\n onChangeResultsMaritalStatus = martialStatus => {\r\n this.setStateSafely({\r\n selectedResultsMaritalStatus: martialStatus\r\n });\r\n };\r\n\r\n onToggleExportedResultsMeasure = measure => {\r\n const selectedExportedResultsMeasures = new Set(\r\n this.state.selectedExportedResultsMeasures\r\n );\r\n\r\n toggleSetExistence(selectedExportedResultsMeasures, measure);\r\n\r\n this.setStateSafely({\r\n selectedExportedResultsMeasures\r\n });\r\n };\r\n\r\n onToggleExportedResultsIndicator = indicator => {\r\n const selectedExportedResultsIndicators = new Set(\r\n this.state.selectedExportedResultsIndicators\r\n );\r\n\r\n toggleSetExistence(selectedExportedResultsIndicators, indicator);\r\n\r\n this.setStateSafely({\r\n selectedExportedResultsIndicators\r\n });\r\n };\r\n\r\n onDownloadSelectedResults = () => {\r\n api\r\n .downloadResults(\r\n this.state.selectedRunId,\r\n undefined,\r\n this.getSelectedCountryNumericCodeOrRegion(),\r\n Array.from(this.state.selectedExportedResultsMeasures),\r\n Array.from(this.state.selectedExportedResultsIndicators),\r\n this.signal.token\r\n )\r\n .then(response => {\r\n if (!response) {\r\n return;\r\n }\r\n\r\n const run = this.state.runs[this.state.selectedRunId];\r\n\r\n if (run) {\r\n fileDownload(response.data, createSlug(run.name, \"results.csv\"));\r\n }\r\n });\r\n };\r\n\r\n onDownloadAllResults = () => {\r\n api\r\n .downloadResults(\r\n this.state.selectedRunId,\r\n undefined,\r\n this.getSelectedCountryNumericCodeOrRegion(),\r\n [\"percentage\", \"count\"],\r\n indicators.map(indicator => indicator.value),\r\n this.signal.token\r\n )\r\n .then(response => {\r\n if (!response) {\r\n return;\r\n }\r\n\r\n const run = this.state.runs[this.state.selectedRunId];\r\n\r\n if (run) {\r\n fileDownload(response.data, createSlug(run.name, \"all_results.csv\"));\r\n }\r\n });\r\n };\r\n\r\n onDownloadAllData = () => {\r\n api\r\n .downloadData(\r\n this.state.selectedRunId,\r\n this.getSelectedCountryNumericCodeOrRegion(),\r\n this.signal.token\r\n )\r\n .then(response => {\r\n if (!response) {\r\n return;\r\n }\r\n\r\n const run = this.state.runs[this.state.selectedRunId];\r\n\r\n if (run) {\r\n fileDownload(response.data, createSlug(run.name, \"all_data.zip\"));\r\n }\r\n });\r\n };\r\n\r\n onChangeChartsMeasure = measure => {\r\n this.setStateSafely({\r\n selectedChartsMeasure: measure\r\n });\r\n };\r\n\r\n onChangeChartsMaritalStatus = martialStatus => {\r\n this.setStateSafely({\r\n selectedChartsMaritalStatus: martialStatus\r\n });\r\n };\r\n\r\n onToggleChart = chart => {\r\n const selectedChartsIndicators = new Set(\r\n this.state.selectedChartsIndicators\r\n );\r\n\r\n toggleSetExistence(selectedChartsIndicators, chart);\r\n\r\n this.setStateSafely({\r\n selectedChartsIndicators\r\n });\r\n };\r\n\r\n onToggleSurveyLegend = () => {\r\n this.setStateSafely({\r\n showSurveyLegend: !this.state.showSurveyLegend\r\n });\r\n };\r\n\r\n onChangeExportedChartSet = chartSet => {\r\n this.setStateSafely({\r\n selectedExportedChartSet: chartSet\r\n });\r\n };\r\n\r\n onChangeExportedChartsMeasure = measure => {\r\n this.setStateSafely({\r\n selectedExportedChartsMeasure: measure\r\n });\r\n };\r\n\r\n onChangeExportedChartsMaritalStatus = maritalStatus => {\r\n this.setStateSafely({\r\n selectedExportedChartsMaritalStatus: maritalStatus\r\n });\r\n };\r\n\r\n onDownloadChartSet = () => {\r\n api\r\n .downloadChartSet(\r\n this.state.selectedRunId,\r\n undefined,\r\n this.getSelectedCountryNumericCodeOrRegion(),\r\n this.state.selectedExportedChartSet,\r\n this.state.selectedExportedChartsMaritalStatus,\r\n this.state.selectedExportedChartsMeasure,\r\n this.signal.token\r\n )\r\n .then(response => {\r\n if (!response) {\r\n return;\r\n }\r\n\r\n const run = this.state.runs[this.state.selectedRunId];\r\n\r\n if (run) {\r\n const prefix = `${run.name}_${this.state.selectedExportedChartSet}`;\r\n\r\n fileDownload(response.data, createSlug(prefix, \"charts.pdf\"));\r\n }\r\n });\r\n };\r\n\r\n onDownloadSelectedCharts = () => {\r\n api\r\n .downloadCharts(\r\n this.state.selectedRunId,\r\n undefined,\r\n this.getSelectedCountryNumericCodeOrRegion(),\r\n this.state.selectedExportedChartsMaritalStatus,\r\n this.state.selectedExportedChartsMeasure,\r\n Array.from(this.state.selectedChartsIndicators),\r\n this.signal.token\r\n )\r\n .then(response => {\r\n if (!response) {\r\n return;\r\n }\r\n\r\n const run = this.state.runs[this.state.selectedRunId];\r\n\r\n if (run) {\r\n fileDownload(response.data, createSlug(run.name, \"charts.pdf\"));\r\n }\r\n });\r\n };\r\n\r\n componentDidMount() {\r\n this.setStateSafely({\r\n loadingData: true\r\n });\r\n\r\n // noinspection JSCheckFunctionSignatures\r\n Promise.all([\r\n api.fetchDatabases(this.signal.token),\r\n api.fetchRuns(false, false, this.signal.token),\r\n api.fetchChartSets(this.signal.token)\r\n ])\r\n .then(response => {\r\n if (!response || response.some(item => !item)) {\r\n return;\r\n }\r\n\r\n const databases = normalizeDatabases(response[0].data);\r\n const runs = normalizeRuns(response[1].data);\r\n const chartSets = normalizeChartSets(response[2].data);\r\n\r\n let { run: selectedRunId } = queryString.parse(\r\n this.props.location.search\r\n );\r\n\r\n if (selectedRunId && !runs[selectedRunId]) {\r\n console.log(`Run ${selectedRunId} does not exist`);\r\n\r\n selectedRunId = undefined;\r\n }\r\n\r\n const selectedRegion =\r\n (selectedRunId &&\r\n runs[selectedRunId] &&\r\n runs[selectedRunId].regionCodes.length &&\r\n runs[selectedRunId].regionCodes[0]) ||\r\n undefined;\r\n\r\n const selectedCountryNumericCode =\r\n (!selectedRegion &&\r\n selectedRunId &&\r\n runs[selectedRunId] &&\r\n runs[selectedRunId].countryNumericCodes.length &&\r\n runs[selectedRunId].countryNumericCodes[0]) ||\r\n undefined;\r\n\r\n this.setStateSafely(\r\n {\r\n databases: databases,\r\n runs: runs,\r\n selectedRunId,\r\n selectedCountryNumericCode,\r\n selectedRegion,\r\n chartSets\r\n },\r\n selectedRunId\r\n ? () => {\r\n this.viewRun();\r\n }\r\n : undefined\r\n );\r\n })\r\n .finally(() => {\r\n this.setStateSafely({\r\n loadingData: false\r\n });\r\n });\r\n }\r\n\r\n componentWillUnmount() {\r\n this.unmounting = true;\r\n this.signal.cancel();\r\n }\r\n\r\n render() {\r\n const { firstYear, lastYear } = {\r\n firstYear: minimumYear,\r\n lastYear: maximumYear\r\n };\r\n\r\n const surveyData = filterSurveyData(\r\n this.state.surveyData,\r\n firstYear,\r\n lastYear\r\n );\r\n\r\n const populationData = filterPopulationData(\r\n this.state.populationData,\r\n firstYear,\r\n lastYear\r\n );\r\n\r\n return (\r\n <ViewRun\r\n match={this.props.match}\r\n loadingData={this.state.loadingData}\r\n runs={this.state.runs}\r\n selectedRunId={this.state.selectedRunId}\r\n countries={this.getCountries(this.state.selectedRunId)}\r\n selectedCountryNumericCode={this.state.selectedCountryNumericCode}\r\n selectedPopulation={this.state.selectedPopulation}\r\n regions={this.getRegions(this.state.selectedRunId)}\r\n selectedRegion={this.state.selectedRegion}\r\n period={this.state.period}\r\n loadingRun={this.state.loadingRun}\r\n runTitle={this.createRunTitle()}\r\n surveyData={surveyData}\r\n populationData={populationData}\r\n emuData={this.state.emuData}\r\n selectedResultsMeasure={this.state.selectedResultsMeasure}\r\n selectedResultsIndicator={this.state.selectedResultsIndicator}\r\n selectedResultsMaritalStatus={this.state.selectedResultsMaritalStatus}\r\n tableResults={this.getTableResults()}\r\n selectedExportedResultsMeasures={Array.from(\r\n this.state.selectedExportedResultsMeasures\r\n )}\r\n selectedExportedResultsIndicators={Array.from(\r\n this.state.selectedExportedResultsIndicators\r\n )}\r\n disableSelectedResultsDownload={\r\n !api.createResultsDownloadUrl(\r\n this.state.selectedRunId,\r\n undefined,\r\n this.getSelectedCountryNumericCodeOrRegion(),\r\n Array.from(this.state.selectedExportedResultsMeasures),\r\n Array.from(this.state.selectedExportedResultsIndicators)\r\n )\r\n }\r\n disableAllResultsDownload={\r\n !this.getSelectedCountryNumericCodeOrRegion()\r\n }\r\n disableAllDataDownload={!this.getSelectedCountryNumericCodeOrRegion()}\r\n selectedChartsMeasure={this.state.selectedChartsMeasure}\r\n selectedChartsMaritalStatus={this.state.selectedChartsMaritalStatus}\r\n selectedChartsIndicators={Array.from(\r\n this.state.selectedChartsIndicators\r\n )}\r\n showSurveyLegend={this.state.showSurveyLegend}\r\n chartResults={this.getChartResults()}\r\n chartSurveyData={this.getChartSurveyData(surveyData)}\r\n chartEmuData={\r\n this.state.selectedChartsMaritalStatus === \"married\"\r\n ? this.state.emuData\r\n : undefined\r\n }\r\n chartSets={this.state.chartSets}\r\n selectedExportedChartSet={this.state.selectedExportedChartSet}\r\n selectedExportedChartsMeasure={this.state.selectedExportedChartsMeasure}\r\n selectedExportedChartsMaritalStatus={\r\n this.state.selectedExportedChartsMaritalStatus\r\n }\r\n disableChartSetDownload={\r\n !api.createChartSetDownloadUrl(\r\n this.state.selectedRunId,\r\n undefined,\r\n this.getSelectedCountryNumericCodeOrRegion(),\r\n this.state.selectedExportedChartSet,\r\n this.state.selectedExportedChartsMaritalStatus,\r\n this.state.selectedExportedChartsMeasure\r\n )\r\n }\r\n disableSelectedChartsDownload={\r\n !api.createChartsDownloadUrl(\r\n this.state.selectedRunId,\r\n undefined,\r\n this.getSelectedCountryNumericCodeOrRegion(),\r\n this.state.selectedExportedChartsMaritalStatus,\r\n this.state.selectedExportedChartsMeasure,\r\n Array.from(this.state.selectedChartsIndicators)\r\n )\r\n }\r\n onSelectRun={this.onSelectRun}\r\n onSelectCountry={this.onSelectCountry}\r\n onSelectRegion={this.onSelectRegion}\r\n onSelectPopulation={this.onSelectPopulation}\r\n onChangePeriod={this.onChangePeriod}\r\n onViewRun={this.onViewRun}\r\n onChangeResultsMeasure={this.onChangeResultsMeasure}\r\n onChangeResultsIndicator={this.onChangeResultsIndicator}\r\n onChangeResultsMaritalStatus={this.onChangeResultsMaritalStatus}\r\n onToggleExportedResultsMeasure={this.onToggleExportedResultsMeasure}\r\n onToggleExportedResultsIndicator={this.onToggleExportedResultsIndicator}\r\n onDownloadSelectedResults={this.onDownloadSelectedResults}\r\n onDownloadAllResults={this.onDownloadAllResults}\r\n onDownloadAllData={this.onDownloadAllData}\r\n onChangeChartsMeasure={this.onChangeChartsMeasure}\r\n onChangeChartsMaritalStatus={this.onChangeChartsMaritalStatus}\r\n onToggleChart={this.onToggleChart}\r\n onToggleSurveyLegend={this.onToggleSurveyLegend}\r\n onChangeExportedChartSet={this.onChangeExportedChartSet}\r\n onChangeExportedChartsMeasure={this.onChangeExportedChartsMeasure}\r\n onChangeExportedChartsMaritalStatus={\r\n this.onChangeExportedChartsMaritalStatus\r\n }\r\n onDownloadChartSet={this.onDownloadChartSet}\r\n onDownloadSelectedCharts={this.onDownloadSelectedCharts}\r\n />\r\n );\r\n }\r\n}\r\n\r\nexport default withTranslation()(withErrorBoundary(ViewRunContainer));\r\n","import React from \"react\";\r\nimport * as PropTypes from \"prop-types\";\r\nimport { Link, Route, Switch, withRouter } from \"react-router-dom\";\r\nimport { withStyles } from \"@material-ui/core/styles\";\r\nimport AppBar from \"@material-ui/core/AppBar\";\r\nimport Button from \"@material-ui/core/Button\";\r\nimport Tab from \"@material-ui/core/Tab\";\r\nimport Tabs from \"@material-ui/core/Tabs\";\r\nimport Toolbar from \"@material-ui/core/Toolbar\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport About from \"./About\";\r\nimport CompareRunsContainer from \"../containers/CompareRunsContainer\";\r\nimport LanguageChooser from \"./LanguageChooser/LanguageChooser\";\r\nimport ManageDataContainer from \"../containers/ManageDataContainer\";\r\nimport PrepareDataContainer from \"../containers/PrepareDataContainer\";\r\nimport RunHistoryContainer from \"../containers/RunHistoryContainer\";\r\nimport StartRunContainer from \"../containers/StartRunContainer\";\r\nimport ViewRunContainer from \"../containers/ViewRunContainer\";\r\n\r\nconst styles = theme => ({\r\n appBar: {\r\n zIndex: theme.zIndex.drawer + 1\r\n },\r\n brand: {\r\n marginRight: 30,\r\n whiteSpace: \"nowrap\"\r\n },\r\n content: {\r\n margin: 20\r\n },\r\n languages: {\r\n marginRight: 20\r\n },\r\n signOut: {\r\n display: \"flex\",\r\n flexGrow: 1,\r\n justifyContent: \"flex-end\"\r\n },\r\n signOutLabel: {\r\n whiteSpace: \"nowrap\"\r\n }\r\n});\r\n\r\nconst getMainSectionPath = path => `/${path.split(\"/\")[1]}`;\r\n\r\nconst App = props => {\r\n const mainSectionPath = getMainSectionPath(props.location.pathname);\r\n\r\n const { t } = useTranslation();\r\n\r\n return (\r\n <div>\r\n <AppBar position=\"sticky\" className={props.classes.appBar}>\r\n <Toolbar variant=\"dense\">\r\n <Typography\r\n variant=\"h6\"\r\n color=\"inherit\"\r\n className={props.classes.brand}\r\n >\r\n {t(\"APP_TITLE\")}\r\n </Typography>\r\n\r\n <Tabs\r\n variant=\"scrollable\"\r\n scrollButtons=\"auto\"\r\n value={mainSectionPath}\r\n >\r\n <Tab label={t(\"About\")} value=\"/\" component={Link} to=\"/\" />\r\n <Tab\r\n label={t(\"Start run|APP\", {\r\n defaultValue: \"Start run\"\r\n })}\r\n value=\"/startrun\"\r\n component={Link}\r\n to=\"/startrun\"\r\n />\r\n <Tab\r\n label={t(\"View run\")}\r\n value=\"/viewrun\"\r\n component={Link}\r\n to=\"/viewrun\"\r\n />\r\n <Tab\r\n label={t(\"Compare runs\")}\r\n value=\"/compareruns\"\r\n component={Link}\r\n to=\"/compareruns\"\r\n />\r\n <Tab\r\n label={t(\"Run history\")}\r\n value=\"/history\"\r\n component={Link}\r\n to=\"/history\"\r\n />\r\n <Tab\r\n label={t(\"Prepare data\")}\r\n value=\"/preparedata\"\r\n component={Link}\r\n to=\"/preparedata\"\r\n />\r\n <Tab\r\n label={t(\"Manage data\")}\r\n value=\"/managedata\"\r\n component={Link}\r\n to=\"/managedata\"\r\n />\r\n </Tabs>\r\n\r\n <div className={props.classes.languages}>\r\n <LanguageChooser onChangeLanguage={props.onChangeLanguage} />\r\n </div>\r\n\r\n <div className={props.classes.signIn}>\r\n <Button\r\n color=\"inherit\"\r\n classes={{\r\n label: props.classes.signOutLabel\r\n }}\r\n onClick={props.onLogout}\r\n >\r\n {t(\"Sign out\")}\r\n </Button>\r\n </div>\r\n </Toolbar>\r\n </AppBar>\r\n\r\n <div className={props.classes.content}>\r\n <Switch>\r\n <Route exact path=\"/\" component={About} />\r\n <Route path=\"/startrun\" component={StartRunContainer} />\r\n <Route path=\"/viewrun\" component={ViewRunContainer} />\r\n <Route path=\"/compareruns\" component={CompareRunsContainer} />\r\n <Route path=\"/history\" component={RunHistoryContainer} />\r\n <Route path=\"/preparedata\" component={PrepareDataContainer} />\r\n <Route path=\"/managedata\" component={ManageDataContainer} />\r\n </Switch>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nApp.propTypes = {\r\n onChangeLanguage: PropTypes.func.isRequired,\r\n onLogout: PropTypes.func.isRequired\r\n};\r\n\r\nexport default withRouter(withStyles(styles)(App));\r\n","import React, { Component } from \"react\";\r\nimport authentication from \"../authentication\";\r\nimport * as api from \"../api/api\";\r\nimport i18next from \"i18next\";\r\nimport App from \"../components/App\";\r\n\r\nclass AppContainer extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.signal = api.getSignal();\r\n\r\n this.state = {};\r\n }\r\n\r\n setStateSafely = (state, callback) => {\r\n if (!this.unmounting) {\r\n this.setState(state, callback);\r\n }\r\n };\r\n\r\n onChangeLanguage = language => {\r\n // noinspection JSIgnoredPromiseFromCall\r\n i18next.changeLanguage(language).then(() => {\r\n document.title = i18next.t(\"APP_TITLE\");\r\n });\r\n };\r\n\r\n onLogout = () => {\r\n authentication.logout(error => {\r\n this.setStateSafely({\r\n error\r\n });\r\n\r\n if (!error) {\r\n this.props.history.push(\"/login\");\r\n }\r\n }, this.signal.token);\r\n };\r\n\r\n componentWillUnmount() {\r\n this.unmounting = true;\r\n this.signal.cancel();\r\n }\r\n\r\n render() {\r\n return (\r\n <App onChangeLanguage={this.onChangeLanguage} onLogout={this.onLogout} />\r\n );\r\n }\r\n}\r\n\r\nexport default AppContainer;\r\n","import React from \"react\";\r\nimport * as PropTypes from \"prop-types\";\r\nimport withStyles from \"@material-ui/core/styles/withStyles\";\r\nimport Avatar from \"@material-ui/core/Avatar\";\r\nimport Button from \"@material-ui/core/Button\";\r\nimport Checkbox from \"@material-ui/core/Checkbox\";\r\nimport FormControl from \"@material-ui/core/FormControl\";\r\nimport FormControlLabel from \"@material-ui/core/FormControlLabel\";\r\nimport Input from \"@material-ui/core/Input\";\r\nimport InputLabel from \"@material-ui/core/InputLabel\";\r\nimport Paper from \"@material-ui/core/Paper\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport LockOutlinedIcon from \"@material-ui/icons/LockOutlined\";\r\nimport { withTranslation } from \"react-i18next\";\r\nimport LanguageChooser from \"./LanguageChooser/LanguageChooser\";\r\nimport LastUpdated from \"./LastUpdated\";\r\n\r\nconst styles = (theme) => ({\r\n avatar: {\r\n margin: theme.spacing.unit,\r\n backgroundColor: theme.palette.secondary.main,\r\n },\r\n container: {\r\n width: \"auto\",\r\n display: \"block\", // Fix IE 11 issue\r\n marginLeft: theme.spacing.unit * 3,\r\n marginRight: theme.spacing.unit * 3,\r\n [theme.breakpoints.up(400 + theme.spacing.unit * 3 * 2)]: {\r\n width: 400,\r\n marginLeft: \"auto\",\r\n marginRight: \"auto\",\r\n },\r\n },\r\n error: {\r\n marginTop: 20,\r\n fontWeight: \"bold\",\r\n color: theme.palette.error.dark,\r\n },\r\n form: {\r\n width: \"100%\", // Fix IE 11 issue\r\n marginTop: theme.spacing.unit,\r\n },\r\n languages: {\r\n margin: \"20px 0 10px\",\r\n textAlign: \"center\",\r\n },\r\n lastUpdated: {\r\n textAlign: \"center\",\r\n },\r\n paper: {\r\n marginTop: theme.spacing.unit * 8,\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n padding: `${theme.spacing.unit * 2}px ${theme.spacing.unit * 3}px ${theme\r\n .spacing.unit * 3}px`,\r\n },\r\n register: {\r\n marginTop: 20,\r\n },\r\n submit: {\r\n marginTop: theme.spacing.unit * 3,\r\n },\r\n});\r\n\r\nconst Login = ({ classes, t, ...rest }) => (\r\n <div className={classes.container}>\r\n <Paper className={classes.paper}>\r\n <Avatar className={classes.avatar}>\r\n <LockOutlinedIcon />\r\n </Avatar>\r\n\r\n <Typography component=\"h1\" variant=\"h5\">\r\n {t(\"Sign in\")}\r\n </Typography>\r\n\r\n {rest.systemStatusMessage ? (\r\n <div className={classes.error}>{rest.systemStatusMessage}</div>\r\n ) : (\r\n undefined\r\n )}\r\n\r\n {rest.error ? (\r\n <div className={classes.error}>{rest.error}</div>\r\n ) : (\r\n undefined\r\n )}\r\n\r\n <form className={classes.form}>\r\n <FormControl margin=\"normal\" required fullWidth>\r\n <InputLabel htmlFor=\"username\">{t(\"Username\")}</InputLabel>\r\n <Input\r\n id=\"username\"\r\n name=\"username\"\r\n autoComplete=\"username\"\r\n autoFocus\r\n value={rest.username || \"\"}\r\n onChange={(e) => {\r\n rest.onChangeUsername(e.target.value);\r\n }}\r\n />\r\n </FormControl>\r\n\r\n <FormControl margin=\"normal\" required fullWidth>\r\n <InputLabel htmlFor=\"password\">{t(\"Password\")}</InputLabel>\r\n <Input\r\n name=\"password\"\r\n type=\"password\"\r\n id=\"password\"\r\n value={rest.password || \"\"}\r\n autoComplete=\"current-password\"\r\n onChange={(e) => {\r\n rest.onChangePassword(e.target.value);\r\n }}\r\n />\r\n </FormControl>\r\n\r\n <FormControlLabel\r\n control={<Checkbox value=\"remember\" color=\"primary\" />}\r\n label={t(\"Remember me\")}\r\n checked={rest.rememberMe}\r\n onChange={rest.onToggleRememberMe}\r\n />\r\n\r\n <Button\r\n type=\"submit\"\r\n fullWidth\r\n variant=\"contained\"\r\n color=\"primary\"\r\n className={classes.submit}\r\n disabled={!rest.systemOperational}\r\n onClick={(e) => {\r\n e.preventDefault();\r\n\r\n rest.onSubmit(e);\r\n }}\r\n >\r\n {t(\"Sign in\")}\r\n </Button>\r\n\r\n <div className={classes.register}>\r\n {t(\"Don't have an account?\")}{\" \"}\r\n <a\r\n href={`https://authuser.avenirhealth.org/?sv=${\r\n process.env.REACT_APP_AUTHENTICATION_SERVICE_ID\r\n }&md=new`}\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n >\r\n {t(\"Register\")}\r\n </a>{\" \"}\r\n {t(\"now.\")}\r\n </div>\r\n\r\n <div className={classes.register}>\r\n {t(\"Forgotten your password?\")}{\" \"}\r\n <a\r\n href={`https://authuser.avenirhealth.org/?sv=${\r\n process.env.REACT_APP_AUTHENTICATION_SERVICE_ID\r\n }&md=fg`}\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n >\r\n {t(\"Reset\")}\r\n </a>{\" \"}\r\n {t(\"it.\")}\r\n </div>\r\n </form>\r\n </Paper>\r\n\r\n <div className={classes.languages}>\r\n <LanguageChooser onChangeLanguage={rest.onChangeLanguage} />\r\n </div>\r\n\r\n <div className={classes.lastUpdated}>\r\n <LastUpdated />\r\n </div>\r\n </div>\r\n);\r\n\r\nLogin.propTypes = {\r\n systemOperational: PropTypes.bool,\r\n systemStatusMessage: PropTypes.string,\r\n username: PropTypes.string,\r\n password: PropTypes.string,\r\n rememberMe: PropTypes.bool.isRequired,\r\n error: PropTypes.string,\r\n onChangeUsername: PropTypes.func.isRequired,\r\n onChangePassword: PropTypes.func.isRequired,\r\n onToggleRememberMe: PropTypes.func.isRequired,\r\n onSubmit: PropTypes.func.isRequired,\r\n onChangeLanguage: PropTypes.func.isRequired,\r\n};\r\n\r\nLogin.defaultProps = {\r\n systemOperational: true,\r\n};\r\n\r\nexport default withTranslation()(withStyles(styles)(Login));\r\n","import React, { Component } from \"react\";\r\nimport LogRocket from \"logrocket\";\r\nimport authentication from \"../authentication\";\r\nimport { Redirect } from \"react-router-dom\";\r\nimport * as api from \"../api/api\";\r\nimport i18next from \"i18next\";\r\nimport Login from \"../components/Login\";\r\n\r\nclass LoginContainer extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.signal = api.getSignal();\r\n\r\n this.state = {\r\n rememberMe: false\r\n };\r\n }\r\n\r\n setStateSafely = (state, callback) => {\r\n if (!this.unmounting) {\r\n this.setState(state, callback);\r\n }\r\n };\r\n\r\n onChangeUsername = username => {\r\n this.setStateSafely({\r\n username\r\n });\r\n };\r\n\r\n onChangePassword = password => {\r\n this.setStateSafely({\r\n password\r\n });\r\n };\r\n\r\n onToggleRememberMe = () => {\r\n this.setStateSafely({\r\n rememberMe: !this.state.rememberMe\r\n });\r\n };\r\n\r\n onSubmit = () => {\r\n authentication.login(\r\n this.state.username,\r\n this.state.password,\r\n error => {\r\n if (!error) {\r\n LogRocket.identify(this.state.username);\r\n }\r\n\r\n this.setStateSafely({\r\n redirectToReferrer: !error,\r\n error: error\r\n ? `${this.state.username} could not be authenticated`\r\n : undefined\r\n });\r\n },\r\n this.signal.token\r\n );\r\n };\r\n\r\n onChangeLanguage = language => {\r\n // noinspection JSIgnoredPromiseFromCall\r\n i18next.changeLanguage(language);\r\n };\r\n\r\n componentDidMount() {\r\n api.fetchSystemStatus().then(response => {\r\n if (!response) {\r\n return;\r\n }\r\n\r\n this.setStateSafely({\r\n systemOperational: response.data.systemOperational,\r\n systemStatusMessage: response.data.message\r\n });\r\n });\r\n }\r\n\r\n componentWillUnmount() {\r\n this.unmounting = true;\r\n this.signal.cancel();\r\n }\r\n\r\n render() {\r\n if (this.state.redirectToReferrer) {\r\n const { from } = this.props.location.state || { from: { pathname: \"/\" } };\r\n\r\n return <Redirect to={from} />;\r\n }\r\n\r\n return (\r\n <Login\r\n systemOperational={this.state.systemOperational}\r\n systemStatusMessage={this.state.systemStatusMessage}\r\n username={this.state.username}\r\n password={this.state.password}\r\n rememberMe={this.state.rememberMe}\r\n error={this.state.error}\r\n onChangeUsername={this.onChangeUsername}\r\n onChangePassword={this.onChangePassword}\r\n onToggleRememberMe={this.onToggleRememberMe}\r\n onSubmit={this.onSubmit}\r\n onChangeLanguage={this.onChangeLanguage}\r\n />\r\n );\r\n }\r\n}\r\n\r\nexport default LoginContainer;\r\n","import React from \"react\";\r\nimport authentication from \"../authentication\";\r\nimport { Redirect, Route } from \"react-router-dom\";\r\n\r\n// https://tylermcginnis.com/react-router-protected-routes-authentication/\r\n\r\nconst PrivateRoute = ({ component: Component, ...rest }) => (\r\n <Route\r\n {...rest}\r\n render={props =>\r\n authentication.getUsername() ? (\r\n <Component {...props} />\r\n ) : (\r\n <Redirect\r\n to={{ pathname: \"/login\", state: { from: props.location } }}\r\n />\r\n )\r\n }\r\n />\r\n);\r\n\r\nexport default PrivateRoute;\r\n","import React, { Component } from \"react\";\r\nimport { Route, HashRouter as Router, Switch } from \"react-router-dom\";\r\nimport { MuiThemeProvider } from \"@material-ui/core/styles\";\r\nimport CssBaseline from \"@material-ui/core/CssBaseline\";\r\nimport { withErrorBoundary } from \"./errors\";\r\nimport { withTranslation } from \"react-i18next\";\r\nimport theme from \"./theme\";\r\nimport AppContainer from \"./containers/AppContainer\";\r\nimport LoginContainer from \"./containers/LoginContainer\";\r\nimport PrivateRoute from \"./components/PrivateRoute\";\r\n\r\nclass Root extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {};\r\n }\r\n\r\n componentDidMount() {\r\n document.title = this.props.t(\"APP_TITLE\");\r\n }\r\n\r\n render() {\r\n return (\r\n <Router>\r\n <MuiThemeProvider theme={theme}>\r\n <CssBaseline />\r\n <Switch>\r\n <Route path=\"/login\" component={LoginContainer} />\r\n <PrivateRoute path=\"/\" component={AppContainer} />\r\n </Switch>\r\n </MuiThemeProvider>\r\n </Router>\r\n );\r\n }\r\n}\r\n\r\nexport default withErrorBoundary(withTranslation()(Root));\r\n","import \"core-js/fn/promise\";\r\nimport React from \"react\";\r\nimport ReactDOM from \"react-dom\";\r\nimport * as Sentry from \"@sentry/browser\";\r\nimport LogRocket from \"logrocket\";\r\nimport \"./index.css\";\r\nimport { LicenseManager } from \"ag-grid-enterprise\";\r\nimport \"./i18n\";\r\nimport Root from \"./Root\";\r\n\r\nconst integrateLogRocketWithSentry = (sessionUrl) => {\r\n Sentry.configureScope((scope) => {\r\n scope.addEventProcessor(async (event) => {\r\n event.extra.sessionURL = sessionUrl;\r\n return event;\r\n });\r\n });\r\n};\r\n\r\nSentry.init({\r\n dsn: process.env.REACT_APP_SENTRY_DSN,\r\n});\r\n\r\nLogRocket.init(process.env.REACT_APP_LOG_ROCKET_APP_ID);\r\nLogRocket.getSessionURL(integrateLogRocketWithSentry);\r\n\r\nLicenseManager.setLicenseKey(\r\n \"Avenir_Health__MultiApp_1Devs8_November_2019__MTU3MzE3MTIwMDAwMA==5fe24a203ae4d849fe9768ee0a3219f5\"\r\n);\r\n\r\nReactDOM.render(<Root />, document.getElementById(\"root\"));\r\n"],"sourceRoot":""}