{"version":3,"sources":["config/config.js","theme.js","utilities/utils.js","config/topics.js","components/Map/GeometryToggleCard.js","components/Map/LayerComp.js","components/Map/LegendItems.js","components/UI/MobileDrawer.js","components/Map/LegendList.js","components/Map/LeafletControlGeocoder.js","components/MainContent/MapContent.js","components/Charts/TrendLine.js","components/Charts/HorizontalBar.js","components/Charts/BarLineMix.js","components/MainContent/ChartContent.js","components/MainContent/TextContent.js","utilities/ncdmUtils.js","components/UI/CustomDataGridProFooter.js","components/MainContent/AttributeTable.js","components/MainContent/TableContent.js","components/MainContent/NCDMContent.js","components/MainContent/CommunityProfile.js","components/UI/AboutTheData.js","components/UI/OptionsPopup.js","components/MainContent/ButtonSwitch.js","components/MainContent/About.js","components/MainContent/TopicOverview.js","components/UI/MissingSuppressed.js","components/UI/ChartInfoModal.js","components/MainContent/HealthTopic.js","components/Navigation/TopicsDrawer.js","components/Navigation/Navbar.js","components/HomePage/HomeContent.js","components/UI/ErrorFallback.js","App.js","index.js"],"names":["config","tablePageSize","tableRowHeight","ncdmTableRowHeight","defaultMapZoom","statewideACSEndpoint","process","countyACSEndpoint","tractACSEndpoint2019","tractACSEndpoint2021","editableContentEndpoint","ncdmConfigEndpoint","getNcdmDataEndpoint","getAllNcdmDataEndpoint","getDataYearsEndpoint","stateBounds","timeSliderMapCenter","lat","lng","missing","suppressed","lessThanPointOne","missingText","suppressedText","lessThanPointOneText","mdhAttribution","muiTheme","createTheme","palette","secondary","main","light","navbarBlue","darkGray","lightGray","lightBlue","mapHighlight","chartBaseline","dark","barChartPrimary","lineChartPrimary","lineChartSecondary","chartPalette","default","highContrast","hover","stratified","stratifiedHover","discontinuity","boxBackground","tooltipTriggerBorder","piePalette","stackedBarsPalette","components","MuiButtonGroup","styleOverrides","root","color","createMarkup","dirty","__html","DOMPurify","sanitize","USE_PROFILES","html","ADD_ATTR","handleFetchError","response","ok","Error","status","statusText","formatNumber","value","Math","round","toFixed","generateAnnotations","data","labels","includes","indexOf","length","indexForAnnotation","Number","toggleLabel","ctx","e","chart","annotationOpts","options","plugins","annotation","annotations","line","label","enabled","position","y","chartArea","height","update","type","mode","borderColor","borderWidth","xMin","xMax","content","textAlign","enter","leave","box","backgroundColor","borderDash","drawTime","customLegendStyleNames","esriSMSCircleFilled","title","styleMethod","layerStyle","layerOn","r","g","b","size","width","grey","formatRows","layer","stratification","currentTab","index","dataArray","sortField","info","customSortField","row","features","id","contentType","Object","entries","forEach","item","key","push","sort","a","formatColumns","columns","column","customFormat","valueFormatter","toLocaleString","topics","lead","topicTitle","topicPath","category","defaultTabPath","overview","themeOverviews","theme","text","aboutData","countySuppressionRules","range","populationMin","subCountySuppressionRules","themes","themeTitle","themePath","tabs","rates","tabTitle","tabPath","contentTitle","exportTitle","exportSubtitle","mapSets","set","geometry","outFields","columnHeaders","field","headerName","flex","align","headerAlign","exportHeaderName","tableTitle","popupContent","health","name","unit","setLayers","zIndexPosition","yearKey","subtitle","defaultVisible","sourceLayer","url","scaleDependent","referenceLayer","toggleable","custom","isModern","omitCommunityProfile","symbolDescription","line1","line2A","line2B","line3","drawingInfo","renderer","symbol","imageData","angle","xoffset","yoffset","description","counts","trends","chartType","selectable","defaultSelection","defaultSelectionName","defaultSetNames","chartTitle","displayChartTitle","displayXAxisLabel","xAxisLabel","chartXAxisField","displayYAxisLabel","displayChartDiscontinuityGraphic","yAxisLabelLeft","yAxisLabelRight","yAxisIdLeft","yAxisIdRight","chartDataSets","urlParams","param","chartConfig","setName","yAxisID","fill","pointRadius","pointBorderWidth","pointHoverRadius","pointHoverBorderWidth","lineTension","about","resources","disparities","housing","environment","className","poverty","programs","testing","testingTrend","stratifiable","stratifications","baseline","yAxisLabel","valueKey","mainDatasets","order","stratificationDatasets","testingTable","levelTrend","exportHeader","levelTable","offeredEnrollmentTrend","newEnrollmentTrend","dischargeTrend","percentEnrolledTrend","chartSubtitle","displayChartSubtitle","moredata","ncdms","defaultTab","textHeader","textSubheading","textBody","asthma","apiEndpoint","EDRates","ageAdjustedRate","EDTrends","hospitalizations","defaultStratification","undefined","children","climate","omitNcdmData","edTrends","extremeHeat","highContrastPalette","drinkingWater","recipients","locations","renderCell","params","href","target","rel","link","customStyleTitle","heartAttack","rateOver35","rate35to64","rateOver65","unadjustedTrend","ageAdjustedTrend","unadjustedRate","ageAdjRatePM25","copd","hospitalizationTrend","currentSmokers","co","edVisits","edTrend","hospitalTrend","airQuality","ozone","timeSlider","additional","pm25Daily","pm25Annual","monitors","emissions","birthDefects","chartYAxisField","tbi","hospitalization","countyHospitalizationTrend","mortality","countyMortalityTrend","statewideEDTrend","statewideHospTrend","statewideMortalityTrend","causeEDTable","tableSubtitle","causeHospTable","stratifiedEDTable","cdcEDTable","cdcHospTable","cdcMortalityTable","cancer","hasSubtopics","parentTopic","allCause","allCauseTrend","overall","overallTrend","acuteMyeloid","acuteMyeloidTrend","chronicLymphocytic","chronicLymphocyticTrend","acuteLymphocytic","acuteLymphocyticTrend","lung","lungTrend","brain","brainTrend","trend","breast","breastTrend","kidney","kidneyTrend","liver","liverTrend","melanoma","melanomaTrend","lymphoma","lymphomaTrend","thyroid","thyroidTrend","mesothelioma","mesotheliomaTrend","bladder","bladderTrend","prostate","prostateTrend","GeometryToggleCard","selectedGeometry","queryStringParse","jurisdiction","map","layerSet","role","to","CustomReactPopup","feature","selectedLayerSet","checkAvailability","toLowerCase","Typography","split","fontSize","referenceTitle","customTitle","LayerComp","sourceDataRef","mapZoom","setMapLayers","setLayerExtent","setLayersLoading","setMapDemographicContent","useMap","isCancelled","useRef","layerExists","useEffect","eachLayer","mapLayer","_tiles","removeLayer","current","esriLayer","on","loading","layersLoading","load","filter","sampleFeatureProperties","values","_layers","properties","currentLayerMetaData","layerYear","remove","bringToBack","bringToFront","_popup","bindPopup","renderToString","maxWidth","setStyle","smoothFactor","minScale","whenReady","addLayer","hasLayer","prevMapLayers","find","outOfRange","addTo","PointMarker","breakInfo","labelText","missingSuppressed","setMissingSuppressedModalOpen","opacity","onClick","onKeyDown","preventDefault","tabIndex","style","ChoroplethSymbol","active","addMargin","marginLeft","border","LegendItems","useTheme","renderInfo","error","src","alt","itemStyle","classBreakInfos","visualVariables","breakPoint","uniqueValueInfos","visualVariable","stops","MobileDrawer","showDrawer","handleDrawerClose","layers","activeLayers","pathname","determineClassName","determineParams","routeToLayers","Drawer","open","onClose","LegendList","panel","styles","timeSliderMarks","setTimeSliderMarks","useState","expanded","setExpanded","setShowDrawer","window","innerWidth","windowSize","setWindowSize","isFixed","layerIsOn","handleWindowResize","useCallback","marks","toString","layerA","layerB","addEventListener","removeEventListener","Accordion","onChange","event","isExpanded","AccordionSummary","expandIcon","sx","AccordionDetails","Button","variant","LeafletControlGeocoder","mapGeoControl","setMapGeoControl","mapZoomControl","setMapZoomControl","geocoder","L","Control","Geocoder","nominatim","geocodingQueryParams","limit","countrycodes","geocoderControl","query","placeholder","defaultMarkGeocode","iconLabel","collapsed","latlng","geocode","center","marker","btn","document","createElement","innerText","onclick","contentDiv","buttonDiv","createTextNode","appendChild","popup","setContent","fitBounds","bbox","zoomControl","Zoom","addControl","removeControl","doubleClickZoom","disable","scrollWheelZoom","touchZoom","keyboard","getZoom","getCenter","flyTo","LatLng","enable","MapContent","mapRef","mapLayers","topic","tab","search","setMapZoom","setTableData","setChartDemographicContent","min","max","timeSliderMinMax","setTimeSliderMinMax","sliderValue","setSliderValue","selectedLayerRef","currentTabRef","timeSliderActiveLayerRef","debouncedSliderValue","milliSeconds","debouncedValue","setDebouncedValue","handler","setTimeout","clearTimeout","useDebounce","featuresWithinExtent","getBounds","contains","GeoJSON","coordsToLatLng","coordinates","layerDepth","bounds","latLngBounds","coordsToLatLngs","intersects","console","message","extent","reduce","obj","formattedTableData","formatTableLayer","cleanupLeaflet","off","cleanupTimeSlider","visibleLayers","fixed","match","setLayer","esri","markYear","substr","lastIndexOf","minYear","maxYear","firstMapLayer","previousMinMax","existingLayers","visibleLayer","existingLayer","loadLayers","sliderMarkValue","foundMapLayer","mapSet","mapUrl","Grid","xs","MapContainer","zoom","zoomSnap","baseMaps","tileLayer","attribution","control","Slider","defaultValue","step","slice","Chart","register","annotationPlugin","TrendLine","counties","json","selection","setStratification","dataUnavailable","setDataUnavailable","handleDropdownSelect","checkIfNull","setChartInfoModalOpen","chartData","setChartData","PERCENT_DISPLAY","chartRef","handleMissingSuppressed","handleClick","xAxisField","dataSetNames","datasetArray","some","strat","sampleObject","keys","stratGroup","dataset","stratificationDataset","x","baselineDataset","every","dataPoint","datasets","getChartData","loadChart","container","justify","FormControl","Select","county","MenuItem","code","FormHelperText","Alert","severity","ref","maintainAspectRatio","display","padding","bottom","legend","tooltip","intersect","callbacks","dataIndex","isRate","scales","grace","beginAtZero","ticks","callback","context","tick","minRotation","ButtonGroup","disableElevation","strata","HorizontalBar","sortByAxis","yAxisField","sortedData","hoverBackgroundColor","chartLabel","year","skipNull","indexAxis","tooltipItem","raw","BarLineMix","displayEmpty","inputProps","labelColor","datasetIndex","userCallback","margin","cursor","borderRight","minHeight","background","items","axis","nextItem","filterKey","flat","ChartContent","topicDataYears","currentData","setCurrentData","setSelection","handleError","useErrorHandler","popupFeature","MDCode","baseURL","selected","queryString","urlParamString","currentParamObject","currentIndex","paramsArr","additionalParams","getQueryString","fetch","then","res","resJson","rawJson","sanitizedData","copy","layerInfo","header","stratificationColumns","stateColumnIndex","findIndex","splice","sortedFeatures","formatTableData","catch","TextContent","sanitizeString","str","replace","exportAsCsv","exportCsv","uiCsv","yearDetails","Papa","parse","sanitizedTitle","sanitizedSubtitle","sanitizedYearDetails","formattedData","i","unparse","finalizedCsv","blob","Blob","download","URL","createObjectURL","warn","body","click","removeChild","sortNcdmsStatewideFirst","ncdmContent","yearsend","CustomDataGridProFooter","GridFooter","flexDirection","marginRight","CustomToolbar","apiRef","GridToolbarContainer","GridToolbarColumnsButton","GridToolbarFilterButton","getDataAsCsv","join","TabPanel","tabNumber","tableData","highlightedPolygon","setHighlightedPolygon","useGridApiRef","DataGridPro","disableColumnMenu","disableSelectionOnClick","rows","pageSize","rowHeight","onRowClick","geography","weight","allLayers","featureLayer","polygonFeature","TractCode","Toolbar","Footer","componentsProps","footer","toolbar","selectionName","determineSelection","state","cell","AttributeTable","isLoading","setTabNumber","AppBar","Tabs","indicatorColor","newValue","TabIndicatorProps","Tab","a11yProps","TableContent","setData","tableTitleAndSubtitle","sortedJson","paddingBottom","borderTop","minWidth","ncdmSelections","indicator","measure","NCDMContent","setNCDMContent","topicNcdms","setNCDMSelections","indicators","ncdm","currentIndicator","currentMeasure","measures","direction","justifyContent","alignItems","InputLabel","htmlFor","native","props","whiteSpace","apiNcdmDataEndpoint","fetchContent","prevSelections","noYears","overflow","scrollbarSize","CommunityProfile","currentTopic","mapDemographicContent","chartDemographicContent","pieRef","barRef","raceData","setRaceData","ageData","setAgeData","acsLink","setAcsLink","GEOID","Geotype","EstTotalPopFormat","EstFemaleTotalPopFormat","CalcPctFemaleTotalPop","EstMaleTotalPopFormat","CalcPctMaleTotalPop","CalcFemale0to19","CalcFemale20to44","CalcFemale45to64","CalcFemale65Plus","CalcMale0to19","CalcMale20to44","CalcMale45to64","CalcMale65Plus","CalcWhitePct","CalcBlackPct","CalcAsianPct","CalcHLPct","CalcOtherRacePct","CalcTwoOrMorePct","EstHouseholdMedianIncomeFormat","EstPopBelowFedPovertyLvlFormat","CalcPopBelowFedPovertyLvlPct","EstEdAttain25PlusHSHigherFormat","CalcPctEdAttain25PlusHSorHigher","EstUnempRateTotalPop16Plus","setState","popupVersion","tract","urlConfigure","tractConfigure","startsWith","endpoint","attributes","entry","formatAttributesWithCommas","prevState","racialBreakdown","raceChartData","responsive","parseFloat","County","datum","ageChartData","currentLink","FullCounty","TractName","borderBottom","boxWidth","yAlign","ageSexValues","CalcPctMale0to19","CalcPctMale20to44","CalcPctMale45to64","CalcPctMale65Plus","CalcPctFemale0to19","CalcPctFemale20to44","CalcPctFemale45to64","CalcPctFemale65Plus","percentValue","layout","top","stacked","font","stepSize","chartInfo","determineChartSteps","scale","maxTicksLimit","right","DialogTitle","classes","other","disableTypography","IconButton","AboutTheData","aboutText","React","setOpen","handleClose","Dialog","hideBackdrop","dividers","gutterBottom","dangerouslySetInnerHTML","autoFocus","OptionsPopup","anchorEl","setAnchorEl","currentTarget","Menu","keepMounted","print","flexWrap","ButtonSwitch","currentTheme","isDisplayed","themeTab","tabObject","component","Link","Box","fontWeight","contentSubtitle","hidden","p","About","topicContent","setValue","Paper","action","ReactGA","location","textColor","TopicOverview","lg","themeOverview","t","MissingSuppressed","missingSuppressedModalOpen","ChartInfoModal","chartInfoModalOpen","autoPlay","loop","playsInline","kind","HealthTopic","setRouterParams","setTopicNcdms","setTopicContent","setTopicDataYears","expand","setExpand","prevStrat","setPrevStrat","prevTab","setPrevTab","overFlow","useParams","useLocation","removing","route","activeLayer","substring","pair","agg","keyValueTuple","send","hitType","page","mapContentTabs","URLSet","Set","mapContentTab","metadataPromises","Array","from","Promise","all","drawingInfos","getLegendData","getTopicData","apiContentEndpoint","getEditableContent","apiNcdmConfigEndpoint","getNcdmConfig","determineSelectedLayerSet","LinearProgress","valueBuffer","getAtttributeTable","TopicsDrawer","routerParams","left","toggleDrawer","anchor","themeTabsList","ListItemButton","paddingLeft","ListItemText","primary","SwipeableDrawer","onOpen","List","Divider","topicTheme","disablePadding","healthTopic","list","paddingRight","Navbar","handleErrorReset","activeStyle","textDecoration","marginTop","letterSpacing","marginBottom","HomeContent","homeContent","setHomeContent","getHomepageContent","handleExpandClick","getTopicButtons","ListItem","button","Collapse","in","timeout","dense","getSubTopicButtons","path","introText","md","columnSpacing","sm","subheader","ListSubheader","ErrorFallback","reload","assign","initialize","testMode","LicenseInfo","setLicenseKey","zIndex","App","setCounties","errorReset","setErrorReset","resetNcdmValues","StyledEngineProvider","injectFirst","ThemeProvider","basename","wrap","FallbackComponent","resetKeys","exact","getElementById","createRoot","render"],"mappings":"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","file":"static/js/main.99a70e5b.chunk.js","sourcesContent":["const config = {\r\n tablePageSize: 25,\r\n tableRowHeight: 40,\r\n ncdmTableRowHeight: 28,\r\n defaultMapZoom: 8,\r\n statewideACSEndpoint: `${process.env.REACT_APP_MAP_SERVICE}/DemographicProfile/MapServer/2/query?outFields=*&returnGeometry=false&f=json&where=MDCode%3D`,\r\n countyACSEndpoint: `${process.env.REACT_APP_MAP_SERVICE}/DemographicProfile/MapServer/1/query?outFields=*&returnGeometry=false&f=json&where=MDCode%3D`,\r\n tractACSEndpoint2019: `${process.env.REACT_APP_MAP_SERVICE}/DemographicProfile/MapServer/2019/query?outFields=*&returnGeometry=false&f=json&where=GEOID%3D`,\r\n tractACSEndpoint2021: `${process.env.REACT_APP_MAP_SERVICE}/DemographicProfile/MapServer/2021/query?outFields=*&returnGeometry=false&f=json&where=GEOID%3D`,\r\n editableContentEndpoint: `${process.env.REACT_APP_EPHT_API}/Content/GetEditableContent?topic=`,\r\n ncdmConfigEndpoint: `${process.env.REACT_APP_EPHT_API}/NCDM/GetNCDMConfig`,\r\n getNcdmDataEndpoint: `${process.env.REACT_APP_EPHT_API}/NCDM/GetNCDMData`,\r\n getAllNcdmDataEndpoint: `${process.env.REACT_APP_EPHT_API}/NCDM/GetAllNCDMData`,\r\n getDataYearsEndpoint: `${process.env.REACT_APP_EPHT_API}/NCDM/GetDataYears`,\r\n stateBounds: [\r\n [39.74, -75.17],\r\n [37.91, -79.48],\r\n ],\r\n timeSliderMapCenter: {\r\n lat: 38.830880426900734,\r\n lng: -77.325,\r\n },\r\n missing: -999,\r\n suppressed: -777,\r\n lessThanPointOne: -555,\r\n missingText: 'Missing*',\r\n suppressedText: 'Suppressed*',\r\n lessThanPointOneText: '<0.1',\r\n mdhAttribution:\r\n 'SOURCE: Maryland Department of Health Environmental Public Health Tracking',\r\n};\r\n\r\nexport default config;\r\n","import { createTheme } from '@mui/material/styles';\r\n// Create custom material-ui theme to use globally\r\nconst muiTheme = createTheme({\r\n palette: {\r\n // We can override theme colors here, or add new colors. Only what is specified will alter the default theme.\r\n secondary: {\r\n main: 'rgb(71, 145, 219)',\r\n light: 'rgba(91, 145, 219, 0.9)',\r\n },\r\n navbarBlue: {\r\n main: 'rgb(49, 101, 153)',\r\n },\r\n darkGray: {\r\n main: 'rgb(36, 36, 36)',\r\n },\r\n lightGray: {\r\n main: 'rgba(131, 123, 127, 0.07)',\r\n },\r\n lightBlue: {\r\n main: 'rgb(25,118,210)',\r\n },\r\n mapHighlight: {\r\n main: 'rgba(66, 236, 245, 0.9)',\r\n },\r\n chartBaseline: {\r\n light: 'rgba(219, 68, 76, 0.9)', // Statewide line color\r\n dark: 'rgba(100, 100, 100, 0.8)',\r\n },\r\n barChartPrimary: {\r\n light: 'rgba(105, 41, 196, 0.4)',\r\n dark: 'rgba(105, 41, 196, 0.8)',\r\n },\r\n lineChartPrimary: {\r\n light: 'rgba(219, 68, 76, 0.9)',\r\n dark: 'rgba(153, 50, 56, 0.9)',\r\n },\r\n lineChartSecondary: {\r\n light: 'rgba(33, 67, 102, 0.9)', // County line color.\r\n dark: 'rgba(66, 116, 166, 0.9)',\r\n },\r\n },\r\n chartPalette: {\r\n default: [\r\n 'rgba(33, 67, 102, 0.9)',\r\n 'rgba(17, 146, 232, 0.7)',\r\n 'rgba(0, 93, 93, 0.7)',\r\n 'rgba(159, 24, 83, 0.7)',\r\n 'rgba(250, 77, 86, 0.7)',\r\n 'rgba(87, 4, 8, 0.7)',\r\n 'rgba(25, 128, 56, 0.7)',\r\n ],\r\n highContrast: [\r\n 'rgba(138, 63, 252, 0.8)',\r\n 'rgba(0, 125, 121, 0.8)',\r\n 'rgba(51, 177, 255, 0.8)',\r\n 'rgba(255, 126, 182, 0.8)',\r\n ],\r\n hover: [\r\n 'rgba(105, 41, 196, 0.9)',\r\n 'rgba(17, 146, 232, 0.9)',\r\n 'rgba(0, 93, 93, 0.9)',\r\n 'rgba(159, 24, 83, 0.9)',\r\n 'rgba(250, 77, 86, 0.9)',\r\n 'rgba(87, 4, 8, 0.9)',\r\n 'rgba(25, 128, 56, 0.9)',\r\n ],\r\n stratified: [\r\n 'rgba(26, 26, 26, 0.7)',\r\n 'rgba(105, 41, 196, 0.7)',\r\n 'rgba(17, 146, 232, 0.7)',\r\n 'rgba(0, 93, 93, 0.7)',\r\n 'rgba(159, 24, 83, 0.7)',\r\n 'rgba(250, 77, 86, 0.7)',\r\n 'rgba(87, 4, 8, 0.7)',\r\n 'rgba(25, 128, 56, 0.7)',\r\n 'rgba(82, 92, 33, 0.7)',\r\n 'rgba(255, 193, 7, 0.7)',\r\n 'rgba(29, 66, 137, 0.7)',\r\n 'rgba(220, 88, 42, 0.7)',\r\n ],\r\n stratifiedHover: [\r\n 'rgba(100, 100, 100, 0.8)',\r\n 'rgba(105, 41, 196, 0.9)',\r\n 'rgba(17, 146, 232, 0.9)',\r\n 'rgba(0, 93, 93, 0.9)',\r\n 'rgba(159, 24, 83, 0.9)',\r\n 'rgba(250, 77, 86, 0.9)',\r\n 'rgba(87, 4, 8, 0.9)',\r\n 'rgba(25, 128, 56, 0.9)',\r\n ],\r\n discontinuity: {\r\n boxBackground: 'rgba(193,193,193, 0.35)',\r\n tooltipTriggerBorder: 'rgba(0, 0, 0, 0.0)',\r\n },\r\n },\r\n piePalette: {\r\n default: [\r\n 'rgb(120, 141, 192)',\r\n 'rgb(75, 109, 94)',\r\n 'rgb(156, 70, 113)',\r\n 'rgb(187, 118, 75)',\r\n 'rgb(215, 182, 107)',\r\n 'rgb(114, 101, 171)',\r\n ],\r\n hover: [\r\n 'rgb(100, 121, 172)',\r\n 'rgb(55, 89, 74)',\r\n 'rgb(136, 50, 93)',\r\n 'rgb(167, 98, 55)',\r\n 'rgb(195, 162, 87)',\r\n 'rgb(94, 81, 151)',\r\n ],\r\n },\r\n stackedBarsPalette: {\r\n default: [\r\n 'rgb(129, 181, 175)',\r\n 'rgb(70, 110, 118)',\r\n 'rgb(211, 137, 119)',\r\n 'rgb(158, 97, 97)',\r\n ],\r\n hover: [\r\n 'rgb(119, 161, 155)',\r\n 'rgb(50, 90, 98)',\r\n 'rgb(191, 117, 99)',\r\n 'rgb(138, 77, 77)',\r\n ],\r\n },\r\n components: {\r\n MuiButtonGroup: {\r\n styleOverrides: {\r\n root: {\r\n color: 'rgb(49, 101, 153)',\r\n },\r\n },\r\n },\r\n },\r\n});\r\n\r\nexport default muiTheme;\r\n","import DOMPurify from 'dompurify';\r\nimport config from 'config/config';\r\nimport muiTheme from '../theme';\r\n\r\n// Treating any content with html as unsafe. DOMPurify used to sanitize html to reduce XSS risk.\r\nexport const createMarkup = (dirty) => {\r\n const clean = DOMPurify.sanitize(dirty, {\r\n USE_PROFILES: { html: true },\r\n ADD_ATTR: ['target'],\r\n });\r\n return { __html: clean };\r\n};\r\n\r\nexport const handleFetchError = (response) => {\r\n if (!response.ok) {\r\n throw Error(\r\n `Fetch error status: ${response.status}; statusText: ${response.statusText}`\r\n );\r\n }\r\n return response;\r\n};\r\n\r\nexport const a11yProps = (index, description) => ({\r\n id: `${description}-${index}`,\r\n 'aria-controls': `${description}-${index}`,\r\n});\r\n\r\n// Method to return a number formatted to one decimal place\r\nexport const formatNumber = (value) => {\r\n if (typeof value !== 'number') {\r\n return value;\r\n }\r\n return (Math.round(value * 10) / 10).toFixed(1);\r\n};\r\n\r\nexport const generateAnnotations = (data) => {\r\n // If no data, or the data does not contain information from 2015 and after, do not add the annotation.\r\n if (\r\n !data ||\r\n !data.labels.includes(2015) ||\r\n data.labels.indexOf(2015) === data.labels.length - 1\r\n ) {\r\n return {};\r\n }\r\n\r\n // Adding a '.5' to the index of '2015' moves the annotation between the '2015' and '2016' labels.\r\n const indexForAnnotation = Number(`${data.labels.indexOf(2015)}`);\r\n\r\n // The details for this method can be found in the older version of the chartjs-plugin-annotation documentation: https://www.chartjs.org/chartjs-plugin-annotation/1.2.0/samples/line/labelVisibility.html\r\n const toggleLabel = (ctx, e) => {\r\n const { chart } = ctx;\r\n\r\n const annotationOpts =\r\n chart.config.options.plugins.annotation.annotations.line;\r\n annotationOpts.label.enabled = !annotationOpts.label.enabled;\r\n\r\n // Setting the popup location to the y value of the mouse over event.\r\n annotationOpts.label.position = `${\r\n (e.y / ctx.chart.chartArea.height) * 100\r\n }%`;\r\n\r\n chart.update();\r\n };\r\n\r\n return {\r\n line: {\r\n // This is a non-visible line underneath the 'box' below. In place to trigger the tooltip on hover.\r\n type: 'line',\r\n mode: 'vertical',\r\n borderColor:\r\n muiTheme.chartPalette.discontinuity.tooltipTriggerBorder,\r\n borderWidth: 100,\r\n xMin: indexForAnnotation + 0.5,\r\n xMax: indexForAnnotation + 0.5,\r\n label: {\r\n content: [\r\n \"Data changed in late 2015. See 'About' for details.\",\r\n ],\r\n enabled: false,\r\n textAlign: 'center',\r\n },\r\n enter(ctx, e) {\r\n toggleLabel(ctx, e);\r\n },\r\n leave(ctx, e) {\r\n toggleLabel(ctx, e);\r\n },\r\n },\r\n box: {\r\n type: 'box',\r\n backgroundColor: muiTheme.chartPalette.discontinuity.boxBackground,\r\n borderDash: [6, 6],\r\n borderWidth: 2,\r\n xMin: indexForAnnotation,\r\n xMax: indexForAnnotation + 1,\r\n drawTime: 'afterDatasetsDraw',\r\n },\r\n };\r\n};\r\n\r\n/**\r\n * This object is for generating custom styling objects for use within the 'LegendItems.js' file.\r\n * Layers that require custom styling are flagged with the parameter 'customStyleTitle'.\r\n * For example, a value of this parameter could be: 'customLegendStyleNames.eseriSMSCircleFilled.title'.\r\n *\r\n * This is to make the subsequent 'styleMethod' accesible from the 'LegendItems.js' file where the\r\n * 'customStyleTitle' of a layer is used to reference the correct object. Example:\r\n *\r\n * customLegendStyleNames[layer.customStyleTitle].styleMethod()\r\n *\r\n * The idea is to have the 'customLegendStyleNames' object grow as we encounter more legend items that\r\n * require unique styling. As the object does expand, we want to make sure that we are following esri symbol\r\n * naming conventions to some degree, attaching a descriptor on the end that explains what kind of style it is we are returning.\r\n *\r\n * Example: esriSMSTriangleShaded : {}\r\n *\r\n */\r\n\r\nexport const customLegendStyleNames = {\r\n esriSMSCircleFilled: {\r\n title: 'esriSMSCircleFilled',\r\n styleMethod: function styleMethod(layerStyle, layerOn) {\r\n const [r, g, b] = layerStyle.color;\r\n return {\r\n height: `${layerStyle.size * 2}px`,\r\n width: `${layerStyle.size * 2}px`,\r\n borderColor: layerOn\r\n ? 'transparent'\r\n : muiTheme.palette.grey[300],\r\n backgroundColor: layerOn\r\n ? `rgba(${r},${g},${b}, 1)`\r\n : 'transparent',\r\n };\r\n },\r\n },\r\n};\r\n\r\nexport const formatRows = (layer, stratification, currentTab) => {\r\n let index = 0;\r\n const dataArray = [];\r\n const sortField = layer.info.customSortField || 'County';\r\n\r\n while (layer && layer.features[index]) {\r\n const row = { ...layer.features[index] };\r\n row.id = index;\r\n\r\n if (stratification && currentTab.contentType === 'chart') {\r\n // Strat data is nested at zero index and needs to be moved to highest level of the object.\r\n\r\n if (row[stratification]) {\r\n const stratificationArr = Object.entries(\r\n row[stratification][0]\r\n );\r\n\r\n stratificationArr.forEach((item) => {\r\n const [key, value] = item;\r\n row[key] = value;\r\n });\r\n }\r\n }\r\n dataArray.push(row);\r\n index += 1;\r\n }\r\n\r\n // Sort the array by County field or a custom field if provided\r\n dataArray.sort((a, b) => {\r\n if (a[sortField] > b[sortField]) return 1;\r\n if (a[sortField] <= b[sortField]) return -1;\r\n return 0;\r\n });\r\n\r\n return dataArray;\r\n};\r\n\r\nexport const formatColumns = (columns) => {\r\n columns.forEach((column) => {\r\n if (column.customFormat) {\r\n column.type = 'number';\r\n // The following `valueFormatter` function, when passed to the column definition, will override the Material\r\n // UI Data Grid value getter function. Data passed to the XGrid will remain the same internally, but the value\r\n // displayed is manipulated here -- we convert the missing(-999), less than 0.1(-555) and suppressed(-777) integer\r\n // values to the strings \"Missing*\", \"<0.1\", and \"Suppressed*\", respectively. For more info, see the Material\r\n // UI Data Grid documentation here: https://material-ui.com/components/data-grid/columns/#value-getter\r\n column.valueFormatter = ({ value }) => {\r\n if (value == null) {\r\n // null values are present for stratification data sets - this is in place to avoid errors when using `.toLocaleString()`.\r\n return 'N/A';\r\n }\r\n if (value === config.missing) {\r\n return config.missingText;\r\n }\r\n if (value === config.suppressed) {\r\n return config.suppressedText;\r\n }\r\n if (value === config.lessThanPointOne) {\r\n return config.lessThanPointOneText;\r\n }\r\n // check if customFormat is set to 2, which indicates the value is a rate:\r\n if (column.customFormat === 2) {\r\n return Number(value).toFixed(1); // ex: 14.3933 --> 14.4 ; 25 --> 25.0\r\n }\r\n\r\n // If none of the conditions above match (should only be used for count values):\r\n return value.toLocaleString(); // ex: 21679 --> 21,679\r\n };\r\n }\r\n });\r\n return columns;\r\n};\r\n\r\nexport const formatAttributesWithCommas = (attributes) => {\r\n // The convention is that all numbers that need to be updated to include commas\r\n // should include the word 'Format' at the end of the key name:\r\n\r\n Object.entries(attributes).forEach((entry) => {\r\n if (entry[0].match(/(Format)/)) {\r\n attributes[entry[0]] = attributes[entry[0]].replace(\r\n /(\\d)(?=(\\d{3})+$)/g,\r\n '$1,'\r\n );\r\n }\r\n });\r\n\r\n return attributes;\r\n};\r\n\r\n// Used in the community profile age-sex breakdown chart:\r\nexport const determineChartSteps = (max) => {\r\n // Hard code in chart x-axis steps based on general population size.\r\n // This is done to eliminate chart.js attempting to change step size automatically\r\n // which causes chart compression issues on certain view ports.\r\n switch (true) {\r\n case max > 10000 && max <= 40000:\r\n return 5000;\r\n case max > 40000 && max <= 100000:\r\n return 15000;\r\n case max > 100000 && max <= 300000:\r\n return 50000;\r\n case max > 300000 && max <= 1000000:\r\n return 100000;\r\n case max > 1000000:\r\n return 1000000;\r\n default:\r\n return 0; // Means no custom steps, lets chart.js handle axis steps dynamically (only works well for smaller numbers).\r\n }\r\n};\r\n","import React from 'react';\r\n\r\n// Utils:\r\nimport { customLegendStyleNames } from 'utilities/utils';\r\n\r\nconst topics = {\r\n // Each key is a health topic whose value is an array of that topic's themes\r\n // Note: each mapLayer id is meant to be unique by using a suffix with --\r\n // MDH has asked us to remove Childhood Lead until data is corrected.\r\n lead: {\r\n topicTitle: 'Childhood Lead Poisoning',\r\n topicPath: 'lead',\r\n category: 'health',\r\n defaultTabPath: 'status',\r\n overview:\r\n \"

Lead poisoning affects many children under the age of 6 in Maryland. Lead is often a home health hazard that can harm a child's brain, causing lifelong learning and behavior problems. The symptoms of lead poisoning are not always easy to detect, but its effects are long-lasting. While blood lead levels in children in Maryland have decreased over the years, lead poisoning continues to be one of the most important environmental problems for children in Maryland.

\",\r\n themeOverviews: [\r\n {\r\n theme: 'Status',\r\n text:\r\n 'Provides a detailed view of lead poisoning over time throughout Maryland by area.',\r\n },\r\n {\r\n theme: 'Disparities',\r\n text:\r\n 'Examines the distribution of the burden of lead poisoning in Maryland.',\r\n },\r\n {\r\n theme: 'Programs',\r\n text:\r\n 'Detailed view of the effects of Maryland Department of Health programs and other efforts to address lead poisoning in Maryland.',\r\n },\r\n {\r\n theme: 'More Data',\r\n text:\r\n 'Provides a detailed view of Nationally Consistent Data and Measures (NCDMs) for lead poisoning as specified by the Centers for Disease Control and Prevention (CDC). All additional data are available for download.',\r\n },\r\n ],\r\n aboutData: `
Data Facts Lead
Why these data are important Lead is one of the most significant and widespread environmental hazards for children in Maryland. Even low levels of lead exposure can impact IQ, attention, and academic performance. These lead data are important to environmental public health and medicine as a reliable source of information that can be used to carry out primary, secondary, and tertiary prevention of lead poisoning.
Data Sources Maryland Department of the Environment
Maryland Medicaid Childhood Lead Poisoning Prevention and Environmental Case Management Program
Housing: American Community Survey
Years available 2010-most recent data available (usually 1-2 years prior to current date)
Data source description Blood lead test results reported to the Lead Poisoning Prevention Program for children aged 0 to <6 years
What's reported Children tested in Maryland; Elevated blood lead tests >=5 micrograms per deciliter (mcg/dL); Blood lead test results
How it's reported Counts; percents; geometric means
Level of geographic detail State, county, and census tract
Level of demographic detail Sex and age group
Data disclaimers County level population data are National Center for Health Statistics ( NCHS ) bridged race population estimates. The Maryland Department of the Environment Lead Poisoning Prevention Program ( MDE LPPP ) uses a different source for population data. Therefore, the data presented on the MD EPHT portal may not exactly match the official MDE Childhood Lead Registry annual reports.
The summary data provided on this website are downloadable. For more detailed data, refer to the data sources. Yes
Environmental Health Helpline 1-866-703-3266
mdh.envhealth@maryland.gov
Last Updated 10/8/2024
Frequency of data updates Annual
Data suppression rules Childhood Lead Registry:

County level: non-zero count <6

Sub-county level: non-zero count <11

ACS:

Population threshold >65,000 for 1-year estimates

`,\r\n countySuppressionRules: {\r\n range: '1 to 6',\r\n populationMin: '5,000',\r\n },\r\n subCountySuppressionRules: {\r\n range: '1 to 10',\r\n populationMin: '5,000',\r\n },\r\n themes: {\r\n status: {\r\n defaultTabPath: 'rates',\r\n themeTitle: 'Status',\r\n themePath: 'status',\r\n tabs: {\r\n rates: {\r\n tabTitle: 'Rates',\r\n tabPath: 'rates',\r\n contentType: 'map',\r\n contentTitle: 'Elevated Childhood Blood Lead Rates',\r\n exportTitle: 'Elevated Childhood Blood Lead Rates',\r\n exportSubtitle:\r\n '*Effective October 1 2019 the legal definition of an​ elevated blood lead level in Maryland is the same as the clinical definition: 5 micrograms per deciliter (µg/dL). Children tested are aged 6 and younger.',\r\n mapSets: [\r\n {\r\n set: 'primary',\r\n geometry: 'County',\r\n outFields: ['County', 'Rate'],\r\n columnHeaders: [\r\n {\r\n field: 'County',\r\n headerName: 'County',\r\n flex: 1,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'Rate',\r\n headerName: 'Elevated (%)',\r\n exportHeaderName: 'Percent Elevated',\r\n flex: 1,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Elevated Childhood Blood Lead Rates',\r\n popupContent: {\r\n title: {\r\n field: 'FullCounty',\r\n },\r\n health: {\r\n name:\r\n 'Children under age 6 with blood lead levels ≥ 5 µg/dL',\r\n field: 'Rate',\r\n unit: '%',\r\n },\r\n },\r\n setLayers: [\r\n {\r\n id:\r\n 'county-choropleth-elevated-bll-rate',\r\n zIndexPosition: 'back',\r\n yearKey: 'Year',\r\n title:\r\n 'Elevated Blood Lead Rates by County',\r\n // TODO: need to dynamically add year\r\n subtitle:\r\n '% of children under age 6 with blood lead levels ≥ 5µg/dL',\r\n defaultVisible: true,\r\n sourceLayer: true, // Sets the layer to the source for the table\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/LeadCounty/MapServer/1`,\r\n },\r\n {\r\n id: 'reference-point-layer-schools',\r\n scaleDependent: false,\r\n referenceLayer: true,\r\n toggleable: true, // Sets if the layer is toggleable within the legend\r\n custom: true,\r\n zIndexPosition: 'front',\r\n isModern: false,\r\n title: 'Public Schools',\r\n subtitle: 'K-12',\r\n defaultVisible: false,\r\n omitCommunityProfile: true, // If true, will prevent the community profile section from displaying\r\n url:\r\n 'https://geodata.md.gov/imap/rest/services/Education/MD_EducationFacilities/FeatureServer/5',\r\n symbolDescription: 'school',\r\n content: {\r\n title: 'SCHOOL_NAME',\r\n line1: 'STREET',\r\n line2A: 'CITY',\r\n line2B: ', MD ',\r\n line3: 'ZIP',\r\n },\r\n drawingInfo: {\r\n renderer: {\r\n type: 'simple',\r\n symbol: {\r\n type: 'esriPMS',\r\n url: '',\r\n imageData:\r\n 'PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTFwdCIgaGVpZ2h0PSIxNnB0IiB2aWV3Qm94PSIwIDAgMTEgMTYiIHZlcnNpb249IjEuMSI+CjxnIGlkPSJzdXJmYWNlMSI+CjxwYXRoIHN0eWxlPSJmaWxsLXJ1bGU6ZXZlbm9kZDtmaWxsOnJnYigwJSwwJSwwJSk7ZmlsbC1vcGFjaXR5OjAuNDU0MTY0O3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZTpyZ2IoMTAwJSwxMDAlLDEwMCUpO3N0cm9rZS1vcGFjaXR5OjAuODtzdHJva2UtbWl0ZXJsaW1pdDo0OyIgZD0iTSAxMDEuOTk5OTE1IDAuMDAxNDAwMzkgQyA5OC42ODc3NCAwLjAwMTQwMDM5IDk2LjAwMDAzMyAyLjY4NTUxNyA5Ni4wMDAwMzMgNS45OTgxNiBDIDk2LjAwMDAzMyA2LjkzMDY0NiA5Ni4yMDk4NTQgNy44MDY0NjEgOTYuNTg5NTMgOC41ODk1NDMgQyA5Ni42MDk1MTMgOC42MzU5MSAxMDEuOTk5OTE1IDE5LjIwMjM2NiAxMDEuOTk5OTE1IDE5LjIwMjM2NiBMIDEwNy4zNDUzNTUgOC43MjM0OTIgQyAxMDcuNzY0OTk3IDcuOTA0MzQ3IDEwNy45OTk3OTcgNi45ODIxNjUgMTA3Ljk5OTc5NyA1Ljk5ODE2IEMgMTA3Ljk5OTc5NyAyLjY4NTUxNyAxMDUuMzEyMDg5IDAuMDAxNDAwMzkgMTAxLjk5OTkxNSAwLjAwMTQwMDM5IFogTSAxMDEuOTk5OTE1IDAuMDAxNDAwMzkgIiB0cmFuc2Zvcm09Im1hdHJpeCgwLjc4MTkxNiwwLDAsMC43NTgyMjIsLTc0LjE3NzI4MiwwLjQyMDgxMykiLz4KPC9nPgo8L3N2Zz4K',\r\n contentType:\r\n 'image/svg+xml',\r\n width: 15,\r\n height: 15,\r\n angle: 0,\r\n xoffset: 0,\r\n yoffset: 0,\r\n },\r\n label: '',\r\n description:\r\n 'custom marker for schools',\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n set: 'secondary',\r\n geometry: 'Tract',\r\n outFields: [\r\n 'GEOID',\r\n 'TractCode',\r\n 'TractName',\r\n 'FullCounty',\r\n 'Rate',\r\n ],\r\n columnHeaders: [\r\n {\r\n field: 'FullCounty',\r\n headerName: 'County',\r\n flex: 1,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'TractName',\r\n headerName: 'Tract Name',\r\n flex: 1,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'Rate',\r\n headerName: 'Elevated (%)',\r\n exportHeaderName: 'Percent Elevated',\r\n flex: 1,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Elevated Childhood Blood Lead Rates by Census Tract',\r\n popupContent: {\r\n title: {\r\n field: 'PopupTitle',\r\n },\r\n health: {\r\n name:\r\n 'Children under age 6 with blood lead levels ≥ 5 µg/dL',\r\n field: 'Rate',\r\n unit: '',\r\n },\r\n },\r\n setLayers: [\r\n {\r\n id: 'census-tract-lead-rates',\r\n zIndexPosition: 'back',\r\n title:\r\n 'Elevated Blood Lead Rates by Census Tract',\r\n yearKey: 'Year',\r\n subtitle:\r\n '% of children under age 6 with blood lead levels ≥ 5µg/dL',\r\n defaultVisible: true,\r\n sourceLayer: true,\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/LeadCensusTract/MapServer/0`,\r\n },\r\n {\r\n id: 'reference-point-layer-schools',\r\n scaleDependent: false,\r\n referenceLayer: true,\r\n toggleable: true, // Sets if the layer is toggleable within the legend\r\n custom: true,\r\n zIndexPosition: 'front',\r\n isModern: false,\r\n title: 'Public Schools',\r\n subtitle: 'K-12',\r\n defaultVisible: false,\r\n omitCommunityProfile: true, // If true, will prevent the community profile section from displaying\r\n url:\r\n 'https://geodata.md.gov/imap/rest/services/Education/MD_EducationFacilities/FeatureServer/5',\r\n symbolDescription: 'school',\r\n content: {\r\n title: 'SCHOOL_NAME',\r\n line1: 'STREET',\r\n line2A: 'CITY',\r\n line2B: ', MD ',\r\n line3: 'ZIP',\r\n },\r\n drawingInfo: {\r\n renderer: {\r\n type: 'simple',\r\n symbol: {\r\n type: 'esriPMS',\r\n url: '',\r\n imageData:\r\n 'PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTFwdCIgaGVpZ2h0PSIxNnB0IiB2aWV3Qm94PSIwIDAgMTEgMTYiIHZlcnNpb249IjEuMSI+CjxnIGlkPSJzdXJmYWNlMSI+CjxwYXRoIHN0eWxlPSJmaWxsLXJ1bGU6ZXZlbm9kZDtmaWxsOnJnYigwJSwwJSwwJSk7ZmlsbC1vcGFjaXR5OjAuNDU0MTY0O3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZTpyZ2IoMTAwJSwxMDAlLDEwMCUpO3N0cm9rZS1vcGFjaXR5OjAuODtzdHJva2UtbWl0ZXJsaW1pdDo0OyIgZD0iTSAxMDEuOTk5OTE1IDAuMDAxNDAwMzkgQyA5OC42ODc3NCAwLjAwMTQwMDM5IDk2LjAwMDAzMyAyLjY4NTUxNyA5Ni4wMDAwMzMgNS45OTgxNiBDIDk2LjAwMDAzMyA2LjkzMDY0NiA5Ni4yMDk4NTQgNy44MDY0NjEgOTYuNTg5NTMgOC41ODk1NDMgQyA5Ni42MDk1MTMgOC42MzU5MSAxMDEuOTk5OTE1IDE5LjIwMjM2NiAxMDEuOTk5OTE1IDE5LjIwMjM2NiBMIDEwNy4zNDUzNTUgOC43MjM0OTIgQyAxMDcuNzY0OTk3IDcuOTA0MzQ3IDEwNy45OTk3OTcgNi45ODIxNjUgMTA3Ljk5OTc5NyA1Ljk5ODE2IEMgMTA3Ljk5OTc5NyAyLjY4NTUxNyAxMDUuMzEyMDg5IDAuMDAxNDAwMzkgMTAxLjk5OTkxNSAwLjAwMTQwMDM5IFogTSAxMDEuOTk5OTE1IDAuMDAxNDAwMzkgIiB0cmFuc2Zvcm09Im1hdHJpeCgwLjc4MTkxNiwwLDAsMC43NTgyMjIsLTc0LjE3NzI4MiwwLjQyMDgxMykiLz4KPC9nPgo8L3N2Zz4K',\r\n contentType:\r\n 'image/svg+xml',\r\n width: 15,\r\n height: 15,\r\n angle: 0,\r\n xoffset: 0,\r\n yoffset: 0,\r\n },\r\n label: '',\r\n description:\r\n 'custom marker for schools',\r\n },\r\n },\r\n },\r\n {\r\n id: 'county-outline-asthma-ed-rates',\r\n zIndexPosition: 'front',\r\n title: '',\r\n yearKey: 'Year',\r\n subtitle: '',\r\n defaultVisible: true,\r\n sourceLayer: false,\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/CountyBoundaries/MapServer/0`,\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n counts: {\r\n tabTitle: 'Counts',\r\n tabPath: 'counts',\r\n contentType: 'map',\r\n contentTitle:\r\n 'Number of Children with Elevated Blood Lead Levels',\r\n exportTitle:\r\n 'Number of Children with Elevated Blood Lead Levels',\r\n exportSubtitle:\r\n '*Effective October 1 2019 the legal definition of an​ elevated blood lead level in Maryland is the same as the clinical definition: 5 micrograms per deciliter (µg/dL). Children tested are aged 6 and younger.',\r\n mapSets: [\r\n {\r\n set: 'primary',\r\n geometry: 'County',\r\n outFields: ['County', 'Counts'],\r\n columnHeaders: [\r\n {\r\n field: 'County',\r\n headerName: 'County',\r\n flex: 1,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'Counts',\r\n headerName: 'Elevated (#)',\r\n exportHeaderName: 'Number Elevated',\r\n flex: 1,\r\n customFormat: 1,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Elevated Childhood Blood Lead Counts',\r\n popupContent: {\r\n title: {\r\n field: 'FullCounty',\r\n },\r\n health: {\r\n name:\r\n 'Number of children under age 6 with blood lead levels ≥ 5 µg/dL',\r\n field: 'Counts',\r\n unit: '',\r\n },\r\n },\r\n setLayers: [\r\n {\r\n id:\r\n 'county-choropleth-elevated-bll-count',\r\n zIndexPosition: 'back',\r\n scaleDependent: false,\r\n yearKey: 'Year',\r\n title:\r\n 'Children with Elevated Blood Lead by County',\r\n // TODO: need to dynamically add year to subtitle\r\n subtitle:\r\n 'Number of children under age 6 with blood lead levels ≥ 5 µg/dL',\r\n defaultVisible: true,\r\n sourceLayer: true,\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/LeadCounty/MapServer/0`,\r\n },\r\n {\r\n id: 'reference-point-layer-schools',\r\n scaleDependent: false,\r\n referenceLayer: true,\r\n toggleable: true, // Sets if the layer is toggleable within the legend\r\n custom: true,\r\n zIndexPosition: 'front',\r\n isModern: false,\r\n title: 'Public Schools',\r\n subtitle: 'K-12',\r\n defaultVisible: false,\r\n omitCommunityProfile: true, // If true, will prevent the community profile section from displaying\r\n url:\r\n 'https://geodata.md.gov/imap/rest/services/Education/MD_EducationFacilities/FeatureServer/5',\r\n symbolDescription: 'school',\r\n content: {\r\n title: 'SCHOOL_NAME',\r\n line1: 'STREET',\r\n line2A: 'CITY',\r\n line2B: ', MD ',\r\n line3: 'ZIP',\r\n },\r\n drawingInfo: {\r\n renderer: {\r\n type: 'simple',\r\n symbol: {\r\n type: 'esriPMS',\r\n url: '',\r\n imageData:\r\n 'PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTFwdCIgaGVpZ2h0PSIxNnB0IiB2aWV3Qm94PSIwIDAgMTEgMTYiIHZlcnNpb249IjEuMSI+CjxnIGlkPSJzdXJmYWNlMSI+CjxwYXRoIHN0eWxlPSJmaWxsLXJ1bGU6ZXZlbm9kZDtmaWxsOnJnYigwJSwwJSwwJSk7ZmlsbC1vcGFjaXR5OjAuNDU0MTY0O3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZTpyZ2IoMTAwJSwxMDAlLDEwMCUpO3N0cm9rZS1vcGFjaXR5OjAuODtzdHJva2UtbWl0ZXJsaW1pdDo0OyIgZD0iTSAxMDEuOTk5OTE1IDAuMDAxNDAwMzkgQyA5OC42ODc3NCAwLjAwMTQwMDM5IDk2LjAwMDAzMyAyLjY4NTUxNyA5Ni4wMDAwMzMgNS45OTgxNiBDIDk2LjAwMDAzMyA2LjkzMDY0NiA5Ni4yMDk4NTQgNy44MDY0NjEgOTYuNTg5NTMgOC41ODk1NDMgQyA5Ni42MDk1MTMgOC42MzU5MSAxMDEuOTk5OTE1IDE5LjIwMjM2NiAxMDEuOTk5OTE1IDE5LjIwMjM2NiBMIDEwNy4zNDUzNTUgOC43MjM0OTIgQyAxMDcuNzY0OTk3IDcuOTA0MzQ3IDEwNy45OTk3OTcgNi45ODIxNjUgMTA3Ljk5OTc5NyA1Ljk5ODE2IEMgMTA3Ljk5OTc5NyAyLjY4NTUxNyAxMDUuMzEyMDg5IDAuMDAxNDAwMzkgMTAxLjk5OTkxNSAwLjAwMTQwMDM5IFogTSAxMDEuOTk5OTE1IDAuMDAxNDAwMzkgIiB0cmFuc2Zvcm09Im1hdHJpeCgwLjc4MTkxNiwwLDAsMC43NTgyMjIsLTc0LjE3NzI4MiwwLjQyMDgxMykiLz4KPC9nPgo8L3N2Zz4K',\r\n contentType:\r\n 'image/svg+xml',\r\n width: 15,\r\n height: 15,\r\n angle: 0,\r\n xoffset: 0,\r\n yoffset: 0,\r\n },\r\n label: '',\r\n description:\r\n 'custom marker for schools',\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n trends: {\r\n tabTitle: 'Trends',\r\n tabPath: 'trends',\r\n contentType: 'chart',\r\n // No contentTitle for charts, will be controlled in \"chartTitle\" property below //\r\n exportTitle:\r\n 'Elevated Blood Lead in Children under age 6 and Childhood Testing',\r\n exportSubtitle:\r\n '*Effective October 1 2019 the legal definition of an​ elevated blood lead level in Maryland is the same as the clinical definition: 5 micrograms per deciliter (µg/dL). Children tested are aged 6 and younger.',\r\n chartType: 'mixed',\r\n selectable: true,\r\n defaultSelection: '000', // 000 is the code used for statewide data at the DB\r\n defaultSelectionName: 'Statewide',\r\n defaultSetNames: ['countElevated', 'countTested'],\r\n info: {\r\n title: 'Childhood Lead Trend',\r\n id: 'chart-lead-trends',\r\n subtitle: '% elevated blood lead and total tested',\r\n },\r\n chartTitle: [\r\n 'Elevated Blood Lead and Childhood Testing',\r\n '(Under age 6, blood lead levels ≥ 5 µg/dL)',\r\n ], // When passing an array as chart title, second item will be subtitle\r\n displayChartTitle: true,\r\n displayXAxisLabel: true,\r\n xAxisLabel: 'Year',\r\n chartXAxisField: 'year',\r\n displayYAxisLabel: true,\r\n displayChartDiscontinuityGraphic: false,\r\n yAxisLabelLeft: 'Number Tested',\r\n yAxisLabelRight: 'Number with Elevated Blood Lead',\r\n yAxisIdLeft: 'tested', // Should correspond with `yAxisId` given to first item in `chartConfig` array\r\n yAxisIdRight: 'elevated', // Should correspond with `yAxisId` given to second item in `chartConfig` array\r\n chartDataSets: ['countElevated', 'countTested'],\r\n url: `${process.env.REACT_APP_EPHT_API}/Lead/GetLeadTestedAndElevated`,\r\n // TODO: Currently this endpoint doesnt accept params, the following inserted into the url as a query will just return statewide values\r\n urlParams: [{ param: 'jurisdiction' }],\r\n chartConfig: [\r\n {\r\n setName: 'countElevated',\r\n label: 'Elevated Blood Lead',\r\n yAxisID: 'elevated',\r\n type: 'line',\r\n fill: true,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n pointHoverBorderWidth: 3,\r\n lineTension: 0,\r\n borderWidth: 3,\r\n data: [],\r\n },\r\n {\r\n setName: 'countTested',\r\n label: 'Tested',\r\n yAxisID: 'tested',\r\n type: 'bar',\r\n fill: false,\r\n data: [],\r\n },\r\n ],\r\n columnHeaders: [\r\n {\r\n field: 'year',\r\n headerName: 'Year',\r\n width: 90,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'countTested',\r\n headerName: 'Tested (#)',\r\n exportHeaderName: 'Number Tested',\r\n width: 130,\r\n customFormat: 1,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'countElevated',\r\n headerName: 'Elevated (#)',\r\n exportHeaderName: 'Number Elevated',\r\n width: 140,\r\n customFormat: 1,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Childhood Lead Testing and Elevated Levels',\r\n },\r\n },\r\n about: ` `, // Fetched from the database\r\n resources: ` `, // Fetched from the database\r\n },\r\n disparities: {\r\n defaultTabPath: 'housing',\r\n themeTitle: 'Disparities',\r\n themePath: 'disparities',\r\n tabs: {\r\n housing: {\r\n tabTitle: 'Housing',\r\n tabPath: 'housing',\r\n contentType: 'map',\r\n contentTitle:\r\n 'Elevated Childhood Blood Lead and Housing Age',\r\n exportTitle:\r\n 'Elevated Childhood Blood Lead and Housing Age',\r\n exportSubtitle:\r\n 'Housing data provided by the American Community Survey (ACS): https://www.census.gov/programs-surveys/acs/data.html',\r\n mapSets: [\r\n {\r\n set: 'primary',\r\n geometry: 'County',\r\n outFields: [\r\n 'County',\r\n 'Rate',\r\n 'HousingYear',\r\n 'UnitsBuiltBefore1980Pct',\r\n ],\r\n columnHeaders: [\r\n {\r\n field: 'County',\r\n headerName: 'County',\r\n width: 140,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'Rate',\r\n headerName: 'Elevated (%)',\r\n exportHeaderName: 'Percent Elevated',\r\n width: 140,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'UnitsBuiltBefore1980Pct',\r\n headerName: 'Pre 1980s Housing (%)',\r\n exportHeaderName:\r\n \"Percent Pre-1980's Housing\",\r\n width: 210,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle: 'Housing and Lead (County)',\r\n popupContent: {\r\n title: {\r\n field: 'FullCounty',\r\n },\r\n health: {\r\n name:\r\n 'Percent of children under age 6 with blood lead levels ≥ 5 µg/dL',\r\n field: 'Rate',\r\n unit: '%',\r\n },\r\n environment: {\r\n name:\r\n 'Percent of housing built before 1980',\r\n field: 'UnitsBuiltBefore1980Pct',\r\n unit: '%',\r\n className: 'field-value',\r\n },\r\n },\r\n setLayers: [\r\n {\r\n id: 'county-point-housing-age',\r\n\r\n zIndexPosition: 'front',\r\n title:\r\n 'Housing Built before 1980 by County',\r\n subtitle:\r\n '% of housing units built before 1980',\r\n yearKey: 'ACS_Year',\r\n defaultVisible: true,\r\n toggleable: true, // Sets if the layer is toggleable within the legend\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/LeadCounty/MapServer/2`,\r\n },\r\n {\r\n id:\r\n 'county-choropleth-elevated-bll-rate-housing',\r\n sourceLayer: true,\r\n zIndexPosition: 'back',\r\n title:\r\n 'Elevated Blood Lead Rates by County',\r\n yearKey: 'Year',\r\n subtitle:\r\n '% of children under age 6 with blood lead levels ≥ 5 µg/dL',\r\n defaultVisible: true,\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/LeadCounty/MapServer/3`,\r\n },\r\n {\r\n id: 'reference-point-layer-schools',\r\n scaleDependent: false,\r\n referenceLayer: true,\r\n toggleable: true, // Sets if the layer is toggleable within the legend\r\n custom: true,\r\n zIndexPosition: 'front',\r\n isModern: false,\r\n title: 'Public Schools',\r\n subtitle: 'K-12',\r\n defaultVisible: false,\r\n omitCommunityProfile: true, // If true, will prevent the community profile section from displaying\r\n url:\r\n 'https://geodata.md.gov/imap/rest/services/Education/MD_EducationFacilities/FeatureServer/5',\r\n symbolDescription: 'school',\r\n content: {\r\n title: 'SCHOOL_NAME',\r\n line1: 'STREET',\r\n line2A: 'CITY',\r\n line2B: ', MD ',\r\n line3: 'ZIP',\r\n },\r\n drawingInfo: {\r\n renderer: {\r\n type: 'simple',\r\n symbol: {\r\n type: 'esriPMS',\r\n url: '',\r\n imageData:\r\n 'PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTFwdCIgaGVpZ2h0PSIxNnB0IiB2aWV3Qm94PSIwIDAgMTEgMTYiIHZlcnNpb249IjEuMSI+CjxnIGlkPSJzdXJmYWNlMSI+CjxwYXRoIHN0eWxlPSJmaWxsLXJ1bGU6ZXZlbm9kZDtmaWxsOnJnYigwJSwwJSwwJSk7ZmlsbC1vcGFjaXR5OjAuNDU0MTY0O3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZTpyZ2IoMTAwJSwxMDAlLDEwMCUpO3N0cm9rZS1vcGFjaXR5OjAuODtzdHJva2UtbWl0ZXJsaW1pdDo0OyIgZD0iTSAxMDEuOTk5OTE1IDAuMDAxNDAwMzkgQyA5OC42ODc3NCAwLjAwMTQwMDM5IDk2LjAwMDAzMyAyLjY4NTUxNyA5Ni4wMDAwMzMgNS45OTgxNiBDIDk2LjAwMDAzMyA2LjkzMDY0NiA5Ni4yMDk4NTQgNy44MDY0NjEgOTYuNTg5NTMgOC41ODk1NDMgQyA5Ni42MDk1MTMgOC42MzU5MSAxMDEuOTk5OTE1IDE5LjIwMjM2NiAxMDEuOTk5OTE1IDE5LjIwMjM2NiBMIDEwNy4zNDUzNTUgOC43MjM0OTIgQyAxMDcuNzY0OTk3IDcuOTA0MzQ3IDEwNy45OTk3OTcgNi45ODIxNjUgMTA3Ljk5OTc5NyA1Ljk5ODE2IEMgMTA3Ljk5OTc5NyAyLjY4NTUxNyAxMDUuMzEyMDg5IDAuMDAxNDAwMzkgMTAxLjk5OTkxNSAwLjAwMTQwMDM5IFogTSAxMDEuOTk5OTE1IDAuMDAxNDAwMzkgIiB0cmFuc2Zvcm09Im1hdHJpeCgwLjc4MTkxNiwwLDAsMC43NTgyMjIsLTc0LjE3NzI4MiwwLjQyMDgxMykiLz4KPC9nPgo8L3N2Zz4K',\r\n contentType:\r\n 'image/svg+xml',\r\n width: 15,\r\n height: 15,\r\n angle: 0,\r\n xoffset: 0,\r\n yoffset: 0,\r\n },\r\n label: '',\r\n description:\r\n 'custom marker for schools',\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n set: 'secondary',\r\n geometry: 'Tract',\r\n outFields: [\r\n 'GEOID',\r\n 'TractCode',\r\n 'TractName',\r\n 'FullCounty',\r\n 'Calc_UnitsBuiltBefore1980_Pct',\r\n 'Rate',\r\n ],\r\n columnHeaders: [\r\n {\r\n field: 'FullCounty',\r\n headerName: 'County',\r\n width: 200,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'TractName',\r\n headerName: 'Tract Name',\r\n width: 200,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'Rate',\r\n headerName: 'Elevated (%)',\r\n exportHeaderName: 'Percent Elevated',\r\n width: 140,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'Calc_UnitsBuiltBefore1980_Pct',\r\n headerName: 'Pre 1980s Housing (%)',\r\n exportHeaderName:\r\n \"Percent Pre-1980's Housing\",\r\n width: 210,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle: 'Housing and Lead by Census Tract',\r\n popupContent: {\r\n title: {\r\n field: 'PopupTitle',\r\n },\r\n health: {\r\n name:\r\n 'Percent of children under age 6 with blood lead levels ≥ 5 µg/dL',\r\n field: 'Rate',\r\n unit: '%',\r\n },\r\n environment: {\r\n name:\r\n 'Percent of housing built before 1980',\r\n field: 'Calc_UnitsBuiltBefore1980_Pct',\r\n unit: '%',\r\n className: 'field-value',\r\n },\r\n },\r\n setLayers: [\r\n {\r\n id: 'point-housing-age-census',\r\n zIndexPosition: 'front',\r\n title:\r\n 'Housing Built before 1980 by Census Tract',\r\n subtitle:\r\n '% of housing units built before 1980',\r\n yearKey: 'AcsYears',\r\n defaultVisible: true,\r\n toggleable: true, // Sets if the layer is toggleable within the legend\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/LeadCensusTract/MapServer/1`,\r\n },\r\n {\r\n id:\r\n 'choropleth-elevated-bll-rate-housing-census',\r\n sourceLayer: true,\r\n zIndexPosition: 'back',\r\n title:\r\n 'Elevated Blood Lead Rates by Census Tract',\r\n yearKey: 'Year',\r\n subtitle:\r\n '% of children under age 6 with blood lead levels ≥ 5 µg/dL',\r\n defaultVisible: true,\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/LeadCensusTract/MapServer/2`,\r\n },\r\n {\r\n id: 'reference-point-layer-schools',\r\n scaleDependent: false,\r\n referenceLayer: true,\r\n toggleable: true, // Sets if the layer is toggleable within the legend\r\n custom: true,\r\n zIndexPosition: 'front',\r\n isModern: false,\r\n title: 'Public Schools',\r\n subtitle: 'K-12',\r\n defaultVisible: false,\r\n omitCommunityProfile: true, // If true, will prevent the community profile section from displaying\r\n url:\r\n 'https://geodata.md.gov/imap/rest/services/Education/MD_EducationFacilities/FeatureServer/5',\r\n symbolDescription: 'school',\r\n content: {\r\n title: 'SCHOOL_NAME',\r\n line1: 'STREET',\r\n line2A: 'CITY',\r\n line2B: ', MD ',\r\n line3: 'ZIP',\r\n },\r\n drawingInfo: {\r\n renderer: {\r\n type: 'simple',\r\n symbol: {\r\n type: 'esriPMS',\r\n url: '',\r\n imageData:\r\n 'PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTFwdCIgaGVpZ2h0PSIxNnB0IiB2aWV3Qm94PSIwIDAgMTEgMTYiIHZlcnNpb249IjEuMSI+CjxnIGlkPSJzdXJmYWNlMSI+CjxwYXRoIHN0eWxlPSJmaWxsLXJ1bGU6ZXZlbm9kZDtmaWxsOnJnYigwJSwwJSwwJSk7ZmlsbC1vcGFjaXR5OjAuNDU0MTY0O3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZTpyZ2IoMTAwJSwxMDAlLDEwMCUpO3N0cm9rZS1vcGFjaXR5OjAuODtzdHJva2UtbWl0ZXJsaW1pdDo0OyIgZD0iTSAxMDEuOTk5OTE1IDAuMDAxNDAwMzkgQyA5OC42ODc3NCAwLjAwMTQwMDM5IDk2LjAwMDAzMyAyLjY4NTUxNyA5Ni4wMDAwMzMgNS45OTgxNiBDIDk2LjAwMDAzMyA2LjkzMDY0NiA5Ni4yMDk4NTQgNy44MDY0NjEgOTYuNTg5NTMgOC41ODk1NDMgQyA5Ni42MDk1MTMgOC42MzU5MSAxMDEuOTk5OTE1IDE5LjIwMjM2NiAxMDEuOTk5OTE1IDE5LjIwMjM2NiBMIDEwNy4zNDUzNTUgOC43MjM0OTIgQyAxMDcuNzY0OTk3IDcuOTA0MzQ3IDEwNy45OTk3OTcgNi45ODIxNjUgMTA3Ljk5OTc5NyA1Ljk5ODE2IEMgMTA3Ljk5OTc5NyAyLjY4NTUxNyAxMDUuMzEyMDg5IDAuMDAxNDAwMzkgMTAxLjk5OTkxNSAwLjAwMTQwMDM5IFogTSAxMDEuOTk5OTE1IDAuMDAxNDAwMzkgIiB0cmFuc2Zvcm09Im1hdHJpeCgwLjc4MTkxNiwwLDAsMC43NTgyMjIsLTc0LjE3NzI4MiwwLjQyMDgxMykiLz4KPC9nPgo8L3N2Zz4K',\r\n contentType:\r\n 'image/svg+xml',\r\n width: 15,\r\n height: 15,\r\n angle: 0,\r\n xoffset: 0,\r\n yoffset: 0,\r\n },\r\n label: '',\r\n description:\r\n 'custom marker for schools',\r\n },\r\n },\r\n },\r\n {\r\n id: 'county-outline-asthma-ed-rates',\r\n zIndexPosition: 'front',\r\n title: '',\r\n yearKey: 'Year',\r\n subtitle: '',\r\n defaultVisible: true,\r\n sourceLayer: false,\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/CountyBoundaries/MapServer/0`,\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n poverty: {\r\n tabTitle: 'Poverty',\r\n tabPath: 'poverty',\r\n contentType: 'map',\r\n contentTitle:\r\n 'Elevated Childhood Blood Lead and Children in Poverty',\r\n exportTitle:\r\n 'Elevated Childhood Blood Lead and Children in Poverty',\r\n exportSubtitle:\r\n 'Poverty data provided by the American Community Survey (ACS): https://www.census.gov/programs-surveys/acs/data.html',\r\n mapSets: [\r\n {\r\n set: 'primary',\r\n geometry: 'County',\r\n outFields: [\r\n 'County',\r\n 'Rate',\r\n 'PopUnder5BelowFedPovertyLPct',\r\n ],\r\n columnHeaders: [\r\n {\r\n field: 'County',\r\n headerName: 'County',\r\n width: 140,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'Rate',\r\n headerName: 'Elevated (%)',\r\n exportHeaderName: 'Percent Elevated',\r\n width: 140,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'PopUnder5BelowFedPovertyLPct',\r\n headerName: 'Child Poverty (%)',\r\n exportHeaderName:\r\n 'Percent Child Poverty',\r\n width: 170,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle: 'Poverty and Lead (County)',\r\n popupContent: {\r\n title: {\r\n field: 'FullCounty',\r\n },\r\n health: {\r\n name:\r\n 'Percent of children under age 6 with blood lead levels ≥ 5 µg/dL',\r\n field: 'Rate',\r\n unit: '%',\r\n },\r\n environment: {\r\n name:\r\n 'Percent of children under age 5 living below poverty level',\r\n field: 'PopUnder5BelowFedPovertyLPct',\r\n unit: '%',\r\n className: 'field-value',\r\n },\r\n },\r\n setLayers: [\r\n {\r\n id:\r\n 'county-choropleth-elevated-bll-rate-poverty',\r\n sourceLayer: true,\r\n zIndexPosition: 'back',\r\n title:\r\n 'Elevated Blood Lead Rates by County',\r\n yearKey: 'Year',\r\n subtitle:\r\n '% of children under age 6 with blood lead levels ≥ 5µg/dL',\r\n defaultVisible: true,\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/LeadCounty/MapServer/5`,\r\n },\r\n {\r\n id: 'county-point-poverty',\r\n zIndexPosition: 'front',\r\n title: 'Children in Poverty by County',\r\n yearKey: 'ACS_Year',\r\n subtitle:\r\n '% of children under age 5 living below poverty level',\r\n defaultVisible: true,\r\n toggleable: true, // Sets if the layer is toggleable within the legend\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/LeadCounty/MapServer/4`,\r\n },\r\n {\r\n id: 'reference-point-layer-schools',\r\n scaleDependent: false,\r\n referenceLayer: true,\r\n toggleable: true, // Sets if the layer is toggleable within the legend\r\n custom: true,\r\n zIndexPosition: 'front',\r\n isModern: false,\r\n title: 'Public Schools',\r\n subtitle: 'K-12',\r\n defaultVisible: false,\r\n omitCommunityProfile: true, // If true, will prevent the community profile section from displaying\r\n url:\r\n 'https://geodata.md.gov/imap/rest/services/Education/MD_EducationFacilities/FeatureServer/5',\r\n symbolDescription: 'school',\r\n content: {\r\n title: 'SCHOOL_NAME',\r\n line1: 'STREET',\r\n line2A: 'CITY',\r\n line2B: ', MD ',\r\n line3: 'ZIP',\r\n },\r\n drawingInfo: {\r\n renderer: {\r\n type: 'simple',\r\n symbol: {\r\n type: 'esriPMS',\r\n url: '',\r\n imageData:\r\n 'PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTFwdCIgaGVpZ2h0PSIxNnB0IiB2aWV3Qm94PSIwIDAgMTEgMTYiIHZlcnNpb249IjEuMSI+CjxnIGlkPSJzdXJmYWNlMSI+CjxwYXRoIHN0eWxlPSJmaWxsLXJ1bGU6ZXZlbm9kZDtmaWxsOnJnYigwJSwwJSwwJSk7ZmlsbC1vcGFjaXR5OjAuNDU0MTY0O3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZTpyZ2IoMTAwJSwxMDAlLDEwMCUpO3N0cm9rZS1vcGFjaXR5OjAuODtzdHJva2UtbWl0ZXJsaW1pdDo0OyIgZD0iTSAxMDEuOTk5OTE1IDAuMDAxNDAwMzkgQyA5OC42ODc3NCAwLjAwMTQwMDM5IDk2LjAwMDAzMyAyLjY4NTUxNyA5Ni4wMDAwMzMgNS45OTgxNiBDIDk2LjAwMDAzMyA2LjkzMDY0NiA5Ni4yMDk4NTQgNy44MDY0NjEgOTYuNTg5NTMgOC41ODk1NDMgQyA5Ni42MDk1MTMgOC42MzU5MSAxMDEuOTk5OTE1IDE5LjIwMjM2NiAxMDEuOTk5OTE1IDE5LjIwMjM2NiBMIDEwNy4zNDUzNTUgOC43MjM0OTIgQyAxMDcuNzY0OTk3IDcuOTA0MzQ3IDEwNy45OTk3OTcgNi45ODIxNjUgMTA3Ljk5OTc5NyA1Ljk5ODE2IEMgMTA3Ljk5OTc5NyAyLjY4NTUxNyAxMDUuMzEyMDg5IDAuMDAxNDAwMzkgMTAxLjk5OTkxNSAwLjAwMTQwMDM5IFogTSAxMDEuOTk5OTE1IDAuMDAxNDAwMzkgIiB0cmFuc2Zvcm09Im1hdHJpeCgwLjc4MTkxNiwwLDAsMC43NTgyMjIsLTc0LjE3NzI4MiwwLjQyMDgxMykiLz4KPC9nPgo8L3N2Zz4K',\r\n contentType:\r\n 'image/svg+xml',\r\n width: 15,\r\n height: 15,\r\n angle: 0,\r\n xoffset: 0,\r\n yoffset: 0,\r\n },\r\n label: '',\r\n description:\r\n 'custom marker for schools',\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n set: 'secondary',\r\n geometry: 'Tract',\r\n outFields: [\r\n 'GEOID',\r\n 'TractCode',\r\n 'TractName',\r\n 'FullCounty',\r\n 'PopUnder5BelowFedPovertyLPct',\r\n 'Rate',\r\n ],\r\n columnHeaders: [\r\n {\r\n field: 'FullCounty',\r\n headerName: 'County',\r\n width: 200,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'TractName',\r\n headerName: 'Tract Name',\r\n width: 200,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'Rate',\r\n headerName: 'Elevated (%)',\r\n exportHeaderName: 'Percent Elevated',\r\n width: 140,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'PopUnder5BelowFedPovertyLPct',\r\n headerName: 'Child Poverty (%)',\r\n exportHeaderName:\r\n 'Percent Child Poverty',\r\n width: 170,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle: 'Poverty and Lead by Census Tract',\r\n popupContent: {\r\n title: {\r\n field: 'PopupTitle',\r\n },\r\n health: {\r\n name:\r\n 'Percent of children under age 6 with blood lead levels ≥ 5 µg/dL',\r\n field: 'Rate',\r\n unit: '%',\r\n },\r\n environment: {\r\n name:\r\n 'Percent of children under age 5 living below poverty level',\r\n field: 'PopUnder5BelowFedPovertyLPct',\r\n unit: '%',\r\n className: 'field-value',\r\n },\r\n },\r\n setLayers: [\r\n {\r\n id:\r\n 'choropleth-elevated-bll-rate-poverty-census',\r\n sourceLayer: true,\r\n zIndexPosition: 'back',\r\n title:\r\n 'Elevated Blood Lead Rates by Census Tract',\r\n yearKey: 'Year',\r\n subtitle:\r\n '% of children under age 6 with blood lead levels ≥ 5µg/dL',\r\n defaultVisible: true,\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/LeadCensusTract/MapServer/4`,\r\n },\r\n {\r\n id: 'point-poverty-census',\r\n zIndexPosition: 'front',\r\n title:\r\n 'Children in Poverty by Census Tract',\r\n yearKey: 'AcsYears',\r\n subtitle:\r\n '% of children under age 5 living below poverty level',\r\n defaultVisible: true,\r\n toggleable: true, // Sets if the layer is toggleable within the legend\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/LeadCensusTract/MapServer/3`,\r\n },\r\n {\r\n id: 'reference-point-layer-schools',\r\n scaleDependent: false,\r\n referenceLayer: true,\r\n toggleable: true, // Sets if the layer is toggleable within the legend\r\n custom: true,\r\n zIndexPosition: 'front',\r\n isModern: false,\r\n title: 'Public Schools',\r\n subtitle: 'K-12',\r\n defaultVisible: false,\r\n omitCommunityProfile: true, // If true, will prevent the community profile section from displaying\r\n url:\r\n 'https://geodata.md.gov/imap/rest/services/Education/MD_EducationFacilities/FeatureServer/5',\r\n symbolDescription: 'school',\r\n content: {\r\n title: 'SCHOOL_NAME',\r\n line1: 'STREET',\r\n line2A: 'CITY',\r\n line2B: ', MD ',\r\n line3: 'ZIP',\r\n },\r\n drawingInfo: {\r\n renderer: {\r\n type: 'simple',\r\n symbol: {\r\n type: 'esriPMS',\r\n url: '',\r\n imageData:\r\n 'PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTFwdCIgaGVpZ2h0PSIxNnB0IiB2aWV3Qm94PSIwIDAgMTEgMTYiIHZlcnNpb249IjEuMSI+CjxnIGlkPSJzdXJmYWNlMSI+CjxwYXRoIHN0eWxlPSJmaWxsLXJ1bGU6ZXZlbm9kZDtmaWxsOnJnYigwJSwwJSwwJSk7ZmlsbC1vcGFjaXR5OjAuNDU0MTY0O3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZTpyZ2IoMTAwJSwxMDAlLDEwMCUpO3N0cm9rZS1vcGFjaXR5OjAuODtzdHJva2UtbWl0ZXJsaW1pdDo0OyIgZD0iTSAxMDEuOTk5OTE1IDAuMDAxNDAwMzkgQyA5OC42ODc3NCAwLjAwMTQwMDM5IDk2LjAwMDAzMyAyLjY4NTUxNyA5Ni4wMDAwMzMgNS45OTgxNiBDIDk2LjAwMDAzMyA2LjkzMDY0NiA5Ni4yMDk4NTQgNy44MDY0NjEgOTYuNTg5NTMgOC41ODk1NDMgQyA5Ni42MDk1MTMgOC42MzU5MSAxMDEuOTk5OTE1IDE5LjIwMjM2NiAxMDEuOTk5OTE1IDE5LjIwMjM2NiBMIDEwNy4zNDUzNTUgOC43MjM0OTIgQyAxMDcuNzY0OTk3IDcuOTA0MzQ3IDEwNy45OTk3OTcgNi45ODIxNjUgMTA3Ljk5OTc5NyA1Ljk5ODE2IEMgMTA3Ljk5OTc5NyAyLjY4NTUxNyAxMDUuMzEyMDg5IDAuMDAxNDAwMzkgMTAxLjk5OTkxNSAwLjAwMTQwMDM5IFogTSAxMDEuOTk5OTE1IDAuMDAxNDAwMzkgIiB0cmFuc2Zvcm09Im1hdHJpeCgwLjc4MTkxNiwwLDAsMC43NTgyMjIsLTc0LjE3NzI4MiwwLjQyMDgxMykiLz4KPC9nPgo8L3N2Zz4K',\r\n contentType:\r\n 'image/svg+xml',\r\n width: 15,\r\n height: 15,\r\n angle: 0,\r\n xoffset: 0,\r\n yoffset: 0,\r\n },\r\n label: '',\r\n description:\r\n 'custom marker for schools',\r\n },\r\n },\r\n },\r\n {\r\n id: 'county-outline-asthma-ed-rates',\r\n zIndexPosition: 'front',\r\n title: '',\r\n yearKey: 'Year',\r\n subtitle: '',\r\n defaultVisible: true,\r\n sourceLayer: false,\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/CountyBoundaries/MapServer/0`,\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n // race: {\r\n // tabTitle: 'Race',\r\n // tabPath: 'race',\r\n // contentType: 'chart',\r\n // // No contentTitle for charts, will be controlled in \"chartTitle\" property below //\r\n // chartType: 'trendline',\r\n // selectable: true,\r\n // defaultSelection: '000', // 000 is the code used for statewide data at the DB\r\n // info: {\r\n // title: 'Elevated Blood Lead By Race',\r\n // id: 'chart-lead-bll-race-trend',\r\n // subtitle: 'Age-adjusted rate per 10,000',\r\n // },\r\n // chartTitle: 'Elevated Blood Lead By Race',\r\n // displayChartTitle: true,\r\n // displayChartDiscontinuityGraphic: true,\r\n // chartXAxisField: 'year',\r\n // chartDataSets: [\r\n // 'year',\r\n // 'rateWhite',\r\n // 'rateBlackNonHispanic',\r\n // 'rateHispanic',\r\n // 'rateOtherNonHispanic',\r\n // ],\r\n // // TODO: using mock url for now\r\n // url: '',\r\n // urlParams: [{ param: 'jurisdiction' }],\r\n // chartConfig: {\r\n // mainDatasets: [\r\n // {\r\n // label: 'White NH',\r\n // setName: 'rateWhite',\r\n // stratification: 'race',\r\n // title: 'Race',\r\n // fill: false,\r\n // pointRadius: 3,\r\n // pointBorderWidth: 3,\r\n // pointHoverRadius: 8,\r\n // lineTension: 0,\r\n // order: 1,\r\n // data: [],\r\n // },\r\n // {\r\n // label: 'Black NH',\r\n // setName: 'rateBlackNonHispanic',\r\n // stratification: 'race',\r\n // title: 'Race',\r\n // fill: false,\r\n // pointRadius: 3,\r\n // pointBorderWidth: 3,\r\n // pointHoverRadius: 8,\r\n // lineTension: 0,\r\n // order: 1,\r\n // data: [],\r\n // },\r\n // {\r\n // label: 'Hispanic',\r\n // setName: 'rateHispanic',\r\n // stratification: 'race',\r\n // title: 'Race',\r\n // fill: false,\r\n // pointRadius: 3,\r\n // pointBorderWidth: 3,\r\n // pointHoverRadius: 8,\r\n // lineTension: 0,\r\n // order: 1,\r\n // data: [],\r\n // },\r\n // {\r\n // label: 'Other NH',\r\n // setName: 'rateOtherNonHispanic',\r\n // stratification: 'race',\r\n // title: 'Race',\r\n // fill: false,\r\n // pointRadius: 3,\r\n // pointBorderWidth: 3,\r\n // pointHoverRadius: 8,\r\n // lineTension: 0,\r\n // order: 1,\r\n // data: [],\r\n // },\r\n // ],\r\n // },\r\n // columnHeaders: [\r\n // {\r\n // field: 'year',\r\n // headerName: 'Year',\r\n // width: 120,\r\n // },\r\n // {\r\n // field: 'rateWhite',\r\n // headerName: 'White NH',\r\n // width: 120,\r\n // },\r\n // {\r\n // field: 'rateBlackNonHispanic',\r\n // headerName: 'Black NH',\r\n // width: 120,\r\n // },\r\n // {\r\n // field: 'rateHispanic',\r\n // headerName: 'Hispanic',\r\n // width: 120,\r\n // },\r\n // {\r\n // field: 'rateOtherNonHispanic',\r\n // headerName: 'Other NH',\r\n // width: 120,\r\n // },\r\n // ],\r\n // },\r\n },\r\n about: ` `, // Fetched from the database\r\n resources: ` `, // Fetched from the database\r\n },\r\n programs: {\r\n defaultTabPath: 'testing',\r\n themeTitle: 'Programs',\r\n themePath: 'programs',\r\n tabs: {\r\n testing: {\r\n tabTitle: 'Testing',\r\n tabPath: 'testing',\r\n contentType: 'map',\r\n contentTitle:\r\n 'Percent of Children Tested for Lead in Maryland',\r\n exportTitle: 'Percent of Children Tested for Lead',\r\n exportSubtitle:\r\n '*Effective October 1 2019 the legal definition of an​ elevated blood lead level in Maryland is the same as the clinical definition: 5 micrograms per deciliter (µg/dL). Children tested are aged 6 and younger.',\r\n mapSets: [\r\n {\r\n set: 'primary',\r\n geometry: 'County',\r\n outFields: ['County', 'Counts', 'Rate'],\r\n columnHeaders: [\r\n {\r\n field: 'County',\r\n headerName: 'County',\r\n width: 133,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'Counts',\r\n headerName: 'Tested (#)',\r\n exportHeaderName: 'Number Tested',\r\n width: 130,\r\n customFormat: 1,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'Rate',\r\n headerName: 'Tested (%)',\r\n exportHeaderName: 'Percent Tested',\r\n width: 140,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle: 'Testing (County)',\r\n popupContent: {\r\n title: {\r\n field: 'FullCounty',\r\n },\r\n health: {\r\n name:\r\n 'Percent of children under age 6 tested for lead',\r\n field: 'Rate',\r\n unit: '%',\r\n },\r\n },\r\n setLayers: [\r\n {\r\n id: 'county-choropleth-bll-tested-rate',\r\n zIndexPosition: 'back',\r\n title: 'Tested by County',\r\n yearKey: 'Year',\r\n subtitle:\r\n '% of children under age 6 tested for lead',\r\n defaultVisible: true,\r\n sourceLayer: true,\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/LeadCounty/MapServer/6`,\r\n },\r\n {\r\n id: 'reference-point-layer-schools',\r\n scaleDependent: false,\r\n // minScale: 12, -> left in for future reference if we decide to introduce scale dependence again.\r\n referenceLayer: true,\r\n toggleable: true, // Sets if the layer is toggleable within the legend\r\n custom: true,\r\n zIndexPosition: 'front',\r\n isModern: false,\r\n title: 'Public Schools',\r\n subtitle: 'K-12',\r\n defaultVisible: false,\r\n omitCommunityProfile: true, // If true, will prevent the community profile section from displaying\r\n url:\r\n 'https://geodata.md.gov/imap/rest/services/Education/MD_EducationFacilities/FeatureServer/5',\r\n symbolDescription: 'school',\r\n content: {\r\n title: 'SCHOOL_NAME',\r\n line1: 'STREET',\r\n line2A: 'CITY',\r\n line2B: ', MD ',\r\n line3: 'ZIP',\r\n },\r\n drawingInfo: {\r\n renderer: {\r\n type: 'simple',\r\n symbol: {\r\n type: 'esriPMS',\r\n url: '',\r\n imageData:\r\n 'PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTFwdCIgaGVpZ2h0PSIxNnB0IiB2aWV3Qm94PSIwIDAgMTEgMTYiIHZlcnNpb249IjEuMSI+CjxnIGlkPSJzdXJmYWNlMSI+CjxwYXRoIHN0eWxlPSJmaWxsLXJ1bGU6ZXZlbm9kZDtmaWxsOnJnYigwJSwwJSwwJSk7ZmlsbC1vcGFjaXR5OjAuNDU0MTY0O3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZTpyZ2IoMTAwJSwxMDAlLDEwMCUpO3N0cm9rZS1vcGFjaXR5OjAuODtzdHJva2UtbWl0ZXJsaW1pdDo0OyIgZD0iTSAxMDEuOTk5OTE1IDAuMDAxNDAwMzkgQyA5OC42ODc3NCAwLjAwMTQwMDM5IDk2LjAwMDAzMyAyLjY4NTUxNyA5Ni4wMDAwMzMgNS45OTgxNiBDIDk2LjAwMDAzMyA2LjkzMDY0NiA5Ni4yMDk4NTQgNy44MDY0NjEgOTYuNTg5NTMgOC41ODk1NDMgQyA5Ni42MDk1MTMgOC42MzU5MSAxMDEuOTk5OTE1IDE5LjIwMjM2NiAxMDEuOTk5OTE1IDE5LjIwMjM2NiBMIDEwNy4zNDUzNTUgOC43MjM0OTIgQyAxMDcuNzY0OTk3IDcuOTA0MzQ3IDEwNy45OTk3OTcgNi45ODIxNjUgMTA3Ljk5OTc5NyA1Ljk5ODE2IEMgMTA3Ljk5OTc5NyAyLjY4NTUxNyAxMDUuMzEyMDg5IDAuMDAxNDAwMzkgMTAxLjk5OTkxNSAwLjAwMTQwMDM5IFogTSAxMDEuOTk5OTE1IDAuMDAxNDAwMzkgIiB0cmFuc2Zvcm09Im1hdHJpeCgwLjc4MTkxNiwwLDAsMC43NTgyMjIsLTc0LjE3NzI4MiwwLjQyMDgxMykiLz4KPC9nPgo8L3N2Zz4K',\r\n contentType:\r\n 'image/svg+xml',\r\n width: 15,\r\n height: 15,\r\n angle: 0,\r\n xoffset: 0,\r\n yoffset: 0,\r\n },\r\n label: '',\r\n description:\r\n 'custom marker for schools',\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n set: 'secondary',\r\n geometry: 'Tract',\r\n outFields: [\r\n 'GEOID',\r\n 'TractCode',\r\n 'TractName',\r\n 'FullCounty',\r\n 'Counts',\r\n 'Rate',\r\n ],\r\n columnHeaders: [\r\n {\r\n field: 'FullCounty',\r\n headerName: 'County',\r\n align: 'left',\r\n width: 200,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'TractName',\r\n headerName: 'Tract Name',\r\n align: 'left',\r\n width: 200,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'Counts',\r\n headerName: 'Tested (#)',\r\n exportHeaderName: 'Number Tested',\r\n width: 130,\r\n customFormat: 1,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'Rate',\r\n headerName: 'Tested (%)',\r\n exportHeaderName: 'Percent Tested',\r\n width: 140,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle: 'Poverty and Lead by Census Tract',\r\n popupContent: {\r\n title: {\r\n field: 'PopupTitle',\r\n },\r\n health: {\r\n name:\r\n 'Percent of children under age 6 tested for lead',\r\n field: 'Rate',\r\n unit: '%',\r\n },\r\n },\r\n setLayers: [\r\n {\r\n id: 'census-choropleth-bll-tested-rate',\r\n zIndexPosition: 'back',\r\n title: 'Tested by Census Tract',\r\n yearKey: 'Year',\r\n subtitle:\r\n '% of children under age 6 tested for lead',\r\n defaultVisible: true,\r\n sourceLayer: true,\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/LeadCensusTract/MapServer/5`,\r\n },\r\n {\r\n id: 'reference-point-layer-schools',\r\n scaleDependent: false,\r\n // minScale: 12, -> left in for future reference if we decide to introduce scale dependence again.\r\n referenceLayer: true,\r\n toggleable: true, // Sets if the layer is toggleable within the legend\r\n custom: true,\r\n zIndexPosition: 'front',\r\n isModern: false,\r\n title: 'Public Schools',\r\n subtitle: 'K-12',\r\n defaultVisible: false,\r\n omitCommunityProfile: true, // If true, will prevent the community profile section from displaying\r\n url:\r\n 'https://geodata.md.gov/imap/rest/services/Education/MD_EducationFacilities/FeatureServer/5',\r\n symbolDescription: 'school',\r\n content: {\r\n title: 'SCHOOL_NAME',\r\n line1: 'STREET',\r\n line2A: 'CITY',\r\n line2B: ', MD ',\r\n line3: 'ZIP',\r\n },\r\n drawingInfo: {\r\n renderer: {\r\n type: 'simple',\r\n symbol: {\r\n type: 'esriPMS',\r\n url: '',\r\n imageData:\r\n 'PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTFwdCIgaGVpZ2h0PSIxNnB0IiB2aWV3Qm94PSIwIDAgMTEgMTYiIHZlcnNpb249IjEuMSI+CjxnIGlkPSJzdXJmYWNlMSI+CjxwYXRoIHN0eWxlPSJmaWxsLXJ1bGU6ZXZlbm9kZDtmaWxsOnJnYigwJSwwJSwwJSk7ZmlsbC1vcGFjaXR5OjAuNDU0MTY0O3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZTpyZ2IoMTAwJSwxMDAlLDEwMCUpO3N0cm9rZS1vcGFjaXR5OjAuODtzdHJva2UtbWl0ZXJsaW1pdDo0OyIgZD0iTSAxMDEuOTk5OTE1IDAuMDAxNDAwMzkgQyA5OC42ODc3NCAwLjAwMTQwMDM5IDk2LjAwMDAzMyAyLjY4NTUxNyA5Ni4wMDAwMzMgNS45OTgxNiBDIDk2LjAwMDAzMyA2LjkzMDY0NiA5Ni4yMDk4NTQgNy44MDY0NjEgOTYuNTg5NTMgOC41ODk1NDMgQyA5Ni42MDk1MTMgOC42MzU5MSAxMDEuOTk5OTE1IDE5LjIwMjM2NiAxMDEuOTk5OTE1IDE5LjIwMjM2NiBMIDEwNy4zNDUzNTUgOC43MjM0OTIgQyAxMDcuNzY0OTk3IDcuOTA0MzQ3IDEwNy45OTk3OTcgNi45ODIxNjUgMTA3Ljk5OTc5NyA1Ljk5ODE2IEMgMTA3Ljk5OTc5NyAyLjY4NTUxNyAxMDUuMzEyMDg5IDAuMDAxNDAwMzkgMTAxLjk5OTkxNSAwLjAwMTQwMDM5IFogTSAxMDEuOTk5OTE1IDAuMDAxNDAwMzkgIiB0cmFuc2Zvcm09Im1hdHJpeCgwLjc4MTkxNiwwLDAsMC43NTgyMjIsLTc0LjE3NzI4MiwwLjQyMDgxMykiLz4KPC9nPgo8L3N2Zz4K',\r\n contentType:\r\n 'image/svg+xml',\r\n width: 15,\r\n height: 15,\r\n angle: 0,\r\n xoffset: 0,\r\n yoffset: 0,\r\n },\r\n label: '',\r\n description:\r\n 'custom marker for schools',\r\n },\r\n },\r\n },\r\n {\r\n id: 'county-outline-asthma-ed-rates',\r\n zIndexPosition: 'front',\r\n title: '',\r\n yearKey: 'Year',\r\n subtitle: '',\r\n defaultVisible: true,\r\n sourceLayer: false,\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/CountyBoundaries/MapServer/0`,\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n testingTrend: {\r\n tabTitle: 'Testing Trends',\r\n tabPath: 'testingTrend',\r\n contentType: 'chart',\r\n // No contentTitle for charts, will be controlled in \"chartTitle\" property below //\r\n exportTitle:\r\n 'Percent of Children Tested for Lead in Maryland',\r\n exportSubtitle:\r\n '*Effective October 1 2019 the legal definition of an​ elevated blood lead level in Maryland is the same as the clinical definition: 5 micrograms per deciliter (µg/dL). Children tested are aged 6 and younger.',\r\n chartType: 'trendline',\r\n selectable: true,\r\n stratifiable: true,\r\n\r\n // The following array of stratifications will create a chart stratification button for each item:\r\n stratifications: [\r\n {\r\n title: 'Age', // Name that appears for button\r\n field: 'age', // Must match stratification key name in json response returned from endpoint\r\n },\r\n {\r\n title: 'Sex', // Name that appears for button\r\n field: 'sex', // Must match stratification key name in json response returned from endpoint\r\n },\r\n ],\r\n defaultSelection: '000', // 000 is the code used for statewide data at the DB\r\n defaultSelectionName: 'Statewide',\r\n defaultSetNames: ['stateRate'],\r\n baseline: '000', // 000 is the code used for statewide data at the DB\r\n info: {\r\n title: 'Percent Children Tested',\r\n id: 'chart-lead-percent-tested-trend',\r\n subtitle: 'Age-adjusted rate per 10,000',\r\n },\r\n chartTitle:\r\n 'Percent of Children Under Age 6 Tested for Lead',\r\n displayChartTitle: true,\r\n displayXAxisLabel: true,\r\n xAxisLabel: 'Year',\r\n displayYAxisLabel: true,\r\n displayChartDiscontinuityGraphic: false,\r\n yAxisLabel: 'Percent of Children Tested',\r\n chartXAxisField: 'year',\r\n chartDataSets: ['rate', 'stateRate'],\r\n url: `${process.env.REACT_APP_EPHT_API}/Lead/GetLeadPercentTested`,\r\n urlParams: [\r\n { param: 'jurisdiction', valueKey: 'code' },\r\n ],\r\n chartConfig: {\r\n mainDatasets: [\r\n {\r\n label: 'County',\r\n setName: 'rate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n baseline: true,\r\n label: 'Statewide',\r\n setName: 'stateRate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n ],\r\n // Note: Baseline dataset should receive `baseline: true` property.\r\n // Additional note: The `order` property will dictate how lines stack on each other, in ascending order. Baseline should be given highest value to ensure it is colored correctly by Chart.js (gray)\r\n stratificationDatasets: [\r\n {\r\n label: 'Female',\r\n setName: 'rateFemale',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: 'Male',\r\n setName: 'rateMale',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: 'All',\r\n baseline: true,\r\n setName: 'rateTotal',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 4,\r\n data: [],\r\n },\r\n {\r\n label: '0 - <12 months',\r\n setName: 'rate0to12',\r\n stratification: 'age',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: '12 - <36 months',\r\n setName: 'rate12to36',\r\n stratification: 'age',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: '36 - <72 months',\r\n setName: 'rate36to72',\r\n stratification: 'age',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 3,\r\n data: [],\r\n },\r\n {\r\n label: 'All Ages < 6 years',\r\n baseline: true,\r\n setName: 'rateTotal',\r\n stratification: 'age',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 4,\r\n data: [],\r\n },\r\n ],\r\n },\r\n columnHeaders: [\r\n {\r\n field: 'year',\r\n headerName: 'Year',\r\n width: 120,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate',\r\n headerName: 'County Mean',\r\n width: 140,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'stateRate',\r\n headerName: 'Statewide Mean',\r\n width: 170,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateMale',\r\n headerName: 'Male',\r\n stratification: 'sex',\r\n width: 150,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateFemale',\r\n headerName: 'Female',\r\n stratification: 'sex',\r\n width: 150,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate0to12',\r\n headerName: '0 - <12 months',\r\n stratification: 'age',\r\n width: 150,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate12to36',\r\n headerName: '12 - <36 months',\r\n stratification: 'age',\r\n width: 150,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate36to72',\r\n headerName: '36 - <72 months',\r\n stratification: 'age',\r\n width: 150,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Percent Children Under Age 6 Tested for Lead',\r\n },\r\n testingTable: {\r\n tabTitle: 'Testing Table',\r\n tabPath: 'testingTable',\r\n contentType: 'table',\r\n url: `${process.env.REACT_APP_EPHT_API}/Lead/GetLeadPercentTestedAllJurisdictions`,\r\n info: {\r\n title: 'Testing Table',\r\n id: 'table-lead-percent-tested-trend',\r\n subtitle: 'Age-adjusted rate per 10,000',\r\n },\r\n tableTitle:\r\n 'Percent of Children Under Age 6 Tested for Lead',\r\n exportTitle:\r\n 'Percent of Children Under Age 6 Tested for Lead',\r\n exportSubtitle:\r\n '*Effective October 1 2019 the legal definition of an​ elevated blood lead level in Maryland is the same as the clinical definition: 5 micrograms per deciliter (µg/dL). Children tested are aged 6 and younger.',\r\n stratifications: [\r\n {\r\n title: 'Age', // Name that appears for button\r\n field: 'age', // Must match stratification key name in json response returned from endpoint\r\n },\r\n {\r\n title: 'Sex', // Name that appears for button\r\n field: 'sex', // Must match stratification key name in json response returned from endpoint\r\n },\r\n ],\r\n baseline: '000',\r\n columnHeaders: [\r\n {\r\n field: 'yearsend',\r\n headerName: 'Year',\r\n width: 120,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'jurisdiction',\r\n headerName: 'County',\r\n width: 140,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateTotal',\r\n headerName: 'Total 0 - <72 mo.',\r\n width: 170,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateFemale',\r\n headerName: 'Female 0 - <72 mo.',\r\n stratification: 'sex',\r\n width: 150,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateMale',\r\n headerName: 'Male 0 - <72 mo.',\r\n stratification: 'sex',\r\n width: 150,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate0to12',\r\n headerName: 'Total 0 - <12 mo.',\r\n stratification: 'age',\r\n width: 150,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateFemale0to12',\r\n headerName: 'Female 0 - <12 mo.',\r\n stratification: 'age',\r\n width: 150,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateMale0to12',\r\n headerName: 'Male 0 - <12 mo.',\r\n stratification: 'age',\r\n width: 150,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate12to36',\r\n headerName: 'Total 12 - <36 mo.',\r\n stratification: 'age',\r\n width: 150,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateFemale12to36',\r\n headerName: 'Female 12 - <36 mo.',\r\n stratification: 'age',\r\n width: 150,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateMale12to36',\r\n headerName: 'Male 12 - <36 mo.',\r\n stratification: 'age',\r\n width: 150,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate36to72',\r\n headerName: 'Total 36 - <72 mo.',\r\n stratification: 'age',\r\n width: 150,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateFemale36to72',\r\n headerName: 'Female 36 - <72 mo.',\r\n stratification: 'age',\r\n width: 150,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateMale36to72',\r\n headerName: 'Male 36 - <72 mo.',\r\n stratification: 'age',\r\n width: 150,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n },\r\n levelTrend: {\r\n tabTitle: 'Lead Level Trends',\r\n tabPath: 'levelTrend',\r\n contentType: 'chart',\r\n // No contentTitle for charts, will be controlled in \"chartTitle\" property below //\r\n exportTitle:\r\n 'Geometric Mean Blood Lead Level (µg/dL) for Children Under Age 6',\r\n chartType: 'trendline',\r\n selectable: true,\r\n stratifiable: true,\r\n\r\n // The following array of stratifications will create a chart stratification button for each item:\r\n stratifications: [\r\n {\r\n title: 'Age', // Name that appears for button\r\n field: 'age', // Must match stratification key name in json response returned from endpoint\r\n },\r\n {\r\n title: 'Sex', // Name that appears for button\r\n field: 'sex', // Must match stratification key name in json response returned from endpoint\r\n },\r\n ],\r\n defaultSelection: '000', // 000 is the code used for statewide data at the DB\r\n defaultSetNames: ['stateRate'],\r\n baseline: '000', // 000 is the code used for statewide data at the DB\r\n info: {\r\n title: 'Geometric Mean',\r\n id: 'chart-lead-geometric-mean-trend',\r\n subtitle: '',\r\n },\r\n chartTitle:\r\n 'Geometric Mean Blood Lead Level (µg/dL) for Children Under Age 6',\r\n displayChartTitle: true,\r\n displayYAxisLabel: true,\r\n displayXAxisLabel: true,\r\n displayChartDiscontinuityGraphic: false,\r\n yAxisLabel: 'Micrograms per Deciliter',\r\n xAxisLabel: 'Year',\r\n chartXAxisField: 'year',\r\n chartDataSets: ['rate', 'stateRate'],\r\n url: `${process.env.REACT_APP_EPHT_API}/Lead/GetLeadGeoMean`,\r\n urlParams: [\r\n { param: 'jurisdiction', valueKey: 'code' },\r\n ],\r\n chartConfig: {\r\n mainDatasets: [\r\n {\r\n label: 'County',\r\n setName: 'rate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n baseline: true,\r\n label: 'Statewide',\r\n setName: 'stateRate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n ],\r\n // Note: Baseline dataset should receive `baseline: true` property.\r\n // Additional note: The `order` property will dictate how lines stack on each other, in ascending order. Baseline should be given highest value to ensure it is colored correctly by Chart.js (gray)\r\n stratificationDatasets: [\r\n {\r\n label: 'Female',\r\n setName: 'rateFemale',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: 'Male',\r\n setName: 'rateMale',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: 'All',\r\n baseline: true,\r\n setName: 'rateTotal',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 4,\r\n data: [],\r\n },\r\n {\r\n label: '0 - <12 months',\r\n setName: 'rate0to12',\r\n stratification: 'age',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: '12 - <36 months',\r\n setName: 'rate12to36',\r\n stratification: 'age',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: '36 - <72 months',\r\n setName: 'rate36to72',\r\n stratification: 'age',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 3,\r\n data: [],\r\n },\r\n {\r\n label: 'All Ages < 6 years',\r\n baseline: true,\r\n setName: 'rateTotal',\r\n stratification: 'age',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 4,\r\n data: [],\r\n },\r\n ],\r\n },\r\n columnHeaders: [\r\n {\r\n field: 'year',\r\n headerName: 'Year',\r\n width: 120,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate',\r\n headerName: 'County Mean',\r\n width: 140,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'stateRate',\r\n headerName: 'Statewide Mean',\r\n width: 170,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateMale',\r\n headerName: 'Male',\r\n stratification: 'sex',\r\n exportHeader:\r\n 'Statewide Rate of Childhood Testing',\r\n width: 150,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateFemale',\r\n headerName: 'Female',\r\n stratification: 'sex',\r\n exportHeader:\r\n 'Statewide Rate of Childhood Testing',\r\n width: 150,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate0to12',\r\n headerName: '0 - <12 months',\r\n stratification: 'age',\r\n exportHeader:\r\n 'Statewide Rate of Childhood Testing',\r\n width: 150,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate12to36',\r\n headerName: '12 - <36 months',\r\n stratification: 'age',\r\n exportHeader:\r\n 'Statewide Rate of Childhood Testing',\r\n width: 150,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate36to72',\r\n headerName: '36 - <72 months',\r\n stratification: 'age',\r\n exportHeader:\r\n 'Statewide Rate of Childhood Testing',\r\n width: 150,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle: 'Mean Childhood Blood Lead Level',\r\n },\r\n levelTable: {\r\n tabTitle: 'Lead Level Table',\r\n tabPath: 'levelTable',\r\n contentType: 'table',\r\n url: `${process.env.REACT_APP_EPHT_API}/Lead/GetLeadGeoMeanAllJurisdictions`,\r\n info: {\r\n title: 'Lead Level Table',\r\n id: 'table-lead-percent-tested-trend',\r\n subtitle: 'Age-adjusted rate per 10,000',\r\n },\r\n tableTitle:\r\n 'Geometric Mean Blood Lead Level (µg/dL) for Children Under Age 6',\r\n exportTitle:\r\n 'Geometric Mean Blood Lead Level (µg/dL) for Children Under Age 6',\r\n stratifications: [\r\n {\r\n title: 'Age', // Name that appears for button\r\n field: 'age', // Must match stratification key name in json response returned from endpoint\r\n },\r\n {\r\n title: 'Sex', // Name that appears for button\r\n field: 'sex', // Must match stratification key name in json response returned from endpoint\r\n },\r\n ],\r\n baseline: '000',\r\n columnHeaders: [\r\n {\r\n field: 'yearsend',\r\n headerName: 'Year',\r\n width: 120,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'jurisdiction',\r\n headerName: 'County',\r\n width: 140,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateTotal',\r\n headerName: 'Total 0 - <72 mo.',\r\n width: 170,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateFemale',\r\n headerName: 'Female 0 - <72 mo.',\r\n stratification: 'sex',\r\n width: 150,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateMale',\r\n headerName: 'Male 0 - <72 mo.',\r\n stratification: 'sex',\r\n width: 150,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate0to12',\r\n headerName: 'Total 0 - <12 mo.',\r\n stratification: 'age',\r\n width: 150,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateFemale0to12',\r\n headerName: 'Female 0 - <12 mo.',\r\n stratification: 'age',\r\n width: 150,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateMale0to12',\r\n headerName: 'Male 0 - <12 mo.',\r\n stratification: 'age',\r\n width: 150,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate12to36',\r\n headerName: 'Total 12 - <36 mo.',\r\n stratification: 'age',\r\n width: 150,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateFemale12to36',\r\n headerName: 'Female 12 - <36 mo.',\r\n stratification: 'age',\r\n width: 150,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateMale12to36',\r\n headerName: 'Male 12 - <36 mo.',\r\n stratification: 'age',\r\n width: 150,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate36to72',\r\n headerName: 'Total 36 - <72 mo.',\r\n stratification: 'age',\r\n width: 150,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateFemale36to72',\r\n headerName: 'Female 36 - <72 mo.',\r\n stratification: 'age',\r\n width: 150,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateMale36to72',\r\n headerName: 'Male 36 - <72 mo.',\r\n stratification: 'age',\r\n width: 150,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n },\r\n offeredEnrollmentTrend: {\r\n tabTitle: 'Offered Enrollment Trend',\r\n tabPath: 'offeredEnrollmentTrend',\r\n contentType: 'chart',\r\n // No contentTitle for charts, will be controlled in \"chartTitle\" property below //\r\n exportTitle:\r\n 'Number Offered Enrollment in Lead Home Visiting Program',\r\n exportSubtitle: '',\r\n chartType: 'trendline',\r\n selectable: false,\r\n stratifiable: true,\r\n // The following array of stratifications will create a chart stratification button for each item:\r\n stratifications: [\r\n {\r\n title: 'Race/Ethnicity',\r\n field: 'hvRace',\r\n },\r\n {\r\n title: 'Blood Lead Level',\r\n field: 'bllType',\r\n },\r\n ],\r\n defaultSelection: '000', // 000 is the code used for statewide data at the DB\r\n defaultSelectionName: 'County',\r\n defaultSetNames: ['programCount'],\r\n baseline: '000', // 000 is the code used for statewide data at the DB\r\n info: {\r\n title:\r\n 'Number Offered Enrollment in Lead Home Visiting Program',\r\n id:\r\n 'chart-lead-home-visiting-offered-enrollment-trend',\r\n subtitle: '',\r\n },\r\n chartTitle:\r\n 'Number Offered Enrollment in Lead Home Visiting Program',\r\n displayChartTitle: true,\r\n displayXAxisLabel: true,\r\n xAxisLabel: 'Period',\r\n displayYAxisLabel: true,\r\n displayChartDiscontinuityGraphic: false,\r\n omitCommunityProfile: true, // Prevents demographic profile section from displaying.\r\n yAxisLabel: 'Number Offered Enrollment',\r\n chartXAxisField: 'yearAndMonths',\r\n chartDataSets: ['programCount'],\r\n url: `${process.env.REACT_APP_EPHT_API}/Lead/GetHomeVisit`,\r\n urlParams: [{ param: 'type', value: 'BLL_HV_Offered' }],\r\n chartConfig: {\r\n mainDatasets: [\r\n {\r\n baseline: true,\r\n label: 'Program-wide',\r\n setName: 'programCount',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n ],\r\n // Note: Baseline dataset should receive `baseline: true` property.\r\n // Additional note: The `order` property will dictate how lines stack on each other, in ascending order. Baseline should be given highest value to ensure it is colored correctly by Chart.js (gray)\r\n stratificationDatasets: [\r\n {\r\n label: 'Asian/PI NH',\r\n setName: 'countAsianPI',\r\n stratification: 'hvRace',\r\n title: 'Race/Ethnicity',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: 'White NH',\r\n setName: 'countWhite',\r\n stratification: 'hvRace',\r\n title: 'Race/Ethnicity',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: 'Black NH',\r\n setName: 'countBlack',\r\n stratification: 'hvRace',\r\n title: 'Race/Ethnicity',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 3,\r\n data: [],\r\n },\r\n {\r\n label: 'Hispanic',\r\n setName: 'countHispanic',\r\n stratification: 'hvRace',\r\n title: 'Race/Ethnicity',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 4,\r\n data: [],\r\n },\r\n {\r\n label: 'Other NH',\r\n setName: 'countOther',\r\n stratification: 'hvRace',\r\n title: 'Race/Ethnicity',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 5,\r\n data: [],\r\n },\r\n {\r\n label: 'All',\r\n setName: 'countTotal',\r\n stratification: 'hvRace',\r\n title: 'Race/Ethnicity',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 6,\r\n data: [],\r\n },\r\n {\r\n label: '5 - <10 µg/dL',\r\n setName: 'countbll5to10',\r\n stratification: 'bllType',\r\n title: 'Blood Lead Level',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: '10+ µg/dL',\r\n setName: 'countbll10Plus',\r\n stratification: 'bllType',\r\n title: 'Blood Lead Level',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: 'All',\r\n setName: 'countTotal',\r\n stratification: 'bllType',\r\n title: 'Blood Lead Level',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 3,\r\n data: [],\r\n },\r\n ],\r\n },\r\n columnHeaders: [\r\n {\r\n field: 'yearAndMonths',\r\n headerName: 'Period',\r\n width: 120,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'programCount',\r\n headerName: 'Program-wide',\r\n width: 140,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'countAsianPI',\r\n headerName: 'Asian/PI NH',\r\n stratification: 'hvRace',\r\n width: 150,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'countWhite',\r\n headerName: 'White NH',\r\n stratification: 'hvRace',\r\n width: 150,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'countBlack',\r\n headerName: 'Black NH',\r\n stratification: 'hvRace',\r\n width: 150,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'countHispanic',\r\n headerName: 'Hispanic',\r\n stratification: 'hvRace',\r\n width: 150,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'countOther',\r\n headerName: 'Other NH',\r\n stratification: 'hvRace',\r\n width: 150,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'countbll5to10',\r\n headerName: '5 - <10 µg/dL',\r\n stratification: 'bllType',\r\n width: 150,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'countbll10Plus',\r\n headerName: '10+ µg/dL',\r\n stratification: 'bllType',\r\n width: 150,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Number Offered Enrollment in Lead Home Visiting Program',\r\n },\r\n newEnrollmentTrend: {\r\n tabTitle: 'New Enrollment Trend',\r\n tabPath: 'newEnrollmentTrend',\r\n contentType: 'chart',\r\n // No contentTitle for charts, will be controlled in \"chartTitle\" property below //\r\n exportTitle:\r\n 'Number of New Enrollments in Lead Home Visiting Program',\r\n exportSubtitle: '',\r\n chartType: 'trendline',\r\n selectable: false,\r\n stratifiable: true,\r\n // The following array of stratifications will create a chart stratification button for each item:\r\n stratifications: [\r\n {\r\n title: 'Race/Ethnicity',\r\n field: 'hvRace',\r\n },\r\n {\r\n title: 'Blood Lead Level',\r\n field: 'bllType',\r\n },\r\n ],\r\n defaultSelection: '000', // 000 is the code used for statewide data at the DB\r\n defaultSelectionName: 'County',\r\n defaultSetNames: ['programCount'],\r\n baseline: '000', // 000 is the code used for statewide data at the DB\r\n info: {\r\n title:\r\n 'Number of New Enrollments in Lead Home Visiting Program',\r\n id:\r\n 'chart-lead-home-visiting-new-enrollments-trend',\r\n subtitle: '',\r\n },\r\n chartTitle:\r\n 'Number of New Enrollments in Lead Home Visiting Program',\r\n displayChartTitle: true,\r\n displayXAxisLabel: true,\r\n xAxisLabel: 'Period',\r\n displayYAxisLabel: true,\r\n displayChartDiscontinuityGraphic: false,\r\n omitCommunityProfile: true, // Prevents demographic profile section from displaying.\r\n yAxisLabel: 'Number New Enrollments',\r\n chartXAxisField: 'yearAndMonths',\r\n chartDataSets: ['programCount'],\r\n url: `${process.env.REACT_APP_EPHT_API}/Lead/GetHomeVisit`,\r\n urlParams: [\r\n { param: 'type', value: 'BLL_HV_Enrolled' },\r\n ],\r\n chartConfig: {\r\n mainDatasets: [\r\n {\r\n baseline: true,\r\n label: 'Program-wide',\r\n setName: 'programCount',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n ],\r\n // Note: Baseline dataset should receive `baseline: true` property.\r\n // Additional note: The `order` property will dictate how lines stack on each other, in ascending order. Baseline should be given highest value to ensure it is colored correctly by Chart.js (gray)\r\n stratificationDatasets: [\r\n {\r\n label: 'Asian/PI NH',\r\n setName: 'countAsianPI',\r\n stratification: 'hvRace',\r\n title: 'Race/Ethnicity',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: 'White NH',\r\n setName: 'countWhite',\r\n stratification: 'hvRace',\r\n title: 'Race/Ethnicity',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: 'Black NH',\r\n setName: 'countBlack',\r\n stratification: 'hvRace',\r\n title: 'Race/Ethnicity',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 3,\r\n data: [],\r\n },\r\n {\r\n label: 'Hispanic',\r\n setName: 'countHispanic',\r\n stratification: 'hvRace',\r\n title: 'Race/Ethnicity',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 4,\r\n data: [],\r\n },\r\n {\r\n label: 'Other NH',\r\n setName: 'countOther',\r\n stratification: 'hvRace',\r\n title: 'Race/Ethnicity',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 5,\r\n data: [],\r\n },\r\n {\r\n label: 'All',\r\n setName: 'countTotal',\r\n stratification: 'hvRace',\r\n title: 'Race/Ethnicity',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 6,\r\n data: [],\r\n },\r\n {\r\n label: '5 - <10 µg/dL',\r\n setName: 'countbll5to10',\r\n stratification: 'bllType',\r\n title: 'Blood Lead Level',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: '10+ µg/dL',\r\n setName: 'countbll10Plus',\r\n stratification: 'bllType',\r\n title: 'Blood Lead Level',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: 'All',\r\n setName: 'countTotal',\r\n stratification: 'bllType',\r\n title: 'Blood Lead Level',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 3,\r\n data: [],\r\n },\r\n ],\r\n },\r\n columnHeaders: [\r\n {\r\n field: 'yearAndMonths',\r\n headerName: 'Period',\r\n width: 120,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'programCount',\r\n headerName: 'Program-wide',\r\n width: 140,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'countAsianPI',\r\n headerName: 'Asian/PI NH',\r\n stratification: 'hvRace',\r\n width: 150,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'countWhite',\r\n headerName: 'White NH',\r\n stratification: 'hvRace',\r\n width: 150,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'countBlack',\r\n headerName: 'Black NH',\r\n stratification: 'hvRace',\r\n width: 150,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'countHispanic',\r\n headerName: 'Hispanic',\r\n stratification: 'hvRace',\r\n width: 150,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'countOther',\r\n headerName: 'Other NH',\r\n stratification: 'hvRace',\r\n width: 150,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'countbll5to10',\r\n headerName: '5 - <10 µg/dL',\r\n stratification: 'bllType',\r\n width: 150,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'countbll10Plus',\r\n headerName: '10+ µg/dL',\r\n stratification: 'bllType',\r\n width: 150,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Number of New Enrollments in Lead Home Visiting Program',\r\n },\r\n dischargeTrend: {\r\n tabTitle: 'Discharge Trend',\r\n tabPath: 'dischargeTrend',\r\n contentType: 'chart',\r\n // No contentTitle for charts, will be controlled in \"chartTitle\" property below //\r\n exportTitle:\r\n 'Number of Discharges from Lead Home Visiting Program',\r\n exportSubtitle: '',\r\n chartType: 'trendline',\r\n selectable: false,\r\n stratifiable: true,\r\n // The following array of stratifications will create a chart stratification button for each item:\r\n stratifications: [\r\n {\r\n title: 'Race/Ethnicity',\r\n field: 'hvRace',\r\n },\r\n {\r\n title: 'Blood Lead Level',\r\n field: 'bllType',\r\n },\r\n ],\r\n defaultSelection: '000', // 000 is the code used for statewide data at the DB\r\n defaultSelectionName: 'County',\r\n defaultSetNames: ['programCount'],\r\n baseline: '000', // 000 is the code used for statewide data at the DB\r\n info: {\r\n title:\r\n 'Number of Discharges from Lead Home Visiting Program',\r\n id: 'chart-lead-home-visiting-discharge-trend',\r\n subtitle: '',\r\n },\r\n chartTitle:\r\n 'Number of Discharges from Lead Home Visiting Program',\r\n displayChartTitle: true,\r\n displayXAxisLabel: true,\r\n xAxisLabel: 'Period',\r\n displayYAxisLabel: true,\r\n displayChartDiscontinuityGraphic: false,\r\n omitCommunityProfile: true, // Prevents demographic profile section from displaying.\r\n yAxisLabel: 'Number Discharged',\r\n chartXAxisField: 'yearAndMonths',\r\n chartDataSets: ['programCount'],\r\n url: `${process.env.REACT_APP_EPHT_API}/Lead/GetHomeVisit`,\r\n urlParams: [\r\n { param: 'type', value: 'BLL_HV_Discharged' },\r\n ],\r\n chartConfig: {\r\n mainDatasets: [\r\n {\r\n baseline: true,\r\n label: 'Program-wide',\r\n setName: 'programCount',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n ],\r\n // Note: Baseline dataset should receive `baseline: true` property.\r\n // Additional note: The `order` property will dictate how lines stack on each other, in ascending order. Baseline should be given highest value to ensure it is colored correctly by Chart.js (gray)\r\n stratificationDatasets: [\r\n {\r\n label: 'Asian/PI NH',\r\n setName: 'countAsianPI',\r\n stratification: 'hvRace',\r\n title: 'Race/Ethnicity',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: 'White NH',\r\n setName: 'countWhite',\r\n stratification: 'hvRace',\r\n title: 'Race/Ethnicity',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: 'Black NH',\r\n setName: 'countBlack',\r\n stratification: 'hvRace',\r\n title: 'Race/Ethnicity',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 3,\r\n data: [],\r\n },\r\n {\r\n label: 'Hispanic',\r\n setName: 'countHispanic',\r\n stratification: 'hvRace',\r\n title: 'Race/Ethnicity',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 4,\r\n data: [],\r\n },\r\n {\r\n label: 'Other NH',\r\n setName: 'countOther',\r\n stratification: 'hvRace',\r\n title: 'Race/Ethnicity',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 5,\r\n data: [],\r\n },\r\n {\r\n label: 'All',\r\n setName: 'countTotal',\r\n stratification: 'hvRace',\r\n title: 'Race/Ethnicity',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 6,\r\n data: [],\r\n },\r\n {\r\n label: '5 - <10 µg/dL',\r\n setName: 'countbll5to10',\r\n stratification: 'bllType',\r\n title: 'Blood Lead Level',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: '10+ µg/dL',\r\n setName: 'countbll10Plus',\r\n stratification: 'bllType',\r\n title: 'Blood Lead Level',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: 'All',\r\n setName: 'countTotal',\r\n stratification: 'bllType',\r\n title: 'Blood Lead Level',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 3,\r\n data: [],\r\n },\r\n ],\r\n },\r\n columnHeaders: [\r\n {\r\n field: 'yearAndMonths',\r\n headerName: 'Period',\r\n width: 120,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'programCount',\r\n headerName: 'Program-wide',\r\n width: 140,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'countAsianPI',\r\n headerName: 'Asian/PI NH',\r\n stratification: 'hvRace',\r\n width: 150,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'countWhite',\r\n headerName: 'White NH',\r\n stratification: 'hvRace',\r\n width: 150,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'countBlack',\r\n headerName: 'Black NH',\r\n stratification: 'hvRace',\r\n width: 150,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'countHispanic',\r\n headerName: 'Hispanic',\r\n stratification: 'hvRace',\r\n width: 150,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'countOther',\r\n headerName: 'Other NH',\r\n stratification: 'hvRace',\r\n width: 150,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'countbll5to10',\r\n headerName: '5 - <10 µg/dL',\r\n stratification: 'bllType',\r\n width: 150,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'countbll10Plus',\r\n headerName: '10+ µg/dL',\r\n stratification: 'bllType',\r\n width: 150,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Number of Discharges from Lead Home Visiting Program',\r\n },\r\n percentEnrolledTrend: {\r\n tabTitle: 'Percent Enrolled Trend',\r\n tabPath: 'percentEnrolledTrend',\r\n contentType: 'chart',\r\n // No contentTitle for charts, will be controlled in \"chartTitle\" property below //\r\n exportTitle:\r\n 'Percent of Referred Children of New who were Enrolled within 90 days in Lead Home Visiting Program',\r\n exportSubtitle: '',\r\n chartType: 'trendline',\r\n selectable: false,\r\n stratifiable: true,\r\n // The following array of stratifications will create a chart stratification button for each item:\r\n stratifications: [\r\n {\r\n title: 'Race/Ethnicity',\r\n field: 'hvRace',\r\n },\r\n ],\r\n defaultSelection: '000', // 000 is the code used for statewide data at the DB\r\n defaultSelectionName: 'County',\r\n defaultSetNames: ['programRate'],\r\n baseline: '000', // 000 is the code used for statewide data at the DB\r\n info: {\r\n title:\r\n 'Percent of Referred Children who were Enrolled within 90 Days in Lead Home Visiting Program',\r\n id:\r\n 'chart-lead-home-visiting-percent-enrolled-trend',\r\n subtitle: '',\r\n },\r\n chartTitle:\r\n 'Percent of Referred Children who were Enrolled in Lead Home Visiting Program',\r\n chartSubtitle: 'Enrolled within 90 Days of Referral',\r\n displayChartTitle: true,\r\n displayChartSubtitle: true,\r\n displayXAxisLabel: true,\r\n xAxisLabel: 'Period',\r\n displayYAxisLabel: true,\r\n displayChartDiscontinuityGraphic: false,\r\n omitCommunityProfile: true, // Prevents demographic profile section from displaying.\r\n yAxisLabel: 'Percent of Children Enrolled',\r\n chartXAxisField: 'yearAndMonths',\r\n chartDataSets: ['programRate'],\r\n url: `${process.env.REACT_APP_EPHT_API}/Lead/GetHomeVisit`,\r\n urlParams: [\r\n { param: 'type', value: 'BLL_HV_EnrolledPercent' },\r\n ],\r\n chartConfig: {\r\n mainDatasets: [\r\n {\r\n baseline: true,\r\n label: 'Program-wide',\r\n setName: 'programRate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n ],\r\n // Note: Baseline dataset should receive `baseline: true` property.\r\n // Additional note: The `order` property will dictate how lines stack on each other, in ascending order.\r\n // Baseline should be given highest value to ensure it is colored correctly by Chart.js (gray)\r\n stratificationDatasets: [\r\n {\r\n label: 'Asian/PI NH',\r\n setName: 'rateAsianPI',\r\n stratification: 'hvRace',\r\n title: 'Race/Ethnicity',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: 'White NH',\r\n setName: 'rateWhite',\r\n stratification: 'hvRace',\r\n title: 'Race/Ethnicity',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: 'Black NH',\r\n setName: 'rateBlack',\r\n stratification: 'hvRace',\r\n title: 'Race/Ethnicity',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 3,\r\n data: [],\r\n },\r\n {\r\n label: 'Hispanic',\r\n setName: 'rateHispanic',\r\n stratification: 'hvRace',\r\n title: 'Race/Ethnicity',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 4,\r\n data: [],\r\n },\r\n {\r\n label: 'Other NH',\r\n setName: 'rateOther',\r\n stratification: 'hvRace',\r\n title: 'Race/Ethnicity',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 5,\r\n data: [],\r\n },\r\n {\r\n label: 'All',\r\n setName: 'rateTotal',\r\n stratification: 'hvRace',\r\n title: 'Race/Ethnicity',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 6,\r\n data: [],\r\n },\r\n ],\r\n },\r\n columnHeaders: [\r\n {\r\n field: 'yearAndMonths',\r\n headerName: 'Period',\r\n width: 120,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'programRate',\r\n headerName: 'Program-wide',\r\n width: 140,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateAsianPI',\r\n headerName: 'Asian/PI NH',\r\n stratification: 'hvRace',\r\n width: 150,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateWhite',\r\n headerName: 'White NH',\r\n stratification: 'hvRace',\r\n width: 150,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateBlack',\r\n headerName: 'Black NH',\r\n stratification: 'hvRace',\r\n width: 150,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateHispanic',\r\n headerName: 'Hispanic',\r\n stratification: 'hvRace',\r\n width: 150,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateOther',\r\n headerName: 'Other NH',\r\n stratification: 'hvRace',\r\n width: 150,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Percent of Referred Children of New who were Enrolled within 90 days in Lead Home Visiting Program',\r\n },\r\n },\r\n about: ` `, // Fetched from the database\r\n resources: ` `, // Fetched from the database\r\n },\r\n moredata: {\r\n defaultTabPath: 'ncdms',\r\n themeTitle: 'More Data',\r\n themePath: 'moredata',\r\n tabs: {\r\n ncdms: {\r\n tabTitle: '',\r\n tabPath: 'ncdms',\r\n contentType: 'ncdm',\r\n defaultTab: true,\r\n textHeader: 'Nationally Consistent Data and Measures',\r\n textSubheading: 'Sub-header',\r\n textBody: '',\r\n },\r\n },\r\n about: ` `, // Fetched from the database\r\n resources: ` `, // Fetched from the database\r\n },\r\n },\r\n },\r\n asthma: {\r\n topicTitle: 'Asthma',\r\n topicPath: 'asthma',\r\n apiEndpoint: '/Asthma/GetAsthmaEDVisitByYear', // TODO: This should be changed to something like Asthma/GetAsthmaConfig or something similar\r\n category: 'health',\r\n defaultTabPath: 'EDRates',\r\n overview:\r\n '

Asthma is a chronic lung disease that causes repeated episodes of chest tightness, wheezing, cough, and shortness of breath. It can be life threatening. Asthma affects people of all ages, but has a particular impact on children as one of the major chronic disease and causes of lost school time for children.

',\r\n aboutData: `
Data Facts Asthma
Why these data are important Asthma is a chronic disease of the lungs in which the airways become narrow and fill with secretions, causing difficulty breathing. People with asthma have episodes of shortness of breath, chest tightness, wheezing, and/or cough, which can be serious or even fatal if not treated. Asthma attacks can be treated effectively, and asthma attacks can be prevented by a combination of medication and avoidance of triggers.
Data Sources Maryland Health Services Cost Review Commission
Home Visiting Services for Children with Asthma
Years available 2010-most recent data available (usually 1-2 years prior to current date)
Data source description Hospital billing data from inpatient discharges and emergency department encounters
What's reported Inpatient (IP) hospitalizations; emergency department (ED) visits
How it's reported Counts; crude and age-adjusted rates
Level of geographic detail State, county, and census tract
Level of demographic detail Race/ethnicity, sex, and age group
Data disclaimers

HSCRC revised the methodology for coding race/ethnicity in 2013; therefore, race/ethnicity data from 2014 and later may not be comparable to previous years.

ICD-9 hospital billing codes transitioned to ICD-10 billing codes in 2015; therefore, data from 2016 and later may not be comparable to previous years.
The summary data provided on this website are downloadable. For more detailed data, refer to the data sources. Yes
Environmental Health Helpline 1-866-703-3266
mdh.envhealth@maryland.gov
Last Updated 10/8/2024
Frequency of data updates Annual
Data suppression rules HSCRC:

County level: suppression is for non-zero numerators <11 and this is reflected in data starting with 2021. Prior to 2021, suppression was for non-zero numerators <6. There is no denominator requirement.

Census tract level: suppression is for non-zero numerators <11 OR total population <5,000.

`,\r\n themeOverviews: [\r\n {\r\n theme: 'Status',\r\n text:\r\n 'Provides a detailed view of asthma over time throughout Maryland by area.',\r\n },\r\n {\r\n theme: 'Disparities',\r\n text:\r\n 'Examines the distribution of the burden of asthma in Maryland.',\r\n },\r\n {\r\n theme: 'Programs',\r\n text:\r\n 'Detailed view of the effects of Maryland Department of Health programs and other efforts to address asthma in Maryland.',\r\n },\r\n {\r\n theme: 'More Data',\r\n text:\r\n 'Provides a detailed view of Nationally Consistent Data and Measures (NCDMs) for asthma as specified by the Centers for Disease Control and Prevention (CDC). All additional data are available for download.',\r\n },\r\n ],\r\n countySuppressionRules: {\r\n range: '1 to 6',\r\n populationMin: '5,000',\r\n },\r\n subCountySuppressionRules: {\r\n range: '1 to 10',\r\n populationMin: '5,000',\r\n },\r\n themes: {\r\n status: {\r\n defaultTabPath: 'EDRates',\r\n themeTitle: 'Status',\r\n themePath: 'status',\r\n tabs: {\r\n EDRates: {\r\n tabTitle: 'ED Rate',\r\n tabPath: 'EDRates',\r\n contentType: 'map',\r\n contentTitle:\r\n 'Emergency Department (ED) Visits for Asthma',\r\n exportTitle:\r\n 'Emergency Department (ED) Visits for Asthma',\r\n exportSubtitle:\r\n 'Unadjusted rate of emergency department visits for asthma per 10,000 population.',\r\n mapSets: [\r\n {\r\n set: 'primary',\r\n geometry: 'County',\r\n outFields: ['County', 'Rate'],\r\n columnHeaders: [\r\n {\r\n field: 'County',\r\n headerName: 'County',\r\n flex: 1,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'Rate',\r\n headerName: 'Rate',\r\n exportHeaderName: 'Rate',\r\n flex: 1, //\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Unadjusted Emergency Department (ED) Visits for Asthma',\r\n popupContent: {\r\n title: {\r\n field: 'FullCounty',\r\n },\r\n health: {\r\n name:\r\n 'Unadjusted Rate of Asthma Emergency Department (ED) Visits per 10,000',\r\n field: 'Rate',\r\n unit: '',\r\n },\r\n },\r\n setLayers: [\r\n {\r\n id:\r\n 'county-choropleth-asthma-ed-visits',\r\n zIndexPosition: 'back',\r\n title:\r\n 'Rate of Asthma ED Visits by County',\r\n yearKey: 'Year',\r\n subtitle:\r\n 'Unadjusted rate per 10,000 population',\r\n defaultVisible: true,\r\n sourceLayer: true,\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/AsthmaCounty/MapServer/1`,\r\n },\r\n ],\r\n },\r\n {\r\n set: 'secondary',\r\n geometry: 'Tract',\r\n outFields: [\r\n 'GEOID',\r\n 'TractCode',\r\n 'TractName',\r\n 'FullCounty',\r\n 'Rate',\r\n ],\r\n columnHeaders: [\r\n {\r\n field: 'FullCounty',\r\n headerName: 'County',\r\n flex: 1,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'TractName',\r\n headerName: 'Tract Name',\r\n flex: 1,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'Rate',\r\n headerName: 'Rate',\r\n exportHeaderName: 'Rate',\r\n flex: 1, //\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Unadjusted Rate of Asthma (ED) Visits by Census Tract',\r\n popupContent: {\r\n title: {\r\n field: 'PopupTitle',\r\n },\r\n health: {\r\n name:\r\n 'Unadjusted Rate of Asthma Emergency Department (ED) Visits per 10,000',\r\n field: 'Rate',\r\n unit: '',\r\n },\r\n },\r\n setLayers: [\r\n {\r\n id: 'census-tract-asthma-ed-rates',\r\n zIndexPosition: 'back',\r\n title:\r\n 'Rate of Asthma ED Visits by Census Tract',\r\n yearKey: 'Year',\r\n subtitle:\r\n 'Unadjusted rate per 10,000 population',\r\n defaultVisible: true,\r\n sourceLayer: true,\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/AsthmaCensusTract/MapServer/0`,\r\n },\r\n {\r\n id: 'county-outline-asthma-ed-rates',\r\n zIndexPosition: 'front',\r\n title: '',\r\n yearKey: 'Year',\r\n subtitle: '',\r\n defaultVisible: true,\r\n sourceLayer: false,\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/CountyBoundaries/MapServer/0`,\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n ageAdjustedRate: {\r\n tabTitle: 'Age-Adj. ED Rate',\r\n tabPath: 'ageAdjustedRate',\r\n contentType: 'map',\r\n contentTitle:\r\n 'Age-Adjusted Rate of Emergency Department (ED) Visits for Asthma',\r\n exportTitle:\r\n 'Age-Adjusted Rate of Emergency Department (ED) Visits for Asthma',\r\n exportSubtitle: 'Age-adjusted rate per 10k population',\r\n mapSets: [\r\n {\r\n set: 'primary',\r\n geometry: 'County',\r\n outFields: ['County', 'Rate'],\r\n columnHeaders: [\r\n {\r\n field: 'County',\r\n headerName: 'County',\r\n flex: 1,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'Rate',\r\n headerName: 'Rate',\r\n flex: 1,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Age-Adjusted Rate of Emergency Department (ED) Visits for Asthma',\r\n popupContent: {\r\n title: {\r\n field: 'FullCounty',\r\n },\r\n health: {\r\n name:\r\n 'Emergency Department (ED) Visits for Asthma per 10,000 population',\r\n field: 'Rate',\r\n unit: '',\r\n },\r\n },\r\n setLayers: [\r\n {\r\n id: 'county-asthma-age-adjusted-rate',\r\n zIndexPosition: 'front', // Note: setting this to front is required to make the symbol clickable\r\n title:\r\n 'Emergency Department (ED) Visits for Asthma',\r\n subtitle:\r\n 'Age-adjusted rate per 10,000 population',\r\n yearKey: 'Year',\r\n sourceLayer: true,\r\n defaultVisible: true,\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/AsthmaCounty/MapServer/0`,\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n EDTrends: {\r\n tabTitle: 'ED Trend',\r\n tabPath: 'EDTrends',\r\n contentType: 'chart',\r\n // No contentTitle for charts, will be controlled in \"chartTitle\" property below //\r\n exportTitle:\r\n 'Rate of Asthma Emergency Department (ED) Visits',\r\n exportSubtitle: 'Age-adjusted rate per 10k population',\r\n chartType: 'trendline',\r\n selectable: true,\r\n stratifiable: true,\r\n\r\n // The following array of stratifications will create a chart stratification button for each item:\r\n stratifications: [\r\n {\r\n title: 'Race/Ethnicity', // Name that appears for button\r\n field: 'race', // Must match stratification key name in json response returned from endpoint\r\n },\r\n {\r\n title: 'Sex', // Name that appears for button\r\n field: 'sex', // Must match stratification key name in json response returned from endpoint\r\n },\r\n // Commented out for now so that \"Age\" button does not appear for this chart. Can comment back in once age data is available and returned from endpoint.\r\n // {\r\n // title: 'Age', // Name that appears for button\r\n // field: 'age' // Must match stratification key name in json response returned from endpoint\r\n // }\r\n ],\r\n defaultSelection: '000', // 000 is the code used for statewide data at the DB\r\n defaultSetNames: ['stateRate'],\r\n baseline: '000', // 000 is the code used for statewide data at the DB\r\n info: {\r\n title:\r\n 'Rate of Asthma Emergency Department (ED) Visits',\r\n id: 'chart-asthma-emergency-room-trend',\r\n subtitle: 'Age-adjusted rate per 10,000',\r\n },\r\n chartTitle: [\r\n 'Rate of Asthma Emergency Department (ED) Visits',\r\n ],\r\n chartSubtitle:\r\n \"Data changed in late 2015. See 'About' for details.\",\r\n displayChartTitle: true,\r\n displayChartSubtitle: true,\r\n displayYAxisLabel: true,\r\n displayXAxisLabel: true,\r\n displayChartDiscontinuityGraphic: true,\r\n yAxisLabel: 'Age-adjusted rate per 10,000 population',\r\n xAxisLabel: 'Year',\r\n chartXAxisField: 'year', // should match field name used in incoming dataset\r\n chartDataSets: ['rate', 'stateRate'], // should match field names used in incoming dataset\r\n url: `${process.env.REACT_APP_EPHT_API}/Asthma/GetEDVisitsAgeAdjRate`,\r\n urlParams: [\r\n { param: 'jurisdiction', valueKey: 'code' },\r\n ],\r\n chartConfig: {\r\n mainDatasets: [\r\n {\r\n label: 'County',\r\n setName: 'rate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n baseline: true,\r\n label: 'Statewide',\r\n setName: 'stateRate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n ],\r\n // Note: Baseline dataset should receive `baseline: true` property.\r\n // Additional note: The `order` property will dictate how lines stack on each other, in ascending order. Baseline should be given highest value to ensure it is colored correctly by Chart.js (gray)\r\n stratificationDatasets: [\r\n {\r\n label: 'White NH',\r\n setName: 'rateWhite',\r\n stratification: 'race',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: 'Black NH',\r\n setName: 'rateBlack',\r\n stratification: 'race',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: 'Hispanic',\r\n setName: 'rateHispanic',\r\n stratification: 'race',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 3,\r\n data: [],\r\n },\r\n {\r\n label: 'Other NH',\r\n setName: 'rateOther',\r\n stratification: 'race',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 4,\r\n data: [],\r\n },\r\n {\r\n label: 'All',\r\n setName: 'rateTotal',\r\n baseline: true,\r\n stratification: 'race',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 5,\r\n data: [],\r\n },\r\n {\r\n label: 'Female',\r\n setName: 'rateFemale',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: 'Male',\r\n setName: 'rateMale',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: 'All',\r\n baseline: true,\r\n setName: 'rateTotal',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 3,\r\n data: [],\r\n },\r\n // Age stratifications are kept in here for future updates where age data is available. Endpoint should currently return an `age` property, with nulled out values.\r\n {\r\n label: '0-4',\r\n setName: 'rate0to4',\r\n stratification: 'age',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: '5-14',\r\n setName: 'rate5to14',\r\n stratification: 'age',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: '15-34',\r\n setName: 'rate15to34',\r\n stratification: 'age',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 3,\r\n data: [],\r\n },\r\n {\r\n label: '35-64',\r\n setName: 'rate35to64',\r\n stratification: 'age',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 4,\r\n data: [],\r\n },\r\n {\r\n label: '65+',\r\n setName: 'rate65plus',\r\n stratification: 'age',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 5,\r\n data: [],\r\n },\r\n {\r\n label: 'All',\r\n baseline: true,\r\n setName: 'rateTotal',\r\n stratification: 'age',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 6,\r\n data: [],\r\n },\r\n ],\r\n },\r\n columnHeaders: [\r\n {\r\n field: 'year',\r\n headerName: 'Year',\r\n width: 85,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate',\r\n headerName: 'County Rate',\r\n width: 134,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'stateRate',\r\n headerName: 'Statewide Rate',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateWhite',\r\n headerName: 'White NH',\r\n stratification: 'race',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateBlack',\r\n headerName: 'Black NH',\r\n stratification: 'race',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateHispanic',\r\n headerName: 'Hispanic',\r\n stratification: 'race',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateOther',\r\n headerName: 'Other NH',\r\n stratification: 'race',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateFemale',\r\n headerName: 'Female',\r\n stratification: 'sex',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateMale',\r\n headerName: 'Male',\r\n stratification: 'sex',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Rate of Asthma Emergency Department (ED) Visits',\r\n },\r\n hospitalizations: {\r\n tabTitle: 'Hospital Trend',\r\n tabPath: 'hospitalizations',\r\n contentType: 'chart',\r\n // No contentTitle for charts, will be controlled in \"chartTitle\" property below //\r\n exportTitle:\r\n 'Rate of Hospitalizations for Asthma Trend Over Time',\r\n exportSubtitle: 'Age-adjusted rate per 10k population',\r\n chartType: 'trendline',\r\n selectable: true,\r\n stratifiable: true,\r\n defaultStratification: undefined, // If this property is left undefined, stratifiable charts will default to non-stratified on page landing\r\n\r\n // The following array of stratifications will create a chart stratification button for each item:\r\n stratifications: [\r\n {\r\n title: 'Race/Ethnicity', // Name that appears for button\r\n field: 'race', // Must match stratification key name in json response returned from endpoint\r\n },\r\n {\r\n title: 'Sex', // Name that appears for button\r\n field: 'sex', // Must match stratification key name in json response returned from endpoint\r\n },\r\n // Commented out for now so that \"Age\" button does not appear for this chart. Can comment back in once age data is available and returned from endpoint.\r\n // {\r\n // title: 'Age', // Name that appears for button\r\n // field: 'age' // Must match stratification key name in json response returned from endpoint\r\n // }\r\n ],\r\n defaultSelection: '000', // 000 is the code used for statewide data at the DB\r\n defaultSetNames: ['stateRate'],\r\n baseline: '000', // 000 is the code used for statewide data at the DB\r\n info: {\r\n title: 'Rate of Hospitalizations for Asthma',\r\n id: 'chart-asthma-hospitalizations-trend',\r\n subtitle: 'Age-adjusted rate per 10,000',\r\n },\r\n chartTitle: 'Rate of Hospitalizations for Asthma',\r\n chartSubtitle:\r\n \"Data changed in late 2015. See 'About' for details.\",\r\n displayChartTitle: true,\r\n displayChartSubtitle: true,\r\n displayYAxisLabel: true,\r\n displayXAxisLabel: true,\r\n displayChartDiscontinuityGraphic: true,\r\n yAxisLabel: 'Age-adjusted rate per 10,000 population',\r\n xAxisLabel: 'Year',\r\n chartXAxisField: 'year', // should match field name used in incoming dataset\r\n chartDataSets: ['rate', 'stateRate'], // should match field names used in incoming dataset\r\n url: `${process.env.REACT_APP_EPHT_API}/Asthma/GetHospitalizationsAgeAdjRate`,\r\n urlParams: [\r\n { param: 'jurisdiction', valueKey: 'code' },\r\n ],\r\n chartConfig: {\r\n mainDatasets: [\r\n {\r\n label: 'County',\r\n setName: 'rate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n baseline: true,\r\n label: 'Statewide',\r\n setName: 'stateRate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n ],\r\n\r\n // Note: Baseline dataset should receive `baseline: true` property.\r\n // Additional note: The `order` property will dictate how lines stack on each other, in ascending order. Baseline should be given highest value to ensure it is colored correctly by Chart.js (gray)\r\n stratificationDatasets: [\r\n {\r\n label: 'White NH',\r\n setName: 'rateWhite',\r\n stratification: 'race',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: 'Black NH',\r\n setName: 'rateBlack',\r\n stratification: 'race',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: 'Hispanic',\r\n setName: 'rateHispanic',\r\n stratification: 'race',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 3,\r\n data: [],\r\n },\r\n {\r\n label: 'Other NH',\r\n setName: 'rateOther',\r\n stratification: 'race',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 4,\r\n data: [],\r\n },\r\n {\r\n label: 'All',\r\n setName: 'rateTotal',\r\n baseline: true,\r\n stratification: 'race',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 5,\r\n data: [],\r\n },\r\n {\r\n label: 'Female',\r\n setName: 'rateFemale',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: 'Male',\r\n setName: 'rateMale',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: 'All',\r\n baseline: true,\r\n setName: 'rateTotal',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 3,\r\n data: [],\r\n },\r\n // Age stratifications are kept in here for future updates where age data is available. Endpoint should currently return an `age` property, with nulled out values.\r\n {\r\n label: '0-4',\r\n setName: 'rate0to4',\r\n stratification: 'age',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: '5-14',\r\n setName: 'rate5to14',\r\n stratification: 'age',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: '15-34',\r\n setName: 'rate15to34',\r\n stratification: 'age',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 3,\r\n data: [],\r\n },\r\n {\r\n label: '35-64',\r\n setName: 'rate35to64',\r\n stratification: 'age',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 4,\r\n data: [],\r\n },\r\n {\r\n label: '65+',\r\n setName: 'rate65plus',\r\n stratification: 'age',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 5,\r\n data: [],\r\n },\r\n {\r\n label: 'All',\r\n baseline: true,\r\n setName: 'rateTotal',\r\n stratification: 'age',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 6,\r\n data: [],\r\n },\r\n ],\r\n },\r\n columnHeaders: [\r\n {\r\n field: 'year',\r\n headerName: 'Year',\r\n width: 85,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate',\r\n headerName: 'County Rate',\r\n width: 134,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'stateRate',\r\n headerName: 'Statewide Rate',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateWhite',\r\n headerName: 'White NH',\r\n stratification: 'race',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateBlack',\r\n headerName: 'Black NH',\r\n stratification: 'race',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateHispanic',\r\n headerName: 'Hispanic',\r\n stratification: 'race',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateOther',\r\n headerName: 'Other NH',\r\n stratification: 'race',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateFemale',\r\n headerName: 'Female',\r\n stratification: 'sex',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateMale',\r\n headerName: 'Male',\r\n stratification: 'sex',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle: 'Rate of Asthma Hospitalizations Trend',\r\n },\r\n },\r\n about: ` `, // Fetched from the database\r\n resources: ` `, // Fetched from the database\r\n },\r\n disparities: {\r\n defaultTabPath: 'EDTrends',\r\n themeTitle: 'Disparities',\r\n themePath: 'disparities',\r\n tabs: {\r\n EDTrends: {\r\n tabTitle: 'ED Trend',\r\n tabPath: 'EDTrends',\r\n contentType: 'chart',\r\n // No contentTitle for charts, will be controlled in \"chartTitle\" property below //\r\n exportTitle:\r\n 'Rate of Asthma Emergency Department (ED) Visits',\r\n exportSubtitle: 'Age-adjusted rate per 10k population',\r\n chartType: 'trendline',\r\n selectable: true,\r\n stratifiable: true,\r\n defaultStratification: 'race', // If this property is left undefined, stratifiable charts will default to non-stratified on page landing\r\n\r\n // The following array of stratifications will create a chart stratification button for each item:\r\n stratifications: [\r\n {\r\n title: 'Race/Ethnicity', // Name that appears for button\r\n field: 'race', // Must match stratification key name in json response returned from endpoint\r\n },\r\n {\r\n title: 'Sex', // Name that appears for button\r\n field: 'sex', // Must match stratification key name in json response returned from endpoint\r\n },\r\n // Commented out for now so that \"Age\" button does not appear for this chart. Can comment back in once age data is available and returned from endpoint.\r\n // {\r\n // title: 'Age', // Name that appears for button\r\n // field: 'age' // Must match stratification key name in json response returned from endpoint\r\n // }\r\n ],\r\n defaultSelection: '000', // 000 is the code used for statewide data at the DB\r\n defaultSetNames: ['stateRate'],\r\n baseline: '000', // 000 is the code used for statewide data at the DB\r\n info: {\r\n title:\r\n 'Rate of Asthma Emergency Department (ED) Visits',\r\n id: 'chart-asthma-emergency-room-trend',\r\n subtitle: 'Age-adjusted rate per 10,000',\r\n },\r\n chartTitle:\r\n 'Rate of Asthma Emergency Department (ED) Visits',\r\n chartSubtitle:\r\n \"Data changed in late 2015. See 'About' for details.\",\r\n displayChartTitle: true,\r\n displayChartSubtitle: true,\r\n displayYAxisLabel: true,\r\n displayXAxisLabel: true,\r\n displayChartDiscontinuityGraphic: true,\r\n yAxisLabel: 'Age-adjusted rate per 10,000 population',\r\n xAxisLabel: 'Year',\r\n chartXAxisField: 'year', // should match field name used in incoming dataset\r\n chartDataSets: ['rate', 'stateRate'], // should match field names used in incoming dataset\r\n url: `${process.env.REACT_APP_EPHT_API}/Asthma/GetEDVisitsAgeAdjRate`,\r\n urlParams: [\r\n { param: 'jurisdiction', valueKey: 'code' },\r\n ],\r\n chartConfig: {\r\n mainDatasets: [\r\n {\r\n label: 'County',\r\n setName: 'rate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n baseline: true,\r\n label: 'Statewide',\r\n setName: 'stateRate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n ],\r\n // Note: Baseline dataset should receive `baseline: true` property.\r\n // Additional note: The `order` property will dictate how lines stack on each other, in ascending order. Baseline should be given highest value to ensure it is colored correctly by Chart.js (gray)\r\n stratificationDatasets: [\r\n {\r\n label: 'White NH',\r\n setName: 'rateWhite',\r\n stratification: 'race',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: 'Black NH',\r\n setName: 'rateBlack',\r\n stratification: 'race',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: 'Hispanic',\r\n setName: 'rateHispanic',\r\n stratification: 'race',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 3,\r\n data: [],\r\n },\r\n {\r\n label: 'Other NH',\r\n setName: 'rateOther',\r\n stratification: 'race',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 4,\r\n data: [],\r\n },\r\n {\r\n label: 'All',\r\n setName: 'rateTotal',\r\n baseline: true,\r\n stratification: 'race',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 5,\r\n data: [],\r\n },\r\n {\r\n label: 'Female',\r\n setName: 'rateFemale',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: 'Male',\r\n setName: 'rateMale',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: 'All',\r\n baseline: true,\r\n setName: 'rateTotal',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 3,\r\n data: [],\r\n },\r\n // Age stratifications are kept in here for future updates where age data is available. Endpoint should currently return an `age` property, with nulled out values.\r\n {\r\n label: '0-4',\r\n setName: 'rate0to4',\r\n stratification: 'age',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: '5-14',\r\n setName: 'rate5to14',\r\n stratification: 'age',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: '15-34',\r\n setName: 'rate15to34',\r\n stratification: 'age',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 3,\r\n data: [],\r\n },\r\n {\r\n label: '35-64',\r\n setName: 'rate35to64',\r\n stratification: 'age',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 4,\r\n data: [],\r\n },\r\n {\r\n label: '65+',\r\n setName: 'rate65plus',\r\n stratification: 'age',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 5,\r\n data: [],\r\n },\r\n {\r\n label: 'All',\r\n baseline: true,\r\n setName: 'rateTotal',\r\n stratification: 'age',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 6,\r\n data: [],\r\n },\r\n ],\r\n },\r\n columnHeaders: [\r\n {\r\n field: 'year',\r\n headerName: 'Year',\r\n width: 85,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate',\r\n headerName: 'County Rate',\r\n width: 134,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'stateRate',\r\n headerName: 'Statewide Rate',\r\n width: 160,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateWhite',\r\n headerName: 'White NH',\r\n stratification: 'race',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateBlack',\r\n headerName: 'Black NH',\r\n stratification: 'race',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateHispanic',\r\n headerName: 'Hispanic',\r\n stratification: 'race',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateOther',\r\n headerName: 'Other NH',\r\n stratification: 'race',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateFemale',\r\n headerName: 'Female',\r\n stratification: 'sex',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateMale',\r\n headerName: 'Male',\r\n stratification: 'sex',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Rate of Asthma Emergency Department (ED) Visits',\r\n },\r\n hospitalizations: {\r\n tabTitle: 'Hospital Trend',\r\n tabPath: 'hospitalizations',\r\n contentType: 'chart',\r\n // No contentTitle for charts, will be controlled in \"chartTitle\" property below //\r\n exportTitle:\r\n 'Rate of Hospitalizations for Asthma Trend Over Time',\r\n exportSubtitle: 'Age-adjusted rate per 10k population',\r\n chartType: 'trendline',\r\n selectable: true,\r\n stratifiable: true,\r\n defaultStratification: 'race', // If this property is left undefined, stratifiable charts will default to non-stratified on page landing\r\n\r\n // The following array of stratifications will create a chart stratification button for each item:\r\n stratifications: [\r\n {\r\n title: 'Race/Ethnicity', // Name that appears for button\r\n field: 'race', // Must match stratification key name in json response returned from endpoint\r\n },\r\n {\r\n title: 'Sex', // Name that appears for button\r\n field: 'sex', // Must match stratification key name in json response returned from endpoint\r\n },\r\n // Commented out for now so that \"Age\" button does not appear for this chart. Can comment back in once age data is available and returned from endpoint.\r\n // {\r\n // title: 'Age', // Name that appears for button\r\n // field: 'age', // Must match stratification key name in json response returned from endpoint\r\n // },\r\n ],\r\n defaultSelection: '000', // 000 is the code used for statewide data at the DB\r\n defaultSetNames: ['stateRate'],\r\n baseline: '000', // 000 is the code used for statewide data at the DB\r\n info: {\r\n title: 'Rate of Hospitalizations for Asthma',\r\n id: 'chart-asthma-hospitalizations-trend',\r\n subtitle: 'Age-adjusted rate per 10,000',\r\n },\r\n chartTitle: 'Rate of Hospitalizations for Asthma',\r\n chartSubtitle:\r\n \"Data changed in late 2015. See 'About' for details.\",\r\n displayChartTitle: true,\r\n displayChartSubtitle: true,\r\n displayYAxisLabel: true,\r\n displayXAxisLabel: true,\r\n displayChartDiscontinuityGraphic: true,\r\n yAxisLabel: 'Age-adjusted rate per 10,000 population',\r\n xAxisLabel: 'Year',\r\n chartXAxisField: 'year', // should match field name used in incoming dataset\r\n chartDataSets: ['rate', 'stateRate'], // should match field names used in incoming dataset\r\n url: `${process.env.REACT_APP_EPHT_API}/Asthma/GetHospitalizationsAgeAdjRate`,\r\n urlParams: [\r\n { param: 'jurisdiction', valueKey: 'code' },\r\n ],\r\n chartConfig: {\r\n mainDatasets: [\r\n {\r\n label: 'County',\r\n setName: 'rate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n baseline: true,\r\n label: 'Statewide',\r\n setName: 'stateRate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n ],\r\n // Note: Baseline dataset should receive `baseline: true` property.\r\n // Additional note: The `order` property will dictate how lines stack on each other, in ascending order. Baseline should be given highest value to ensure it is colored correctly by Chart.js (gray)\r\n stratificationDatasets: [\r\n {\r\n label: 'White NH',\r\n setName: 'rateWhite',\r\n stratification: 'race',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: 'Black NH',\r\n setName: 'rateBlack',\r\n stratification: 'race',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: 'Hispanic',\r\n setName: 'rateHispanic',\r\n stratification: 'race',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 3,\r\n data: [],\r\n },\r\n {\r\n label: 'Other NH',\r\n setName: 'rateOther',\r\n stratification: 'race',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 4,\r\n data: [],\r\n },\r\n {\r\n label: 'All',\r\n setName: 'rateTotal',\r\n baseline: true,\r\n stratification: 'race',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 5,\r\n data: [],\r\n },\r\n {\r\n label: 'Female',\r\n setName: 'rateFemale',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: 'Male',\r\n setName: 'rateMale',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: 'All',\r\n baseline: true,\r\n setName: 'rateTotal',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 3,\r\n data: [],\r\n },\r\n // Age stratifications are kept in here for future updates where age data is available. Endpoint should currently return an `age` property, with nulled out values.\r\n {\r\n label: '0-4',\r\n setName: 'rate0to4',\r\n stratification: 'age',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: '5-14',\r\n setName: 'rate5to14',\r\n stratification: 'age',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: '15-34',\r\n setName: 'rate15to34',\r\n stratification: 'age',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 3,\r\n data: [],\r\n },\r\n {\r\n label: '35-64',\r\n setName: 'rate35to64',\r\n stratification: 'age',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 4,\r\n data: [],\r\n },\r\n {\r\n label: '65+',\r\n setName: 'rate65plus',\r\n stratification: 'age',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 5,\r\n data: [],\r\n },\r\n {\r\n label: 'All',\r\n baseline: true,\r\n setName: 'rateTotal',\r\n stratification: 'age',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 6,\r\n data: [],\r\n },\r\n ],\r\n },\r\n columnHeaders: [\r\n {\r\n field: 'year',\r\n headerName: 'Year',\r\n width: 85,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate',\r\n headerName: 'County Rate',\r\n width: 134,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'stateRate',\r\n headerName: 'Statewide Rate',\r\n width: 160,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateWhite',\r\n headerName: 'White NH',\r\n stratification: 'race',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateBlack',\r\n headerName: 'Black NH',\r\n stratification: 'race',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateHispanic',\r\n headerName: 'Hispanic',\r\n stratification: 'race',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateOther',\r\n headerName: 'Other NH',\r\n stratification: 'race',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateFemale',\r\n headerName: 'Female',\r\n stratification: 'sex',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateMale',\r\n headerName: 'Male',\r\n stratification: 'sex',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle: 'Rate of Asthma Hospitalizations Trend',\r\n },\r\n },\r\n about: ` `, // Fetched from the database\r\n resources: ` `, // Fetched from the database\r\n },\r\n programs: {\r\n defaultTabPath: 'children',\r\n themeTitle: 'Programs',\r\n themePath: 'programs',\r\n tabs: {\r\n children: {\r\n tabTitle: 'Asthma in Children',\r\n tabPath: 'children',\r\n contentType: 'chart',\r\n // No contentTitle for charts, will be controlled in \"chartTitle\" property below //\r\n exportTitle:\r\n 'Rate of Asthma Emergency Department (ED) Visits for Children Aged 2-17',\r\n exportSubtitle: 'Age-adjusted rate per 1k population',\r\n chartType: 'trendline',\r\n selectable: true,\r\n stratifiable: true,\r\n defaultStratification: undefined, // If this property is left undefined, stratifiable charts will default to non-stratified on page landing\r\n\r\n // The following array of stratifications will create a chart stratification button for each item:\r\n stratifications: [\r\n {\r\n title: 'Race/Ethnicity', // Name that appears for button\r\n field: 'race', // Must match stratification key name in json response returned from endpoint\r\n },\r\n ],\r\n defaultSelection: '000', // 000 is the code used for statewide data at the DB\r\n defaultSetNames: ['stateRate'],\r\n baseline: '000', // 000 is the code used for statewide data at the DB\r\n info: {\r\n title:\r\n 'Rate of Asthma Emergency Department (ED) Visits for Children Aged 2-17',\r\n id: 'chart-asthma-sihis-emergency-room-trend',\r\n subtitle: 'Age-adjusted rate per 1,000',\r\n },\r\n chartTitle:\r\n 'Rate of Asthma Emergency Department (ED) Visits for Children Aged 2-17',\r\n displayChartTitle: true,\r\n displayYAxisLabel: true,\r\n displayXAxisLabel: true,\r\n displayChartDiscontinuityGraphic: true,\r\n yAxisLabel: 'Age-adjusted rate per 1,000 population',\r\n xAxisLabel: 'Year',\r\n chartXAxisField: 'year', // should match field name used in incoming dataset\r\n chartDataSets: ['rate', 'stateRate'], // should match field names used in incoming dataset\r\n url: `${process.env.REACT_APP_EPHT_API}/Asthma/GetSIHISRate`,\r\n urlParams: [\r\n { param: 'jurisdiction', valueKey: 'code' },\r\n ],\r\n chartConfig: {\r\n mainDatasets: [\r\n {\r\n label: 'County',\r\n setName: 'rate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n baseline: true,\r\n label: 'Statewide',\r\n setName: 'stateRate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n ],\r\n // Note: Baseline dataset should receive `baseline: true` property.\r\n // Additional note: The `order` property will dictate how lines stack on each other, in ascending order. Baseline should be given highest value to ensure it is colored correctly by Chart.js (gray)\r\n stratificationDatasets: [\r\n {\r\n label: 'Asian NH',\r\n setName: 'rateAsian',\r\n stratification: 'race',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: 'White NH',\r\n setName: 'rateWhite',\r\n stratification: 'race',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: 'Black NH',\r\n setName: 'rateBlack',\r\n stratification: 'race',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 3,\r\n data: [],\r\n },\r\n {\r\n label: 'Hispanic',\r\n setName: 'rateHispanic',\r\n stratification: 'race',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 4,\r\n data: [],\r\n },\r\n {\r\n label: 'Other NH',\r\n setName: 'rateOther',\r\n stratification: 'race',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 5,\r\n data: [],\r\n },\r\n {\r\n label: 'All',\r\n setName: 'rateTotal',\r\n baseline: true,\r\n stratification: 'race',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 6,\r\n data: [],\r\n },\r\n ],\r\n },\r\n columnHeaders: [\r\n {\r\n field: 'year',\r\n headerName: 'Year',\r\n width: 85,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate',\r\n headerName: 'County Rate',\r\n width: 134,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'stateRate',\r\n headerName: 'Statewide Rate',\r\n width: 160,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateAsian',\r\n headerName: 'Asian NH',\r\n stratification: 'race',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateWhite',\r\n headerName: 'White NH',\r\n stratification: 'race',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateBlack',\r\n headerName: 'Black NH',\r\n stratification: 'race',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateHispanic',\r\n headerName: 'Hispanic',\r\n stratification: 'race',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateOther',\r\n headerName: 'Other NH',\r\n stratification: 'race',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateFemale',\r\n headerName: 'Female',\r\n stratification: 'sex',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateMale',\r\n headerName: 'Male',\r\n stratification: 'sex',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Rate of Asthma Emergency Department (ED) Visits for Children Aged 2-17',\r\n },\r\n // homeVisit: {\r\n // tabTitle: 'Home Visiting Data',\r\n // tabPath: 'homeVisit',\r\n // contentType: 'chart',\r\n // // No contentTitle for charts, will be controlled in \"chartTitle\" property below //\r\n // exportTitle: 'Geometric Mean Blood Lead Level (µg/dL)',\r\n // chartType: 'trendline',\r\n // selectable: true,\r\n // stratifiable: true,\r\n\r\n // // The following array of stratifications will create a chart stratification button for each item:\r\n // stratifications: [\r\n // {\r\n // title: 'Age', // Name that appears for button\r\n // field: 'age', // Must match stratification key name in json response returned from endpoint\r\n // },\r\n // {\r\n // title: 'Sex', // Name that appears for button\r\n // field: 'sex', // Must match stratification key name in json response returned from endpoint\r\n // },\r\n // ],\r\n // defaultSelection: '000', // 000 is the code used for statewide data at the DB\r\n // defaultSetNames: ['stateRate'],\r\n // baseline: '000', // 000 is the code used for statewide data at the DB\r\n // info: {\r\n // title: 'Geometric Mean',\r\n // id: 'chart-lead-geometric-mean-trend',\r\n // subtitle: 'Age-adjusted rate per 10,000 (?)',\r\n // },\r\n // chartTitle: 'Geometric Mean Blood Lead Level (µg/dL)',\r\n // displayChartTitle: true,\r\n // displayYAxisLabel: true,\r\n // displayXAxisLabel: true,\r\n // displayChartDiscontinuityGraphic: true,\r\n // yAxisLabel: 'Micrograms per Deciliter',\r\n // xAxisLabel: 'Year',\r\n // chartXAxisField: 'year',\r\n // chartDataSets: ['rate', 'stateRate'],\r\n // url: `${process.env.REACT_APP_EPHT_API}/Lead/GetLeadGeoMean`,\r\n // urlParams: [{ param: 'jurisdiction', valueKey: 'code' }],\r\n // chartConfig: {\r\n // mainDatasets: [\r\n // {\r\n // label: 'County',\r\n // setName: 'rate',\r\n // fill: false,\r\n // pointRadius: 3,\r\n // pointBorderWidth: 3,\r\n // pointHoverRadius: 8,\r\n // lineTension: 0,\r\n // order: 1,\r\n // data: [],\r\n // },\r\n // {\r\n // baseline: true,\r\n // label: 'Statewide',\r\n // setName: 'stateRate',\r\n // fill: false,\r\n // pointRadius: 3,\r\n // pointBorderWidth: 3,\r\n // pointHoverRadius: 8,\r\n // lineTension: 0,\r\n // order: 2,\r\n // data: [],\r\n // },\r\n // ],\r\n // // Note: Baseline dataset should receive `baseline: true` property.\r\n // // Additional note: The `order` property will dictate how lines stack on each other, in ascending order. Baseline should be given highest value to ensure it is colored correctly by Chart.js (gray)\r\n // stratificationDatasets: [\r\n // {\r\n // label: 'Male',\r\n // setName: 'rateMale',\r\n // stratification: 'sex',\r\n // title: 'Sex',\r\n // fill: false,\r\n // pointRadius: 3,\r\n // pointBorderWidth: 3,\r\n // pointHoverRadius: 8,\r\n // lineTension: 0,\r\n // order: 1,\r\n // customFormat: 2,\r\n // data: [],\r\n // },\r\n // {\r\n // label: 'Female',\r\n // setName: 'rateFemale',\r\n // stratification: 'sex',\r\n // title: 'Sex',\r\n // fill: false,\r\n // pointRadius: 3,\r\n // pointBorderWidth: 3,\r\n // pointHoverRadius: 8,\r\n // lineTension: 0,\r\n // order: 2,\r\n // customFormat: 2,\r\n // data: [],\r\n // },\r\n // {\r\n // label: 'Total',\r\n // baseline: true,\r\n // setName: 'rateTotal',\r\n // stratification: 'sex',\r\n // title: 'Sex',\r\n // fill: false,\r\n // pointRadius: 3,\r\n // pointBorderWidth: 3,\r\n // pointHoverRadius: 8,\r\n // lineTension: 0,\r\n // order: 4,\r\n // data: [],\r\n // },\r\n // {\r\n // label: '0 - <12 months',\r\n // setName: 'rate0to12',\r\n // stratification: 'age',\r\n // title: 'Age',\r\n // fill: false,\r\n // pointRadius: 3,\r\n // pointBorderWidth: 3,\r\n // pointHoverRadius: 8,\r\n // lineTension: 0,\r\n // order: 1,\r\n // data: [],\r\n // },\r\n // {\r\n // label: '12 - <36 months',\r\n // setName: 'rate12to36',\r\n // stratification: 'age',\r\n // title: 'Age',\r\n // fill: false,\r\n // pointRadius: 3,\r\n // pointBorderWidth: 3,\r\n // pointHoverRadius: 8,\r\n // lineTension: 0,\r\n // order: 2,\r\n // data: [],\r\n // },\r\n // {\r\n // label: '36 - <72 months',\r\n // setName: 'rate36to72',\r\n // stratification: 'age',\r\n // title: 'Age',\r\n // fill: false,\r\n // pointRadius: 3,\r\n // pointBorderWidth: 3,\r\n // pointHoverRadius: 8,\r\n // lineTension: 0,\r\n // order: 3,\r\n // data: [],\r\n // },\r\n // {\r\n // label: 'All Ages < 6 years',\r\n // baseline: true,\r\n // setName: 'rateTotal',\r\n // stratification: 'age',\r\n // title: 'Age',\r\n // fill: false,\r\n // pointRadius: 3,\r\n // pointBorderWidth: 3,\r\n // pointHoverRadius: 8,\r\n // lineTension: 0,\r\n // order: 4,\r\n // data: [],\r\n // },\r\n // ],\r\n // },\r\n // columnHeaders: [\r\n // {\r\n // field: 'year',\r\n // headerName: 'Year',\r\n // width: 120,\r\n // align: 'left',\r\n // headerAlign: 'left',\r\n // },\r\n // {\r\n // field: 'rate',\r\n // headerName: 'County Mean',\r\n // width: 140,\r\n // customFormat: 2,\r\n // align: 'left',\r\n // headerAlign: 'left',\r\n // },\r\n // {\r\n // field: 'stateRate',\r\n // headerName: 'Statewide Mean',\r\n // width: 170,\r\n // customFormat: 2,\r\n // align: 'left',\r\n // headerAlign: 'left',\r\n // },\r\n // ],\r\n // tableTitle: 'Mean Childhood Blood Lead Level',\r\n // },\r\n },\r\n about: ` `, // Fetched from the database\r\n resources: ` `, // Fetched from the database\r\n },\r\n moredata: {\r\n defaultTabPath: 'ncdms',\r\n themeTitle: 'More Data',\r\n themePath: 'moredata',\r\n tabs: {\r\n ncdms: {\r\n tabTitle: '',\r\n tabPath: 'ncdms',\r\n contentType: 'ncdm',\r\n defaultTab: true,\r\n textHeader: 'Nationally Consistent Data and Measures',\r\n textSubheading: 'Sub-header',\r\n textBody: '',\r\n },\r\n },\r\n about: ` `, // Fetched from the database\r\n resources: ` `, // Fetched from the database\r\n },\r\n },\r\n },\r\n climate: {\r\n topicTitle: 'Climate Change',\r\n topicPath: 'climate',\r\n category: 'environmental',\r\n defaultTabPath: 'edTrends',\r\n overview:\r\n '

Climate change is changing weather patterns in Maryland, resulting in warmer average temperatures, changes in seasons, and more days of extreme heat and extreme precipitation (both rainfall and snowfall). These changes may be associated with a variety of health outcomes in Maryland, including both direct effects (like heat-related injuries), and indirect effects (like heart attacks and injuries).

Maryland Department of Health works closely with the Maryland Commission on Climate Change and other state agencies to provide data, tools, and technical assistance to state agencies, community-based organizations, and other stakeholders in Maryland who are working to include health impacts as part of climate adaptation. For more information, see the Maryland Climate Change Health Adaptation Program home page.

',\r\n aboutData: `
Data Facts Climate Change
Why these data are important As our climate changes, scientists predict that extreme weather events will become more common, more severe, and longer lasting, which may erode recent progress Maryland has made on improving air quality. Climate change surveillance is important, as air pollutants and extreme heat and precipation events are already affecting human health both directly and indirectly.
Data Sources Maryland Health Services Cost Review Commission
Maryland Institute for Applied Environmental Health
Years available 2010-most recent data available (usually 1-2 years prior to current date)
Data source description Hospital billing data from inpatient discharges and emergency department encounters
What's reported Inpatient (IP) hospitalizations; Emergency department (ED) visits; days over heat index threshold
How it's reported Age-adjusted rates; days over heat index threshold
Level of geographic detail State and county
Level of demographic detail N/A
Data disclaimers

HSCRC revised the methodology for coding race/ethnicity in 2013; therefore, race/ethnicity data from 2014 and later may not be comparable to previous years.

ICD-9 hospital billing codes transitioned to ICD-10 billing codes in 2015; therefore, data from 2016 and later may not be comparable to previous years.

If a county does not possess an active weather station, data are borrowed from nearby stations located within 50 km of the county boundary. Some counties may not have weather stations that meet these requirements.
The summary data provided on this website are downloadable. For more detailed data, refer to the data sources. Yes
Environmental Health Helpline 1-866-703-3266
mdh.envhealth@maryland.gov
Last Updated 10/8/2024
Frequency of data updates Annual
Data suppression rules HSCRC:

County level: suppression is for non-zero numerators <11 and this is reflected in data starting with 2021. Prior to 2021, suppression was for non-zero numerators <6. There is no denominator requirement.

`,\r\n themeOverviews: [\r\n {\r\n theme: 'Status',\r\n text:\r\n 'Provides a detailed view of climate change over time throughout Maryland by area.',\r\n },\r\n {\r\n theme: 'Disparities',\r\n text:\r\n 'Examines the distribution of the burden of climate change in Maryland',\r\n },\r\n ],\r\n countySuppressionRules: null,\r\n subCountySuppressionRules: null,\r\n omitNcdmData: true, // Prevents the Download All NCDM button from displaying and skips the call to get NCDM configs\r\n themes: {\r\n status: {\r\n defaultTabPath: 'edTrends',\r\n themeTitle: 'Status',\r\n themePath: 'status',\r\n tabs: {\r\n edTrends: {\r\n tabTitle: 'Heat Stress ED',\r\n tabPath: 'edTrends',\r\n contentType: 'chart',\r\n // No contentTitle for charts, will be controlled in \"chartTitle\" property below //\r\n exportTitle:\r\n 'Rate of Emergency Department (ED) Visits for Heat Stress',\r\n exportSubtitle:\r\n 'Age-adjusted rate per 100k population ',\r\n chartType: 'trendline',\r\n selectable: true,\r\n stratifiable: false,\r\n defaultStratification: null, // Using null to denote no stratification. Note this value must differ\r\n // from other buttons within the same theme if we are switching to or from stratified to not-stratified\r\n // The following array of stratifications will create a chart stratification button for each item:\r\n stratifications: [],\r\n defaultSelection: '000', // 000 is the code used for statewide data at the DB\r\n defaultSetNames: ['stateRate'],\r\n baseline: '000', // 000 is the code used for statewide data at the DB\r\n info: {\r\n title:\r\n 'Rate of Emergency Department (ED) Visits for Heat Stress',\r\n id: 'chart-climate-emergency-room-trend',\r\n subtitle: 'Age-adjusted rate per 100k population',\r\n },\r\n chartTitle:\r\n 'Rate of Emergency Department (ED) Visits for Heat Stress',\r\n chartSubtitle:\r\n \"Data changed in late 2015. See 'About' for details.\",\r\n displayChartTitle: true,\r\n displayChartSubtitle: true,\r\n displayYAxisLabel: true,\r\n displayXAxisLabel: true,\r\n displayChartDiscontinuityGraphic: true,\r\n yAxisLabel: 'Age-adjusted rate per 100,000 population',\r\n xAxisLabel: 'Year',\r\n chartXAxisField: 'year', // should match field name used in incoming dataset\r\n chartDataSets: ['rate', 'stateRate'], // should match field names used in incoming dataset\r\n url: `${process.env.REACT_APP_EPHT_API}/Climate/GetHeatStressEDVisitRate`,\r\n urlParams: [\r\n { param: 'jurisdiction', valueKey: 'code' },\r\n ],\r\n chartConfig: {\r\n mainDatasets: [\r\n {\r\n label: 'County',\r\n setName: 'rate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n baseline: true,\r\n label: 'Statewide',\r\n setName: 'stateRate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n ],\r\n // Note: Baseline dataset should receive `baseline: true` property.\r\n // Additional note: The `order` property will dictate how lines stack on each other, in ascending order. Baseline should be given highest value to ensure it is colored correctly by Chart.js (gray)\r\n stratificationDatasets: [],\r\n },\r\n columnHeaders: [\r\n {\r\n field: 'year',\r\n headerName: 'Year',\r\n width: 85,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate',\r\n headerName: 'County Rate',\r\n width: 134,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'stateRate',\r\n headerName: 'Statewide Rate',\r\n width: 160,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Rate of Emergency Department (ED) Visits for Heat Stress ',\r\n },\r\n hospitalizations: {\r\n tabTitle: 'Heat Stress Hosp',\r\n tabPath: 'hospitalizations',\r\n contentType: 'chart',\r\n // No contentTitle for charts, will be controlled in \"chartTitle\" property below //\r\n exportTitle: 'Rate of Hospitalizations for Heat Stress',\r\n exportSubtitle: 'Age-adjusted rate per 100k population',\r\n chartType: 'trendline',\r\n selectable: true,\r\n stratifiable: false,\r\n defaultStratification: null, // Using null to denote no stratification. Note this value must differ\r\n // from other buttons within the same theme if we are switching to or from stratified to not-stratified\r\n // The following array of stratifications will create a chart stratification button for each item:\r\n stratifications: [],\r\n defaultSelection: '000', // 000 is the code used for statewide data at the DB\r\n defaultSetNames: ['stateRate'],\r\n baseline: '000', // 000 is the code used for statewide data at the DB\r\n info: {\r\n title: 'Rate of Hospitalizations for Heat Stress',\r\n id: 'chart-climate-hospitalizations-trend',\r\n subtitle: 'Age-adjusted rate per 100k population',\r\n },\r\n chartTitle: 'Rate of Hospitalizations for Heat Stress',\r\n chartSubtitle:\r\n \"Data changed in late 2015. See 'About' for details.\",\r\n displayChartTitle: true,\r\n displayChartSubtitle: true,\r\n displayYAxisLabel: true,\r\n displayXAxisLabel: true,\r\n displayChartDiscontinuityGraphic: true,\r\n yAxisLabel: 'Age-adjusted rate per 100,000 population',\r\n xAxisLabel: 'Year',\r\n chartXAxisField: 'year', // should match field name used in incoming dataset\r\n chartDataSets: ['rate', 'stateRate'], // should match field names used in incoming dataset\r\n url: `${process.env.REACT_APP_EPHT_API}/Climate/GetHeatStressHospitalizationRate`,\r\n urlParams: [\r\n { param: 'jurisdiction', valueKey: 'code' },\r\n ],\r\n chartConfig: {\r\n mainDatasets: [\r\n {\r\n label: 'County',\r\n setName: 'rate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n baseline: true,\r\n label: 'Statewide',\r\n setName: 'stateRate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n ],\r\n\r\n // Note: Baseline dataset should receive `baseline: true` property.\r\n // Additional note: The `order` property will dictate how lines stack on each other, in ascending order. Baseline should be given highest value to ensure it is colored correctly by Chart.js (gray)\r\n stratificationDatasets: [],\r\n },\r\n columnHeaders: [\r\n {\r\n field: 'year',\r\n headerName: 'Year',\r\n width: 85,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate',\r\n headerName: 'County Rate',\r\n width: 134,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'stateRate',\r\n headerName: 'Statewide Rate',\r\n width: 160,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle: 'Rate of Hospitalizations for Heat Stress',\r\n },\r\n },\r\n about: ` `, // Fetched from the database\r\n resources: ` `, // Fetched from the database\r\n },\r\n disparities: {\r\n defaultTabPath: 'extremeHeat',\r\n themeTitle: 'Disparities',\r\n themePath: 'disparities',\r\n tabs: {\r\n extremeHeat: {\r\n tabTitle: 'Extreme Heat',\r\n tabPath: 'extremeHeat',\r\n contentType: 'chart',\r\n // No contentTitle for charts, will be controlled in \"chartTitle\" property below //\r\n exportTitle:\r\n 'Days Over Heat Index Threshold and Heat Stress',\r\n exportSubtitle: 'Age-adjusted rate per 100k population',\r\n chartType: 'mixed',\r\n highContrastPalette: true,\r\n selectable: true,\r\n defaultSelection: '001', // Picking the first county as default since we don't have statewide data\r\n defaultSetNames: [\r\n 'hospitalizationRate',\r\n 'edVisitRate',\r\n 'daysOverHeatIndex',\r\n ],\r\n info: {\r\n title: 'Heat Index and Heat Stress ',\r\n id: 'chart-climate-extreme-heat',\r\n subtitle: 'Age-adjusted rate per 100k population',\r\n },\r\n chartTitle: 'Heat Index and Heat Stress',\r\n chartSubtitle:\r\n \"Data changed in late 2015. See 'About' for details.\",\r\n displayChartTitle: true,\r\n displayChartSubtitle: true,\r\n chartXAxisField: 'year',\r\n displayYAxisLabel: true,\r\n displayXAxisLabel: true,\r\n displayChartDiscontinuityGraphic: true,\r\n xAxisLabel: 'Year',\r\n yAxisLabelLeft:\r\n 'Age-adjusted rate per 100,000 population',\r\n yAxisLabelRight: 'Days over heat index threshold',\r\n yAxisIdLeft: 'rates', // Should correspond with `yAxisId` given to first item in `chartConfig` array\r\n yAxisIdRight: 'days', // Should correspond with `yAxisId` given to second item in `chartConfig` array\r\n chartDataSets: [\r\n 'hospitalizationRate',\r\n 'edVisitRate',\r\n 'daysOverHeatIndex',\r\n ],\r\n url: `${process.env.REACT_APP_EPHT_API}/Climate/GetNumberDaysOverHeatIndexThreshold`,\r\n urlParams: [{ param: 'jurisdiction' }],\r\n chartConfig: [\r\n // Corresponds to left y-axis:\r\n {\r\n setName: 'hospitalizationRate',\r\n label: 'Hospitalization Rate',\r\n yAxisID: 'rates',\r\n type: 'line',\r\n fill: true,\r\n pointRadius: 4,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n pointHoverBorderWidth: 3,\r\n lineTension: 0,\r\n borderWidth: 3,\r\n data: [],\r\n },\r\n\r\n {\r\n setName: 'edVisitRate',\r\n label: 'ED Visit Rate',\r\n yAxisID: 'rates',\r\n type: 'line',\r\n fill: true,\r\n pointRadius: 4,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n pointHoverBorderWidth: 3,\r\n lineTension: 0,\r\n borderWidth: 3,\r\n data: [],\r\n },\r\n // Corresponds to right y-axis:\r\n {\r\n setName: 'daysOverHeatIndex',\r\n label: 'Days Over Threshold',\r\n yAxisID: 'days',\r\n type: 'bar',\r\n fill: false,\r\n data: [],\r\n },\r\n ],\r\n columnHeaders: [\r\n {\r\n field: 'year',\r\n headerName: 'Year',\r\n width: 90,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'edVisitRate',\r\n headerName: 'ED Visit Rate',\r\n exportHeaderName: 'ED Visit Rate',\r\n width: 140,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'hospitalizationRate',\r\n headerName: 'Hospitalization Rate',\r\n exportHeaderName: 'Hospitalization Rate',\r\n width: 188,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'daysOverHeatIndex',\r\n headerName: 'Days Over Threshold',\r\n exportHeaderName: 'Days Over Threshold ',\r\n width: 190,\r\n customFormat: 1,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Days Over Heat Index Threshold and Heat Stress',\r\n },\r\n },\r\n about: ` `, // Fetched from the database\r\n resources: ` `, // Fetched from the database\r\n },\r\n },\r\n },\r\n drinkingWater: {\r\n topicTitle: 'Drinking Water',\r\n topicPath: 'drinkingWater',\r\n category: 'environmental',\r\n defaultTabPath: 'recipients',\r\n overview:\r\n '

In Maryland, approximately five million people receive drinking water daily from more than 3,400 public water systems. Drinking water is an essential resource, and information about Maryland public water systems and contaminant levels may be used to determine the potential for public exposures from contaminants.

',\r\n aboutData: `
Data Facts Drinking Water
Why these data are important In Maryland, approximately five million people receive drinking water daily from more than 3,400 public water systems. Drinking water is an essential resource, and information about Maryland public water systems and contaminant levels may be used to determine the potential for public exposures from contaminants.
Data Sources Maryland Department of the Environment Water Supply Program
Years available 2010-most recent data available (usually 1-2 years prior to current date)
Data source description Water sampling contaminant and Community Water Systems (CWS) data
What's reported Number of people receiving water from a Public Water System (PWS); PWS locations; mean concentrations of contaminants
How it's reported Counts; point locations; concentrations (μg/L)
Level of geographic detail State, county and point location
Level of demographic detail N/A
Data disclaimers

The number of people served by the Public Water System (PWS) is assigned to the county that the water system is based in, not the county of residence.

Contaminant concentrations of arsenic, nitrates, total trihalomethanes (TTHM), and haloacetic acids (HAA5) have been rounded to 1 decimal place.
The summary data provided on this website are downloadable. For more detailed data, refer to the data sources. Yes
Environmental Health Helpline 1-866-703-3266
mdh.envhealth@maryland.gov
Last Updated 10/8/2024
Frequency of data updates Annual
Data suppression rules
`,\r\n themeOverviews: [\r\n {\r\n theme: 'Status',\r\n text:\r\n 'Provides a detailed view of drinking water over time throughout Maryland by area.',\r\n },\r\n {\r\n theme: 'More Data',\r\n text:\r\n 'Provides a detailed view of Nationally Consistent Data and Measures (NCDMs) for drinking water as specified by the Centers for Disease Control and Prevention (CDC). All additional data are available for download.',\r\n },\r\n ],\r\n countySuppressionRules: null, // Set to null since we have no suppression rules to display\r\n subCountySuppressionRules: null, // Set to null since we have no suppression rules to display\r\n themes: {\r\n status: {\r\n defaultTabPath: 'recipients',\r\n themeTitle: 'Status',\r\n themePath: 'status',\r\n tabs: {\r\n recipients: {\r\n tabTitle: 'Recipients',\r\n tabPath: 'recipients',\r\n contentType: 'map',\r\n contentTitle:\r\n 'Number of People Receiving Water from a Public Water System (PWS)',\r\n exportTitle:\r\n 'Number of People Receiving Water from a Public Water System (PWS)',\r\n exportSubtitle:\r\n 'Number of People Receiving Water from a Public Water System (PWS) by County \\n*Number of people receiving water per county is based on the primary county served by each water system. Therefore Baltimore County residents that receive water from the City of Baltimore PWS are included in the count for Baltimore City and Prince George’s County residents that receive water from the WSSC PWS are included in the count for Montgomery County.',\r\n mapSets: [\r\n {\r\n set: 'primary',\r\n geometry: 'County',\r\n outFields: ['County', 'PWS_Population_Served'],\r\n columnHeaders: [\r\n {\r\n field: 'County',\r\n headerName: 'County',\r\n flex: 1,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'PWS_Population_Served',\r\n headerName: 'People Served',\r\n flex: 1,\r\n customFormat: 1,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Number of People Receiving Water from a Public Water System (PWS)',\r\n popupContent: {\r\n title: {\r\n field: 'FullCounty',\r\n },\r\n environment: {\r\n name: 'Number of People Served',\r\n field: 'PWS_Population_Served',\r\n unit: '',\r\n className: 'field-value',\r\n },\r\n },\r\n setLayers: [\r\n {\r\n id:\r\n 'county-drinkingwater-pop-served-by-county',\r\n zIndexPosition: 'front', // Note: setting this to front is required to make the symbol clickable\r\n title:\r\n 'Number of People Receiving Water from a PWS by County',\r\n subtitle:\r\n 'The number of people served is assigned to the county that the water system is based in, not the county of residence',\r\n yearKey: 'Inventory_Year',\r\n sourceLayer: true,\r\n defaultVisible: true,\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/DrinkingWater/MapServer/3`,\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n locations: {\r\n tabTitle: 'Locations',\r\n tabPath: 'locations',\r\n contentType: 'map',\r\n contentTitle:\r\n 'Public Water System (PWS) by Population Served',\r\n exportTitle:\r\n 'Public Water System (PWS) by Population Served',\r\n exportSubtitle:\r\n 'Public Water System (PWS) by Population Served',\r\n mapSets: [\r\n {\r\n set: 'primary',\r\n geometry: 'County',\r\n outFields: [\r\n 'PWS_Name',\r\n 'Population_Served',\r\n 'Primary_Source_Desc',\r\n 'Consumer_Confidence_Url',\r\n ],\r\n columnHeaders: [\r\n {\r\n field: 'PWS_Name',\r\n headerName: 'PWS Name',\r\n width: 135,\r\n customFormat: 0,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'Primary_Source_Desc',\r\n headerName: 'Primary Source',\r\n width: 155,\r\n customFormat: 0,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'Population_Served',\r\n headerName: 'People Served',\r\n width: 148,\r\n customFormat: 1,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'Consumer_Confidence_Url',\r\n headerName:\r\n 'Consumer Confidence Report',\r\n width: 245,\r\n align: 'left',\r\n headerAlign: 'left',\r\n renderCell: (params) => (\r\n \r\n Link to Report\r\n \r\n ),\r\n },\r\n ],\r\n tableTitle:\r\n 'Public Water System (PWS) by Population Served ',\r\n popupContent: {\r\n title: {\r\n field: 'PWS_Name',\r\n },\r\n health: {\r\n name: 'People Served',\r\n field: 'Population_Served_Desc',\r\n className: 'field-value-align-left',\r\n unit: '',\r\n },\r\n environment: {\r\n name: 'Primary Source',\r\n field: 'Primary_Source_Desc',\r\n className: 'field-value-align-left',\r\n unit: '',\r\n },\r\n link: {\r\n name: 'Consumer Confidence Report',\r\n field: 'Consumer_Confidence_Url',\r\n className: 'field-value-link',\r\n unit: '',\r\n },\r\n },\r\n setLayers: [\r\n {\r\n id: 'county-drinkingwater-pop-served',\r\n zIndexPosition: 'front',\r\n title:\r\n 'Public Water System (PWS) By Population Served',\r\n yearKey: 'Inventory_Year',\r\n subtitle:\r\n 'May not represent the actual location of the Public Water System (PWS)',\r\n defaultVisible: true,\r\n sourceLayer: true, // Sets the layer to the source for the table\r\n toggleable: false, // Sets if the layer is toggleable within the legend\r\n customSortField: 'PWS_Name',\r\n omitCommunityProfile: true, // If true, will prevent the community profile section from displaying\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/DrinkingWater/MapServer/1`,\r\n },\r\n {\r\n id:\r\n 'county-drinkingwater-treatment-plants',\r\n zIndexPosition: 'back',\r\n type: 'uniquePoint', // Used to identify the renderer in LayerComp\r\n // This is a flag that indicates this layer requires custom styling within the legend. This field should always be populated using dot syntax so that 'LegendItems.js` can access the needed styling methods of the same name within the utils file.\r\n customStyleTitle:\r\n customLegendStyleNames\r\n .esriSMSCircleFilled.title,\r\n title:\r\n 'Treatment Plants for Baltimore and Washington Suburban Sanitary Commission (WSSC)',\r\n subtitle: '',\r\n defaultVisible: true,\r\n sourceLayer: false, // Sets the layer to the source for the table\r\n toggleable: false, // Sets if the layer is toggleable within the legend\r\n omitCommunityProfile: true, // If true, will prevent the community profile section from displaying\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/DrinkingWater/MapServer/0`,\r\n },\r\n {\r\n id:\r\n 'county-drinkingwater-service-areas',\r\n\r\n zIndexPosition: 'back',\r\n type: 'uniqueChoropleth', // Used to identify the renderer in LayerComp\r\n title:\r\n 'Service Areas for Baltimore and Washington Suburban Sanitary Commission (WSSC)',\r\n subtitle: '',\r\n defaultVisible: true,\r\n sourceLayer: false, // Sets the layer to the source for the table\r\n toggleable: false, // Sets if the layer is toggleable within the legend\r\n omitCommunityProfile: true, // If true, will prevent the community profile section from displaying\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/DrinkingWater/MapServer/2`,\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n },\r\n about: ` `, // Fetched from the database\r\n resources: ` `, // Fetched from the database\r\n },\r\n moredata: {\r\n defaultTabPath: 'ncdms',\r\n themeTitle: 'More Data',\r\n themePath: 'moredata',\r\n tabs: {\r\n ncdms: {\r\n tabTitle: '',\r\n tabPath: 'ncdms',\r\n contentType: 'ncdm',\r\n defaultTab: true,\r\n textHeader: 'Nationally Consistent Data and Measures',\r\n textSubheading: 'Sub-header',\r\n textBody: '',\r\n },\r\n },\r\n about: ` `, // Fetched from the database\r\n resources: ` `, // Fetched from the database\r\n },\r\n },\r\n },\r\n heartAttack: {\r\n topicTitle: 'Heart Attack',\r\n topicPath: 'heartAttack',\r\n category: 'health',\r\n defaultTabPath: 'edTrends',\r\n overview:\r\n '

Heart disease is the leading cause of death in Maryland. Heart attack (“myocardial infarction”) is lack of sufficient blood and oxygen to the heart muscle. Many factors contribute to the risk of having a heart attack, including environmental risk factors.

',\r\n aboutData: `
Data Facts Heart Attack
Why these data are important A growing body of research has demonstrated significant associations between levels of air pollutants such as ozone, carbon monoxide, PM10, PM2.5, and sulfur dioxide, and increased risk of heart attack (also called myocardial infarction) and other forms of coronary heart disease. The air pollutant measures and heart attack indicators provided here allow for monitoring of trends over time and have the potential to identify groups with elevated risk for heart attack.
Data Sources Maryland Health Services Cost Review Commission
Maryland Department of the Environment Air Monitoring Program
Years available 2010-most recent data available (usually 1-2 years prior to current date)
Data source description Medical record abstract of clinical, demographic, and billing data on all inpatient hospitalization discharges from Maryland's 47 hospitals
What's reported Myocardial Infarction inpatient (IP) hospitalizations
How it's reported Counts; crude (age-specific) and age-adjusted rates
Level of geographic detail State and county
Level of demographic detail Race/ethnicity, sex, and age group
Data disclaimers

HSCRC revised the methodology for coding race/ethnicity in 2013; therefore, race/ethnicity data from 2014 and later may not be comparable to previous years.

ICD-9 hospital billing codes transitioned to ICD-10 billing codes in 2015; therefore, data from 2016 and later may not be comparable to previous years.
The summary data provided on this website are downloadable. For more detailed data, refer to the data sources. Yes
Environmental Health Helpline 1-866-703-3266
mdh.envhealth@maryland.gov
Last Updated 10/8/2024
Frequency of data updates Annual
Data suppression rules HSCRC:

County level: suppression is for non-zero numerators <11 and this is reflected in data starting with 2021. Prior to 2021, suppression was for non-zero numerators <6. There is no denominator requirement.

`,\r\n themeOverviews: [\r\n {\r\n theme: 'Status',\r\n text:\r\n 'Provides a detailed view of heart attacks over time throughout Maryland by area.',\r\n },\r\n {\r\n theme: 'Disparities',\r\n text:\r\n 'Examines the distribution of the burden of heart attacks in Maryland.',\r\n },\r\n {\r\n theme: 'Programs',\r\n text:\r\n 'Detailed view of the effects of Maryland Department of Health programs and other efforts to address heart attacks in Maryland.',\r\n },\r\n ],\r\n countySuppressionRules: {\r\n range: '1 to 10',\r\n populationMin: '5,000',\r\n },\r\n subCountySuppressionRules: null,\r\n omitNcdmData: true, // Prevents the Download All NCDM button from displaying and skips the call to get NCDM configs\r\n themes: {\r\n status: {\r\n defaultTabPath: 'rateOver35',\r\n themeTitle: 'Status',\r\n themePath: 'status',\r\n tabs: {\r\n rateOver35: {\r\n tabTitle: 'Age 35+',\r\n tabPath: 'rateOver35',\r\n contentType: 'map',\r\n contentTitle:\r\n 'Unadjusted Rate of Hospitalizations for Heart Attack, Ages 35 and Older',\r\n exportTitle:\r\n 'Unadjusted Rate of Hospitalizations for Heart Attack Ages 35 and Older',\r\n exportSubtitle: 'Unadjusted rate per 10k population',\r\n mapSets: [\r\n {\r\n set: 'primary',\r\n geometry: 'County',\r\n outFields: ['County', 'Rate'],\r\n columnHeaders: [\r\n {\r\n field: 'County',\r\n headerName: 'County',\r\n flex: 1,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'Rate',\r\n headerName: 'Rate',\r\n flex: 1,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Unadjusted Rate of Hospitalizations for Heart Attack, Ages 35 and Older',\r\n popupContent: {\r\n title: {\r\n field: 'FullCounty',\r\n },\r\n health: {\r\n name:\r\n 'Heart attack hospitalizations per 10,000 population age 35+',\r\n field: 'Rate',\r\n unit: '',\r\n },\r\n },\r\n setLayers: [\r\n {\r\n id: 'county-mi-rate-over-35',\r\n zIndexPosition: 'front', // Note: setting this to front is required to make the symbol clickable\r\n title:\r\n 'Rate of Hospitalizations for Heart Attack by County',\r\n subtitle:\r\n 'Unadjusted rate per 10,000 population age 35 and older',\r\n yearKey: 'Year',\r\n sourceLayer: true,\r\n defaultVisible: true,\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/MI/MapServer/2`,\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n rate35to64: {\r\n tabTitle: 'Age 35-64',\r\n tabPath: 'rate35to64',\r\n contentType: 'map',\r\n contentTitle:\r\n 'Unadjusted Rate of Hospitalizations for Heart Attack, Ages 35-64',\r\n exportTitle:\r\n 'Unadjusted Rate of Hospitalizations for Heart Attack Ages 35-64',\r\n exportSubtitle: 'Unadjusted rate per 10k population',\r\n mapSets: [\r\n {\r\n set: 'primary',\r\n geometry: 'County',\r\n outFields: ['County', 'Rate'],\r\n columnHeaders: [\r\n {\r\n field: 'County',\r\n headerName: 'County',\r\n flex: 1,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'Rate',\r\n headerName: 'Rate',\r\n flex: 1,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Unadjusted Rate of Hospitalizations for Heart Attack, Ages 35-64',\r\n popupContent: {\r\n title: {\r\n field: 'FullCounty',\r\n },\r\n health: {\r\n name:\r\n 'Heart attack hospitalizations per 10,000 population age 35-64',\r\n field: 'Rate',\r\n unit: '',\r\n },\r\n },\r\n setLayers: [\r\n {\r\n id: 'county-mi-rate-35-64',\r\n zIndexPosition: 'front', // Note: setting this to front is required to make the symbol clickable\r\n title:\r\n 'Rate of Hospitalizations for Heart Attack by County',\r\n subtitle:\r\n 'Unadjusted rate per 10,000 population for ages 35-64',\r\n yearKey: 'Year',\r\n sourceLayer: true,\r\n defaultVisible: true,\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/MI/MapServer/3`,\r\n },\r\n ],\r\n },\r\n ],\r\n tableTitle:\r\n 'Unadjusted Rate of Hospitalizations for Heart Attack, Ages 35-64',\r\n },\r\n rateOver65: {\r\n tabTitle: 'Age 65+',\r\n tabPath: 'rateOver65',\r\n contentType: 'map',\r\n contentTitle:\r\n 'Unadjusted Rate of Hospitalizations for Heart Attack, Ages 65 and Older',\r\n exportTitle:\r\n 'Unadjusted Rate of Hospitalizations for Heart Attack Ages 65 and Older',\r\n exportSubtitle: 'Unadjusted rate per 10k population',\r\n mapSets: [\r\n {\r\n set: 'primary',\r\n geometry: 'County',\r\n outFields: ['County', 'Rate'],\r\n columnHeaders: [\r\n {\r\n field: 'County',\r\n headerName: 'County',\r\n flex: 1,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'Rate',\r\n headerName: 'Rate',\r\n flex: 1,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Unadjusted Rate of Hospitalizations for Heart Attack, Ages 65 and Older',\r\n popupContent: {\r\n title: {\r\n field: 'FullCounty',\r\n },\r\n health: {\r\n name:\r\n 'Heart attack hospitalizations per 10,000 population age 65+',\r\n field: 'Rate',\r\n unit: '',\r\n },\r\n },\r\n setLayers: [\r\n {\r\n id: 'county-mi-rate-over-65',\r\n zIndexPosition: 'front', // Note: setting this to front is required to make the symbol clickable\r\n title:\r\n 'Rate of Hospitalizations for Heart Attack by County',\r\n subtitle:\r\n 'Unadjusted rate per 10,000 population for ages 65 and older',\r\n yearKey: 'Year',\r\n sourceLayer: true,\r\n defaultVisible: true,\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/MI/MapServer/4`,\r\n },\r\n ],\r\n },\r\n ],\r\n tableTitle:\r\n 'Unadjusted Rate of Hospitalizations for Heart Attack, Ages 65 and Older',\r\n },\r\n ageAdjustedRate: {\r\n tabTitle: 'Age-Adj.',\r\n tabPath: 'ageAdjustedRate',\r\n contentType: 'map',\r\n contentTitle:\r\n 'Age-Adjusted Rate of Hospitalizations for Heart Attack, Age 35 and Older',\r\n exportTitle:\r\n 'Age-Adjusted Rate of Hospitalizations for Heart Attack Age 35 and Older',\r\n exportSubtitle: 'Age-adjusted rate per 10k population',\r\n mapSets: [\r\n {\r\n set: 'primary',\r\n geometry: 'County',\r\n outFields: ['County', 'Rate'],\r\n columnHeaders: [\r\n {\r\n field: 'County',\r\n headerName: 'County',\r\n flex: 1,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'Rate',\r\n headerName: 'Rate',\r\n flex: 1,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Age-Adjusted Rate of Hospitalizations for Heart Attack, Age 35 and Older',\r\n popupContent: {\r\n title: {\r\n field: 'FullCounty',\r\n },\r\n health: {\r\n name:\r\n 'Heart attack hospitalizations per 10,000 population age 35+',\r\n field: 'Rate',\r\n unit: '',\r\n },\r\n },\r\n setLayers: [\r\n {\r\n id: 'county-mi-age-adjusted-rate',\r\n zIndexPosition: 'front', // Note: setting this to front is required to make the symbol clickable\r\n title:\r\n 'Rate of Hospitalizations for Heart Attack by County',\r\n subtitle:\r\n 'Age-adjusted rate per 10,000 population for ages 35 and older',\r\n yearKey: 'Year',\r\n sourceLayer: true,\r\n defaultVisible: true,\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/MI/MapServer/1`,\r\n },\r\n ],\r\n },\r\n ],\r\n tableTitle: 'Rate of Hospitalizations for Heat Stress',\r\n },\r\n unadjustedTrend: {\r\n tabTitle: 'Trend',\r\n tabPath: 'unadjustedTrend',\r\n contentType: 'chart',\r\n // No contentTitle for charts, will be controlled in \"chartTitle\" property below //\r\n exportTitle:\r\n 'Unadjusted Rate of Hospitalizations for Heart Attack Age 35 and Older',\r\n exportSubtitle: 'Unadjusted rate per 10k population',\r\n chartType: 'trendline',\r\n selectable: true,\r\n stratifiable: true,\r\n defaultStratification: undefined, // If this property is left undefined, stratifiable charts will default to non-stratified on page landing\r\n\r\n // The following array of stratifications will create a chart stratification button for each item:\r\n stratifications: [\r\n {\r\n title: 'Age', // Name that appears for button\r\n field: 'age', // Must match stratification key name in json response returned from endpoint\r\n },\r\n ],\r\n defaultSelection: '000', // Only showing statewide for MI, but can't be undefined or an empty string\r\n defaultSetNames: ['stateRate'],\r\n baseline: '000', // 000 is the code used for statewide data at the DB\r\n info: {\r\n title:\r\n 'Unadjusted Rate of Hospitalization for Heart Attack Among Persons 35 and Over per 10,000 Population.',\r\n id: 'chart-mi-unadjusted-rate',\r\n subtitle: '',\r\n },\r\n chartTitle:\r\n 'Unadjusted Rate of Hospitalizations for Heart Attack, Age 35 and Older',\r\n chartSubtitle:\r\n \"Data changed in late 2015. See 'About' for details.\",\r\n displayChartTitle: true,\r\n displayChartSubtitle: true,\r\n displayYAxisLabel: true,\r\n displayXAxisLabel: true,\r\n displayChartDiscontinuityGraphic: true,\r\n yAxisLabel: 'Unadjusted rate per 10,000 population',\r\n xAxisLabel: 'Year',\r\n chartXAxisField: 'year', // should match field name used in incoming dataset\r\n chartDataSets: ['rate', 'stateRate'], // should match field names used in incoming dataset\r\n url: `${process.env.REACT_APP_EPHT_API}/MI/GetHospitalizationCrudeRate`,\r\n urlParams: [\r\n { param: 'jurisdiction', valueKey: 'code' },\r\n ], // this key can't be undefined, not in use for this display\r\n chartConfig: {\r\n mainDatasets: [\r\n {\r\n label: 'County',\r\n setName: 'rate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n baseline: true,\r\n label: 'Statewide',\r\n setName: 'stateRate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n ],\r\n // Note: Baseline dataset should receive `baseline: true` property.\r\n // Additional note: The `order` property will dictate how lines stack on each other, in ascending order. Baseline should be given highest value to ensure it is colored correctly by Chart.js (gray)\r\n stratificationDatasets: [\r\n {\r\n label: '35 to 64',\r\n setName: 'rate35to64',\r\n stratification: 'age',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: '65 and over',\r\n setName: 'rate65plus',\r\n stratification: 'age',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: 'All',\r\n setName: 'rateTotal',\r\n baseline: true,\r\n stratification: 'age',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 3,\r\n data: [],\r\n },\r\n ],\r\n },\r\n columnHeaders: [\r\n {\r\n field: 'year',\r\n headerName: 'Year',\r\n width: 85,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate',\r\n headerName: 'County Rate',\r\n width: 134,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'stateRate',\r\n headerName: 'Statewide Rate',\r\n width: 160,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate35to64',\r\n headerName: '35 to 64',\r\n stratification: 'age',\r\n width: 160,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate65plus',\r\n headerName: '65 and over',\r\n stratification: 'age',\r\n width: 160,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Unadjusted Rate of Hospitalizations for Heart Attack, Age 35 and Older',\r\n },\r\n ageAdjustedTrend: {\r\n tabTitle: 'Age-Adj. Trend',\r\n tabPath: 'ageAdjustedTrend',\r\n contentType: 'chart',\r\n // No contentTitle for charts, will be controlled in \"chartTitle\" property below //\r\n exportTitle:\r\n 'Age-Adjusted Rate of Hospitalizations for Heart Attack Age 35 and Older',\r\n exportSubtitle: 'Age-adjusted rate per 10k population',\r\n chartType: 'trendline',\r\n selectable: true, // Display a dropdown for jurisdictions\r\n stratifiable: false, // Display stratification buttons\r\n defaultStratification: null, // Using null to denote no stratification. Note this value must differ\r\n // from other buttons within the same theme if we are switching to or from stratified to not-stratified\r\n // The following array of stratifications will create a chart stratification button for each item:\r\n stratifications: [],\r\n defaultSelection: '000', // Jurisdictions are selectable\r\n defaultSetNames: ['stateRate'],\r\n baseline: '000', // 000 is the code used for statewide data at the DB\r\n info: {\r\n title:\r\n 'Age-adjusted Rate of Hospitalization for Heart Attack Among Persons 35 and Over per 10,000 Population',\r\n id: 'chart-mi-age-adjusted-rate',\r\n subtitle: '',\r\n },\r\n chartTitle:\r\n 'Age-Adjusted Rate of Hospitalizations for Heart Attack, Age 35 and Older',\r\n chartSubtitle:\r\n \"Data changed in late 2015. See 'About' for details.\",\r\n displayChartTitle: true,\r\n displayChartSubtitle: true,\r\n displayYAxisLabel: true,\r\n displayXAxisLabel: true,\r\n displayChartDiscontinuityGraphic: true,\r\n yAxisLabel: 'Age-adjusted rate per 10,000 population',\r\n xAxisLabel: 'Year',\r\n chartXAxisField: 'year', // should match field name used in incoming dataset\r\n chartDataSets: ['rate', 'stateRate'], // should match field names used in incoming dataset\r\n url: `${process.env.REACT_APP_EPHT_API}/MI/GetHospitalizationAgeAdjRate`,\r\n urlParams: [\r\n { param: 'jurisdiction', valueKey: 'code' },\r\n ], // this key can't be undefined, but note param is not in use for this display\r\n chartConfig: {\r\n mainDatasets: [\r\n {\r\n label: 'County',\r\n setName: 'rate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n baseline: true,\r\n label: 'Statewide',\r\n setName: 'stateRate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n ],\r\n // Note: Baseline dataset should receive `baseline: true` property.\r\n // Additional note: The `order` property will dictate how lines stack on each other, in ascending order. Baseline should be given highest value to ensure it is colored correctly by Chart.js (gray)\r\n stratificationDatasets: [],\r\n },\r\n columnHeaders: [\r\n {\r\n field: 'year',\r\n headerName: 'Year',\r\n width: 85,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate',\r\n headerName: 'County Rate',\r\n width: 134,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'stateRate',\r\n headerName: 'Statewide Rate',\r\n width: 160,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Age-Adjusted Rate of Hospitalizations for Heart Attack, Age 35 and Older',\r\n },\r\n },\r\n about: ` `, // Fetched from the database\r\n resources: ` `, // Fetched from the database\r\n },\r\n disparities: {\r\n defaultTabPath: 'unadjustedRate',\r\n themeTitle: 'Disparities',\r\n themePath: 'disparities',\r\n tabs: {\r\n unadjustedRate: {\r\n tabTitle: 'Unadjusted Rate',\r\n tabPath: 'unadjustedRate',\r\n contentType: 'chart',\r\n // No contentTitle for charts, will be controlled in \"chartTitle\" property below //\r\n exportTitle:\r\n 'Unadjusted Rate of Hospitalizations for Heart Attack Age 35 and Older ',\r\n exportSubtitle: 'Unadjusted rate per 10k population ',\r\n chartType: 'trendline',\r\n selectable: false,\r\n stratifiable: true,\r\n defaultStratification: undefined, // If this property is left undefined, stratifiable charts will default to non-stratified on page landing\r\n\r\n // The following array of stratifications will create a chart stratification button for each item:\r\n stratifications: [\r\n {\r\n title: 'Race/Ethnicity', // Name that appears for button\r\n field: 'race', // Must match stratification key name in json response returned from endpoint\r\n },\r\n {\r\n title: 'Sex', // Name that appears for button\r\n field: 'sex', // Must match stratification key name in json response returned from endpoint\r\n },\r\n ],\r\n defaultSelection: '000', // Only showing statewide for MI, but can't be undefined or an empty string\r\n defaultSetNames: ['stateRate'],\r\n baseline: '000', // 000 is the code used for statewide data at the DB\r\n info: {\r\n title:\r\n 'Unadjusted Rate of Hospitalization for Heart Attack Among Persons 35 and Over per 10,000 Population.',\r\n id: 'chart-mi-unadjusted-rate-statewide',\r\n subtitle: '',\r\n },\r\n chartTitle:\r\n 'Unadjusted Rate of Hospitalizations for Heart Attack, Age 35 and Older',\r\n chartSubtitle:\r\n \"Data changed in late 2015. See 'About' for details.\",\r\n displayChartTitle: true,\r\n displayChartSubtitle: true,\r\n displayYAxisLabel: true,\r\n displayXAxisLabel: true,\r\n displayChartDiscontinuityGraphic: true,\r\n yAxisLabel: 'Unadjusted rate per 10,000 population ',\r\n xAxisLabel: 'Year',\r\n chartXAxisField: 'year', // should match field name used in incoming dataset\r\n chartDataSets: ['rate', 'stateRate'], // should match field names used in incoming dataset\r\n url: `${process.env.REACT_APP_EPHT_API}/MI/GetHospitalizationCrudeRateStatewide`,\r\n urlParams: [\r\n { param: 'jurisdiction', valueKey: 'code' },\r\n ], // this key can't be undefined, not in use for this display\r\n chartConfig: {\r\n mainDatasets: [\r\n {\r\n baseline: true,\r\n label: 'Statewide',\r\n setName: 'stateRate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n ],\r\n // Note: Baseline dataset should receive `baseline: true` property.\r\n // Additional note: The `order` property will dictate how lines stack on each other, in ascending order. Baseline should be given highest value to ensure it is colored correctly by Chart.js (gray)\r\n stratificationDatasets: [\r\n {\r\n label: 'White NH',\r\n setName: 'rateWhite',\r\n stratification: 'race',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: 'Black NH',\r\n setName: 'rateBlack',\r\n stratification: 'race',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: 'Hispanic',\r\n setName: 'rateHispanic',\r\n stratification: 'race',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 3,\r\n data: [],\r\n },\r\n {\r\n label: 'Other NH',\r\n setName: 'rateOther',\r\n stratification: 'race',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 4,\r\n data: [],\r\n },\r\n {\r\n label: 'All',\r\n setName: 'rateTotal',\r\n baseline: true,\r\n stratification: 'race',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 5,\r\n data: [],\r\n },\r\n {\r\n label: 'Female',\r\n setName: 'rateFemale',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: 'Male',\r\n setName: 'rateMale',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: 'All',\r\n baseline: true,\r\n setName: 'rateTotal',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 3,\r\n data: [],\r\n },\r\n ],\r\n },\r\n columnHeaders: [\r\n {\r\n field: 'year',\r\n headerName: 'Year',\r\n width: 85,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'stateRate',\r\n headerName: 'Statewide Rate',\r\n width: 160,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateWhite',\r\n headerName: 'White NH',\r\n stratification: 'race',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateBlack',\r\n headerName: 'Black NH',\r\n stratification: 'race',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateHispanic',\r\n headerName: 'Hispanic',\r\n stratification: 'race',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateOther',\r\n headerName: 'Other NH',\r\n stratification: 'race',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateFemale',\r\n headerName: 'Female',\r\n stratification: 'sex',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateMale',\r\n headerName: 'Male',\r\n stratification: 'sex',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Unadjusted Rate of Hospitalizations for Heart Attack, Age 35 and Older',\r\n },\r\n ageAdjustedRate: {\r\n tabTitle: 'Age-Adjusted Rate',\r\n tabPath: 'ageAdjustedRate',\r\n contentType: 'chart',\r\n // No contentTitle for charts, will be controlled in \"chartTitle\" property below //\r\n exportTitle:\r\n 'Age-Adjusted Rate of Hospitalizations for Heart Attack Age 35 and Older',\r\n exportSubtitle: 'Age-adjusted rate per 10k population',\r\n chartType: 'trendline',\r\n selectable: false, // We don't want to display a dropdown for jurisdictions\r\n stratifiable: true,\r\n defaultStratification: undefined, // If this property is left undefined, stratifiable charts will default to non-stratified on page landing\r\n\r\n // The following array of stratifications will create a chart stratification button for each item:\r\n stratifications: [\r\n {\r\n title: 'Race/Ethnicity', // Name that appears for button\r\n field: 'race', // Must match stratification key name in json response returned from endpoint\r\n },\r\n {\r\n title: 'Sex', // Name that appears for button\r\n field: 'sex', // Must match stratification key name in json response returned from endpoint\r\n },\r\n ],\r\n defaultSelection: '000', // Only showing statewide for MI, but can't be undefined or an empty string\r\n defaultSetNames: ['stateRate'],\r\n baseline: '000', // 000 is the code used for statewide data at the DB\r\n info: {\r\n title:\r\n 'Age-adjusted Rate of Hospitalization for Heart Attack Among Persons 35 and Over per 10,000 Population',\r\n id: 'chart-mi-age-adjusted-rate-statewide',\r\n subtitle: '',\r\n },\r\n chartTitle:\r\n 'Age-Adjusted Rate of Hospitalizations for Heart Attack, Age 35 and Older',\r\n chartSubtitle:\r\n \"Data changed in late 2015. See 'About' for details.\",\r\n displayChartTitle: true,\r\n displayChartSubtitle: true,\r\n displayYAxisLabel: true,\r\n displayXAxisLabel: true,\r\n displayChartDiscontinuityGraphic: true,\r\n yAxisLabel: 'Age-adjusted rate per 10,000 population',\r\n xAxisLabel: 'Year',\r\n chartXAxisField: 'year', // should match field name used in incoming dataset\r\n chartDataSets: ['rate', 'stateRate'], // should match field names used in incoming dataset\r\n url: `${process.env.REACT_APP_EPHT_API}/MI/GetHospitalizationAgeAdjRateStatewide`,\r\n urlParams: [\r\n { param: 'jurisdiction', valueKey: 'code' },\r\n ], // this key can't be undefined, but note param is not in use for this display\r\n chartConfig: {\r\n mainDatasets: [\r\n {\r\n baseline: true,\r\n label: 'Statewide',\r\n setName: 'stateRate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n ],\r\n // Note: Baseline dataset should receive `baseline: true` property.\r\n // Additional note: The `order` property will dictate how lines stack on each other, in ascending order. Baseline should be given highest value to ensure it is colored correctly by Chart.js (gray)\r\n stratificationDatasets: [\r\n {\r\n label: 'White NH',\r\n setName: 'rateWhite',\r\n stratification: 'race',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: 'Black NH',\r\n setName: 'rateBlack',\r\n stratification: 'race',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: 'Hispanic',\r\n setName: 'rateHispanic',\r\n stratification: 'race',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 3,\r\n data: [],\r\n },\r\n {\r\n label: 'Other NH',\r\n setName: 'rateOther',\r\n stratification: 'race',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 4,\r\n data: [],\r\n },\r\n {\r\n label: 'All',\r\n setName: 'rateTotal',\r\n baseline: true,\r\n stratification: 'race',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 5,\r\n data: [],\r\n },\r\n {\r\n label: 'Female',\r\n setName: 'rateFemale',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: 'Male',\r\n setName: 'rateMale',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: 'All',\r\n baseline: true,\r\n setName: 'rateTotal',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 3,\r\n data: [],\r\n },\r\n ],\r\n },\r\n columnHeaders: [\r\n {\r\n field: 'year',\r\n headerName: 'Year',\r\n width: 85,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'stateRate',\r\n headerName: 'Statewide Rate',\r\n width: 160,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateWhite',\r\n headerName: 'White NH',\r\n stratification: 'race',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateBlack',\r\n headerName: 'Black NH',\r\n stratification: 'race',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateHispanic',\r\n headerName: 'Hispanic',\r\n stratification: 'race',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateOther',\r\n headerName: 'Other NH',\r\n stratification: 'race',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateFemale',\r\n headerName: 'Female',\r\n stratification: 'sex',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateMale',\r\n headerName: 'Male',\r\n stratification: 'sex',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Age-Adjusted Rate of Hospitalizations for Heart Attack, Age 35 and Older',\r\n },\r\n },\r\n about: ` `, // Fetched from the database\r\n resources: ` `, // Fetched from the database\r\n },\r\n programs: {\r\n defaultTabPath: 'ageAdjRatePM25',\r\n themeTitle: 'Programs',\r\n themePath: 'programs',\r\n tabs: {\r\n ageAdjRatePM25: {\r\n tabTitle: 'Age-Adj. Rate and Particulate Matter',\r\n tabPath: 'ageAdjRatePM25',\r\n contentType: 'map',\r\n contentTitle:\r\n 'Annual Concentration of Fine Particulate Matter (PM2.5) and Age-Adjusted Rate of Hospitalizations for Heart Attack, Age 35 and Older',\r\n exportTitle:\r\n 'Age-Adjusted Rate of Hospitalizations for Heart Attack Age 35 and Older',\r\n exportSubtitle:\r\n 'Age-adjusted rate per 10k population (2017)',\r\n mapSets: [\r\n {\r\n set: 'primary',\r\n geometry: 'County',\r\n outFields: ['County', 'Rate'],\r\n columnHeaders: [\r\n {\r\n field: 'County',\r\n headerName: 'County',\r\n flex: 1,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'Rate',\r\n headerName: 'Rate',\r\n flex: 1,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Age-Adjusted Rate of Hospitalizations for Heart Attack, Age 35 and Older',\r\n popupContent: {\r\n title: {\r\n field: 'FullCounty',\r\n },\r\n health: {\r\n name:\r\n 'Heart attack hospitalizations, rate per 10,000 population',\r\n field: 'Rate',\r\n unit: '',\r\n },\r\n },\r\n setLayers: [\r\n {\r\n id: 'county-mi-rate-over-35-programs',\r\n zIndexPosition: 'front', // Note: setting this to front is required to make the symbol clickable\r\n title:\r\n 'Rate of Hospitalizations for Heart Attack by County',\r\n subtitle:\r\n 'Age-adjusted rate per 10,000 population for ages 35 and older',\r\n yearKey: 'Year',\r\n sourceLayer: true,\r\n defaultVisible: true,\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/MI/MapServer/1`,\r\n },\r\n {\r\n id: 'county-mi-pm25',\r\n zIndexPosition: 'front', // Note: setting this to front is required to make the symbol clickable\r\n title:\r\n 'Fine Particulate Matter (PM2.5) Annual Design Value',\r\n subtitle:\r\n 'Annual mean concentration, averaged over three consecutive years in micrograms per cubic meter (μg/m3). Values at or below 12.0 μg/m3 meet the national standard.',\r\n yearKey: 'Year',\r\n sourceLayer: false, // Layer is not used in the table\r\n defaultVisible: true,\r\n referenceLayer: true,\r\n toggleable: true, // Sets if the layer is toggleable within the legend\r\n content: {\r\n title: 'Label',\r\n line1: 'PM2.5 annual design value:',\r\n line2A: 'ANNUAL_DESIGN_VALUE',\r\n line2B:\r\n ' micrograms per cubic meter (μg/m3)',\r\n },\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/MI/MapServer/0`,\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n },\r\n about: ` `, // Fetched from the database\r\n resources: ` `, // Fetched from the database\r\n },\r\n },\r\n },\r\n copd: {\r\n topicTitle: 'Chronic Obstructive Pulmonary Disorder',\r\n topicPath: 'copd',\r\n category: 'health',\r\n defaultTabPath: 'edTrends',\r\n overview:\r\n '

Chronic Obstructive Pulmonary Disease (COPD) is a group of lung diseases that causes airflow blockage and breathing problems. COPD includes two main conditions, chronic bronchitis and emphysema. COPD can be caused by genetic conditions, smoking, respiratory infection, or chronic exposure to environmental and occupational pollutants. The most significant and preventable cause of COPD is smoking.

',\r\n aboutData: `
Data Facts Chronic Obstructive Pulmonary Disorder
Why these data are important Chronic Obstructive Pulmonary Disease (COPD) describes a group of diseases that restrict air flow and cause trouble breathing, including emphysema and chronic bronchitis. COPD is a leading cause of death in the US. Tobacco is a major cause of COPD. Exposure to air pollutants is also associated with COPD-related emergency department visits and hospitalizations.
Data Sources Maryland Health Services Cost Review Commission
Maryland Behavioral Risk Factor Surveillance System
Years available 2010-most recent data available (usually 1-2 years prior to current date)
Data source description Hospital billing data from inpatient discharges and emergency department encounters.
Standardized population-level estimates of health risk behaviors reported by non-instutionalized adults.
What's reported Inpatient (IP) hospitalizations; Emergency department (ED) visits; adult smoking rates
How it's reported Crude and age-adjusted rates
Level of geographic detail State and county
Level of demographic detail Race/ethnicity and sex
Data disclaimers

HSCRC revised the methodology for coding race/ethnicity in 2013; therefore, race/ethnicity data from 2014 and later may not be comparable to previous years.

ICD-9 hospital billing codes transitioned to ICD-10 billing codes in 2015; therefore, data from 2016 and later may not be comparable to previous years.
The summary data provided on this website are downloadable. For more detailed data, refer to the data sources. Yes
Environmental Health Helpline 1-866-703-3266
mdh.envhealth@maryland.gov
Last Updated 10/8/2024
Frequency of data updates Annual
Data suppression rules HSCRC:

County level: suppression is for non-zero numerators <11 and this is reflected in data starting with 2021. Prior to 2021, suppression was for non-zero numerators <6. There is no denominator requirement.

BRFSS:

Denominator of <50 respondents and/or relative standard error >= 30.0%

`,\r\n themeOverviews: [\r\n {\r\n theme: 'Status',\r\n text:\r\n 'Provides a detailed view of COPD over time throughout Maryland by area.',\r\n },\r\n {\r\n theme: 'Disparities',\r\n text:\r\n 'Examines the distribution of the burden of COPD in Maryland.',\r\n },\r\n {\r\n theme: 'More Data',\r\n text:\r\n 'Provides a detailed view of Nationally Consistent Data and Measures (NCDMs) for COPD as specified by the Centers for Disease Control and Prevention (CDC). All additional data are available for download.',\r\n },\r\n ],\r\n countySuppressionRules: {\r\n range: '1 to 10',\r\n populationMin: '5,000',\r\n },\r\n subCountySuppressionRules: null,\r\n omitNcdmData: false, // Prevents the Download All NCDM button from displaying and skips the call to get NCDM configs\r\n themes: {\r\n status: {\r\n defaultTabPath: 'hospitalizations',\r\n themeTitle: 'Status',\r\n themePath: 'status',\r\n tabs: {\r\n hospitalizations: {\r\n tabTitle: 'Hospitalizations',\r\n tabPath: 'hospitalizations',\r\n contentType: 'map',\r\n contentTitle:\r\n 'Age-Adjusted Rate of Hospitalizations for COPD, Age 25 and Older',\r\n exportTitle:\r\n 'Age-Adjusted Rate of Hospitalizations for COPD Age 25 and Older',\r\n exportSubtitle: 'Age-adjusted rate per 10k population',\r\n mapSets: [\r\n {\r\n set: 'primary',\r\n geometry: 'County',\r\n outFields: ['County', 'Rate'],\r\n columnHeaders: [\r\n {\r\n field: 'County',\r\n headerName: 'County',\r\n flex: 1,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'Rate',\r\n headerName: 'Rate',\r\n flex: 1,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Age-Adjusted Rate of Hospitalizations for COPD, Age 25 and Older',\r\n popupContent: {\r\n title: {\r\n field: 'FullCounty',\r\n },\r\n health: {\r\n name:\r\n 'COPD hospitalizations per 10,000 population age 25+',\r\n field: 'Rate',\r\n unit: '',\r\n },\r\n },\r\n setLayers: [\r\n {\r\n id: 'county-copd-age-adjusted-rate',\r\n zIndexPosition: 'front', // Note: setting this to front is required to make the symbol clickable\r\n title:\r\n 'Rate of Hospitalizations for COPD by County',\r\n subtitle:\r\n 'Age-adjusted rate per 10,000 population age 25 and older',\r\n yearKey: 'Year',\r\n sourceLayer: true,\r\n defaultVisible: true,\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/COPD/MapServer/0`,\r\n },\r\n ],\r\n },\r\n ],\r\n tableTitle: 'Rate of Hospitalizations for Heat Stress',\r\n },\r\n },\r\n about: ` `, // Fetched from the database\r\n resources: ` `, // Fetched from the database\r\n },\r\n disparities: {\r\n defaultTabPath: 'hospitalizationTrend',\r\n themeTitle: 'Disparities',\r\n themePath: 'disparities',\r\n tabs: {\r\n hospitalizationTrend: {\r\n tabTitle: 'Hospitalization Trend',\r\n tabPath: 'hospitalizationTrend',\r\n contentType: 'chart',\r\n // No contentTitle for charts, will be controlled in \"chartTitle\" property below //\r\n exportTitle:\r\n 'Age-Adjusted Rate of Hospitalizations for COPD, Age 25 and Older',\r\n exportSubtitle: 'Age-adjusted rate per 10k population',\r\n chartType: 'trendline',\r\n selectable: false, // We don't want to display a dropdown for jurisdictions\r\n stratifiable: true,\r\n defaultStratification: undefined, // If this property is left undefined, stratifiable charts will default to non-stratified on page landing\r\n\r\n // The following array of stratifications will create a chart stratification button for each item:\r\n stratifications: [\r\n {\r\n title: 'Race/Ethnicity', // Name that appears for button\r\n field: 'race', // Must match stratification key name in json response returned from endpoint\r\n },\r\n {\r\n title: 'Sex', // Name that appears for button\r\n field: 'sex', // Must match stratification key name in json response returned from endpoint\r\n },\r\n ],\r\n defaultSelection: '000', // Only showing statewide for COPD, but can't be undefined or an empty string\r\n defaultSetNames: ['stateRate'],\r\n baseline: '000', // 000 is the code used for statewide data at the DB\r\n info: {\r\n title:\r\n 'Age-adjusted Rate of Hospitalization for COPD Among Persons 25 and Over per 10,000 Population',\r\n id: 'chart-copd-age-adjusted-rate',\r\n subtitle: '',\r\n },\r\n chartTitle:\r\n 'Age-Adjusted Rate of Hospitalizations for COPD, Age 25 and Older',\r\n chartSubtitle:\r\n \"Data changed in late 2015. See 'About' for details.\",\r\n displayChartTitle: true,\r\n displayChartSubtitle: true,\r\n displayYAxisLabel: true,\r\n displayXAxisLabel: true,\r\n displayChartDiscontinuityGraphic: true,\r\n yAxisLabel: 'Age-adjusted rate per 10,000 population',\r\n xAxisLabel: 'Year',\r\n chartXAxisField: 'year', // should match field name used in incoming dataset\r\n chartDataSets: ['rate', 'stateRate'], // should match field names used in incoming dataset\r\n url: `${process.env.REACT_APP_EPHT_API}/COPD/GetHospitalizationAgeAdjRate`,\r\n urlParams: [\r\n { param: 'jurisdiction', valueKey: 'code' },\r\n ], // this key can't be undefined, but note param is not in use for this display\r\n chartConfig: {\r\n mainDatasets: [\r\n {\r\n baseline: true,\r\n label: 'Statewide',\r\n setName: 'stateRate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n ],\r\n // Note: Baseline dataset should receive `baseline: true` property.\r\n // Additional note: The `order` property will dictate how lines stack on each other, in ascending order. Baseline should be given highest value to ensure it is colored correctly by Chart.js (gray)\r\n stratificationDatasets: [\r\n {\r\n label: 'White NH',\r\n setName: 'rateWhite',\r\n stratification: 'race',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: 'Black NH',\r\n setName: 'rateBlack',\r\n stratification: 'race',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: 'Hispanic',\r\n setName: 'rateHispanic',\r\n stratification: 'race',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 3,\r\n data: [],\r\n },\r\n {\r\n label: 'Other NH',\r\n setName: 'rateOther',\r\n stratification: 'race',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 4,\r\n data: [],\r\n },\r\n {\r\n label: 'All',\r\n setName: 'rateTotal',\r\n baseline: true,\r\n stratification: 'race',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 5,\r\n data: [],\r\n },\r\n {\r\n label: 'Female',\r\n setName: 'rateFemale',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: 'Male',\r\n setName: 'rateMale',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: 'All',\r\n baseline: true,\r\n setName: 'rateTotal',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 3,\r\n data: [],\r\n },\r\n ],\r\n },\r\n columnHeaders: [\r\n {\r\n field: 'year',\r\n headerName: 'Year',\r\n width: 85,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'stateRate',\r\n headerName: 'Statewide Rate',\r\n width: 160,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateWhite',\r\n headerName: 'White NH',\r\n stratification: 'race',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateBlack',\r\n headerName: 'Black NH',\r\n stratification: 'race',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateHispanic',\r\n headerName: 'Hispanic',\r\n stratification: 'race',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateOther',\r\n headerName: 'Other NH',\r\n stratification: 'race',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateFemale',\r\n headerName: 'Female',\r\n stratification: 'sex',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateMale',\r\n headerName: 'Male',\r\n stratification: 'sex',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Age-Adjusted Rate of Hospitalizations for COPD, Age 25 and Older',\r\n },\r\n currentSmokers: {\r\n tabTitle: 'Current Smokers',\r\n tabPath: 'currentSmokers',\r\n contentType: 'map',\r\n contentTitle:\r\n 'Smoking Rate and Age-Adjusted Rate of Hospitalizations for COPD, Age 25 and Older',\r\n exportTitle:\r\n 'Smoking Rate and Age-Adjusted Rate of Hospitalizations for COPD Age 25 and Older',\r\n exportSubtitle:\r\n 'Percent of population age 25 and older that were current smokers in 2016 and age-adjusted COPD rate per 10k population age 25 and older',\r\n mapSets: [\r\n {\r\n set: 'primary',\r\n geometry: 'County',\r\n outFields: [\r\n 'County',\r\n 'Rate',\r\n 'HousingYear',\r\n 'Percent_Smokers',\r\n ],\r\n columnHeaders: [\r\n {\r\n field: 'County',\r\n headerName: 'County',\r\n width: 140,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'Rate',\r\n headerName: 'Rate',\r\n exportHeaderName: 'Rate',\r\n width: 140,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'Percent_Smokers',\r\n headerName: 'Smokers (%)',\r\n exportHeaderName:\r\n 'Percent Current Smokers',\r\n width: 210,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle: 'Smoking Rate and COPD',\r\n popupContent: {\r\n title: {\r\n field: 'FullCounty',\r\n },\r\n health: {\r\n name:\r\n 'COPD hospitalizations per 10,000 population age 25+',\r\n field: 'Rate',\r\n unit: '',\r\n },\r\n environment: {\r\n name:\r\n 'Percent of population age 25 and older that smokes',\r\n field: 'Percent_Smokers',\r\n unit: '%',\r\n className: 'field-value',\r\n },\r\n },\r\n setLayers: [\r\n {\r\n id: 'county-point-current-smokers',\r\n\r\n zIndexPosition: 'front',\r\n title: 'Smoking Rate by County',\r\n subtitle:\r\n '% of population age 25 and older that were current smokers (BRFSS)',\r\n yearKey: 'BRFSS_Year',\r\n defaultVisible: true,\r\n toggleable: true, // Sets if the layer is toggleable within the legend\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/COPD/MapServer/1`,\r\n },\r\n {\r\n id: 'county-choropleth-copd',\r\n sourceLayer: true,\r\n zIndexPosition: 'back',\r\n title:\r\n 'Rate of Hospitalizations for COPD by County',\r\n yearKey: 'Year',\r\n subtitle:\r\n 'Age-adjusted rate per 10,000 population for ages 25 and older',\r\n defaultVisible: true,\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/COPD/MapServer/0`,\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n },\r\n about: ` `, // Fetched from the database\r\n resources: ` `, // Fetched from the database\r\n },\r\n moredata: {\r\n defaultTabPath: 'ncdms',\r\n themeTitle: 'More Data',\r\n themePath: 'moredata',\r\n tabs: {\r\n ncdms: {\r\n tabTitle: '',\r\n tabPath: 'ncdms',\r\n contentType: 'ncdm',\r\n defaultTab: true,\r\n textHeader: 'Nationally Consistent Data and Measures',\r\n textSubheading: 'Sub-header',\r\n textBody: '',\r\n },\r\n },\r\n about: ` `, // Fetched from the database\r\n resources: ` `, // Fetched from the database\r\n },\r\n },\r\n },\r\n co: {\r\n topicTitle: 'Carbon Monoxide Poisoning',\r\n topicPath: 'co',\r\n category: 'health',\r\n defaultTabPath: 'edTrends',\r\n overview:\r\n '

Carbon Monoxide (CO) is a poisonous gas made by the burning of fuel or other materials. CO has no smell or taste, and it can kill in very small amounts. CO is made by all fuel-burning devices and vehicles, including portable generators, unvented kerosene and gas space heaters, leaking chimneys, and furnaces and gas stoves. CO poisoning can be prevented through education, awareness, and simple protective measures including CO detectors and proper installation and maintenance of all combustion devices.

',\r\n aboutData: `
Data Facts Carbon Monoxide Poisoning
Why these data are important Carbon Monoxide (CO) is often called the “Silent Killer” because of its ability to take lives quickly and quietly when its victims never even knew they were at risk. It is undetectable to humans, being both tasteless and odorless, and it can kill within minutes. CO claims hundreds of lives each year, and survivors of CO poisoning can be left with psychological and neurological symptoms. CO poisoning can be prevented through education, awareness, and simple protective measures including CO detectors and proper installation and maintenance of all combustion devices.
Data Sources Maryland Health Services Cost Review Commission
Years available 2010-most recent data available (usually 1-2 years prior to current date)
Data source description Hospital billing data from inpatient discharges and emergency department encounters
What's reported Inpatient (IP) hospitalizations; Emergency department (ED) visits
How it's reported Age-adjusted rates
Level of geographic detail State and county
Level of demographic detail N/A
Data disclaimers

HSCRC revised the methodology for coding race/ethnicity in 2013; therefore, race/ethnicity data from 2014 and later may not be comparable to previous years.

ICD-9 hospital billing codes transitioned to ICD-10 billing codes in 2015; therefore, data from 2016 and later may not be comparable to previous years.
The summary data provided on this website are downloadable. For more detailed data, refer to the data sources. Yes
Environmental Health Helpline 1-866-703-3266
mdh.envhealth@maryland.gov
Last Updated 10/8/2024
Frequency of data updates Annual
Data suppression rules HSCRC:

County level: suppression is for non-zero numerators <11 and this is reflected in data starting with 2021. Prior to 2021, suppression was for non-zero numerators <6. There is no denominator requirement.

`,\r\n themeOverviews: [\r\n {\r\n theme: 'Status',\r\n text:\r\n 'Provides a detailed view of carbon monoxide poisoning over time throughout Maryland by area.',\r\n },\r\n ],\r\n countySuppressionRules: {\r\n range: '1 to 10',\r\n populationMin: '5,000',\r\n },\r\n subCountySuppressionRules: null,\r\n omitNcdmData: true, // Prevents the Download All NCDM button from displaying and skips the call to get NCDM configs\r\n themes: {\r\n status: {\r\n defaultTabPath: 'edVisits',\r\n themeTitle: 'Status',\r\n themePath: 'status',\r\n tabs: {\r\n edVisits: {\r\n tabTitle: 'ED Visits',\r\n tabPath: 'edVisits',\r\n contentType: 'map',\r\n contentTitle:\r\n 'Age-Adjusted Rate of Emergency Department (ED) Visits for Carbon Monoxide (CO) Poisoning',\r\n exportTitle:\r\n 'Age-Adjusted Rate of Emergency Department (ED) Visits for Carbon Monoxide (CO) Poisoning',\r\n exportSubtitle: 'Age-adjusted rate per 100k population',\r\n mapSets: [\r\n {\r\n set: 'primary',\r\n geometry: 'County',\r\n outFields: ['County', 'Rate'],\r\n columnHeaders: [\r\n {\r\n field: 'County',\r\n headerName: 'County',\r\n flex: 1,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'Rate',\r\n headerName: 'Rate',\r\n flex: 1,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Age-Adjusted Rate of Emergency Department (ED) Visits for Carbon Monoxide (CO) Poisoning',\r\n popupContent: {\r\n title: {\r\n field: 'FullCounty',\r\n },\r\n health: {\r\n name:\r\n 'ED Visits for CO Poisoning per 100,000 population',\r\n field: 'Rate',\r\n unit: '',\r\n },\r\n },\r\n setLayers: [\r\n {\r\n id: 'county-co-ed',\r\n zIndexPosition: 'front', // Note: setting this to front is required to make the symbol clickable\r\n title:\r\n 'Rate of ED Visits for Carbon Monoxide Poisoning by County',\r\n subtitle:\r\n 'Age-adjusted rate per 100,000 population',\r\n yearKey: 'Year',\r\n sourceLayer: true,\r\n defaultVisible: true,\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/CO/MapServer/0`,\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n hospitalizations: {\r\n tabTitle: 'Hospital­izations', // The '­ is to envoke the soft-hyphens rule when using 'hyphens: manual' within the CSS file.\r\n tabPath: 'hospitalizations',\r\n contentType: 'map',\r\n contentTitle:\r\n 'Age-Adjusted Rate of Hospitalizations for Carbon Monoxide (CO) Poisoning',\r\n exportTitle:\r\n 'Age-Adjusted Rate of Hospitalizations for Carbon Monoxide (CO) Poisoning',\r\n exportSubtitle: 'Age-adjusted rate per 100k population',\r\n mapSets: [\r\n {\r\n set: 'primary',\r\n geometry: 'County',\r\n outFields: ['County', 'Rate'],\r\n columnHeaders: [\r\n {\r\n field: 'County',\r\n headerName: 'County',\r\n flex: 1,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'Rate',\r\n headerName: 'Rate',\r\n flex: 1,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Age-Adjusted Rate of Hospitalizations for Carbon Monoxide (CO) Poisoning',\r\n popupContent: {\r\n title: {\r\n field: 'FullCounty',\r\n },\r\n health: {\r\n name:\r\n 'Hospitalizations for CO Poisoning per 100,000 population',\r\n field: 'Rate',\r\n unit: '',\r\n },\r\n },\r\n setLayers: [\r\n {\r\n id: 'county-co-hospitalization',\r\n zIndexPosition: 'front', // Note: setting this to front is required to make the symbol clickable\r\n title:\r\n 'Rate of Hospitalizations for Carbon Monoxide Poisoning by County',\r\n subtitle:\r\n 'Age-adjusted rate per 100,000 population',\r\n yearKey: 'Year',\r\n sourceLayer: true,\r\n defaultVisible: true,\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/CO/MapServer/1`,\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n edTrend: {\r\n tabTitle: 'ED Visit Trend',\r\n tabPath: 'edTrend',\r\n contentType: 'chart',\r\n // No contentTitle for charts, will be controlled in \"chartTitle\" property below //\r\n exportTitle:\r\n 'Age-Adjusted Rate of Emergency Department (ED) Visits for Carbon Monoxide (CO) Poisoning',\r\n exportSubtitle: 'Age-adjusted rate per 100k population',\r\n chartType: 'trendline',\r\n selectable: true,\r\n stratifiable: true,\r\n defaultStratification: undefined, // If this property is left undefined, stratifiable charts will default to non-stratified on page landing\r\n\r\n // The following array of stratifications will create a chart stratification button for each item:\r\n stratifications: [\r\n {\r\n title: 'Cause', // Name that appears for button\r\n field: 'cause', // Must match stratification key name in json response returned from endpoint\r\n },\r\n ],\r\n defaultSelection: '000', // Only showing statewide for MI, but can't be undefined or an empty string\r\n defaultSetNames: ['stateRate'],\r\n baseline: '000', // 000 is the code used for statewide data at the DB\r\n info: {\r\n title:\r\n 'Age-Adjusted Rate of Emergency Department (ED) Visits for Carbon Monoxide (CO) Poisoning',\r\n id: 'chart-co-ed-rate',\r\n subtitle: '',\r\n },\r\n chartTitle:\r\n 'Age-Adjusted Rate of Emergency Department (ED) Visits for Carbon Monoxide (CO) Poisoning',\r\n chartSubtitle:\r\n \"Data changed in late 2015. See 'About' for details.\",\r\n displayChartTitle: true,\r\n displayChartSubtitle: true,\r\n displayYAxisLabel: true,\r\n displayXAxisLabel: true,\r\n displayChartDiscontinuityGraphic: true,\r\n yAxisLabel: 'Age-adjusted rate per 100,000 population',\r\n xAxisLabel: 'Year',\r\n chartXAxisField: 'year', // should match field name used in incoming dataset\r\n chartDataSets: ['rate', 'stateRate'], // should match field names used in incoming dataset\r\n url: `${process.env.REACT_APP_EPHT_API}/CO/GetEDVisitRate`,\r\n urlParams: [\r\n { param: 'jurisdiction', valueKey: 'code' },\r\n ], // this key can't be undefined, not in use for this display\r\n chartConfig: {\r\n mainDatasets: [\r\n {\r\n label: 'County',\r\n setName: 'rate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n baseline: true,\r\n label: 'Statewide',\r\n setName: 'stateRate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n ],\r\n // Note: Baseline dataset should receive `baseline: true` property.\r\n // Additional note: The `order` property will dictate how lines stack on each other, in ascending order. Baseline should be given highest value to ensure it is colored correctly by Chart.js (gray)\r\n stratificationDatasets: [\r\n {\r\n label: 'Unintentional, fire related',\r\n setName: 'rateUnintentionalFire',\r\n stratification: 'cause',\r\n title: 'Cause',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: 'Unintentional, non-fire related',\r\n setName: 'rateUnintentionalNonFire',\r\n stratification: 'cause',\r\n title: 'Cause',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: 'Unknown mechanism or intent',\r\n setName: 'rateUnknown',\r\n stratification: 'cause',\r\n title: 'Cause',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 3,\r\n data: [],\r\n },\r\n {\r\n label: 'All',\r\n setName: 'rateTotal',\r\n baseline: true,\r\n stratification: 'cause',\r\n title: 'Cause',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 4,\r\n data: [],\r\n },\r\n ],\r\n },\r\n columnHeaders: [\r\n {\r\n field: 'year',\r\n headerName: 'Year',\r\n width: 85,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate',\r\n headerName: 'County Rate',\r\n width: 134,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'stateRate',\r\n headerName: 'Statewide Rate',\r\n width: 160,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateUnintentionalFire',\r\n headerName: 'Unintentional, fire related',\r\n stratification: 'cause',\r\n width: 200,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateUnintentionalNonFire',\r\n headerName: 'Unintentional, non-fire related',\r\n stratification: 'cause',\r\n width: 200,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateUnknown',\r\n headerName: 'Unknown mechanism or intent',\r\n stratification: 'cause',\r\n width: 200,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Age-Adjusted Rate of Emergency Department (ED) Visits for Carbon Monoxide (CO) Poisoning',\r\n },\r\n hospitalTrend: {\r\n tabTitle: 'Hospital Trend',\r\n tabPath: 'hospitalTrend',\r\n contentType: 'chart',\r\n // No contentTitle for charts, will be controlled in \"chartTitle\" property below //\r\n exportTitle:\r\n 'Age-Adjusted Rate of Hospitalizations for Carbon Monoxide (CO) Poisoning',\r\n exportSubtitle: 'Age-adjusted rate per 100k population',\r\n chartType: 'trendline',\r\n selectable: true,\r\n stratifiable: true,\r\n defaultStratification: undefined, // If this property is left undefined, stratifiable charts will default to non-stratified on page landing\r\n\r\n // The following array of stratifications will create a chart stratification button for each item:\r\n stratifications: [\r\n {\r\n title: 'Cause', // Name that appears for button\r\n field: 'cause', // Must match stratification key name in json response returned from endpoint\r\n },\r\n ],\r\n defaultSelection: '000', // Only showing statewide for MI, but can't be undefined or an empty string\r\n defaultSetNames: ['stateRate'],\r\n baseline: '000', // 000 is the code used for statewide data at the DB\r\n info: {\r\n title:\r\n 'Age-Adjusted Rate of Hospitalizations for Carbon Monoxide (CO) Poisoning',\r\n id: 'chart-co-hospitalization-rate',\r\n subtitle: '',\r\n },\r\n chartTitle:\r\n 'Age-Adjusted Rate of Hospitalizations for Carbon Monoxide (CO) Poisoning',\r\n chartSubtitle:\r\n \"Data changed in late 2015. See 'About' for details.\",\r\n displayChartTitle: true,\r\n displayChartSubtitle: true,\r\n displayYAxisLabel: true,\r\n displayXAxisLabel: true,\r\n displayChartDiscontinuityGraphic: true,\r\n yAxisLabel: 'Age-adjusted rate per 100,000 population',\r\n xAxisLabel: 'Year',\r\n chartXAxisField: 'year', // should match field name used in incoming dataset\r\n chartDataSets: ['rate', 'stateRate'], // should match field names used in incoming dataset\r\n url: `${process.env.REACT_APP_EPHT_API}/CO/GetHospitalizationRate`,\r\n urlParams: [\r\n { param: 'jurisdiction', valueKey: 'code' },\r\n ], // this key can't be undefined, not in use for this display\r\n chartConfig: {\r\n mainDatasets: [\r\n {\r\n label: 'County',\r\n setName: 'rate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n baseline: true,\r\n label: 'Statewide',\r\n setName: 'stateRate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n ],\r\n // Note: Baseline dataset should receive `baseline: true` property.\r\n // Additional note: The `order` property will dictate how lines stack on each other, in ascending order. Baseline should be given highest value to ensure it is colored correctly by Chart.js (gray)\r\n stratificationDatasets: [\r\n {\r\n label: 'Unintentional, fire related',\r\n setName: 'rateUnintentionalFire',\r\n stratification: 'cause',\r\n title: 'Cause',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: 'Unintentional, non-fire related',\r\n setName: 'rateUnintentionalNonFire',\r\n stratification: 'cause',\r\n title: 'Cause',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: 'Unknown mechanism or intent',\r\n setName: 'rateUnknown',\r\n stratification: 'cause',\r\n title: 'Cause',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 3,\r\n data: [],\r\n },\r\n {\r\n label: 'All',\r\n setName: 'rateTotal',\r\n baseline: true,\r\n stratification: 'cause',\r\n title: 'Cause',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 4,\r\n data: [],\r\n },\r\n ],\r\n },\r\n columnHeaders: [\r\n {\r\n field: 'year',\r\n headerName: 'Year',\r\n width: 85,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate',\r\n headerName: 'County Rate',\r\n width: 134,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'stateRate',\r\n headerName: 'Statewide Rate',\r\n width: 160,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateUnintentionalFire',\r\n headerName: 'Unintentional, fire related',\r\n stratification: 'cause',\r\n width: 200,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateUnintentionalNonFire',\r\n headerName: 'Unintentional, non-fire related',\r\n stratification: 'cause',\r\n width: 200,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateUnknown',\r\n headerName: 'Unknown mechanism or intent',\r\n stratification: 'cause',\r\n width: 200,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Age-Adjusted Rate of Hospitalizations for Carbon Monoxide (CO) Poisoning',\r\n },\r\n },\r\n about: ` `, // Fetched from the database\r\n resources: ` `, // Fetched from the database\r\n },\r\n },\r\n },\r\n airQuality: {\r\n topicTitle: 'Air Quality',\r\n topicPath: 'airQuality',\r\n category: 'environmental',\r\n defaultTabPath: 'status',\r\n overview: `

Air quality is a major public health and environmental concern. Air pollution is the contamination of the air by any human-made or natural agent. Exposure to air pollution has been associated with health problems such as asthma, increased emergency department (ED) visits and hospital stays for breathing and heart problems, and increases in illnesses such as pneumonia and bronchitis.

The Maryland Department of the Environment’s (MDE) Ambient Air Monitoring Network operates 24 air monitoring sites around the state and uses a variety of monitoring techniques to address pollutants circulating in the area. Over the past 30 years, Maryland’s air quality has continually improved with monitoring and collaborative efforts with organizations like the U.S. Environmental Protection Agency (EPA), the Ozone Transport Commission (OTC), and other states to develop policy and regulations directed at improving air quality.

`,\r\n aboutData: `
Data Facts Air Quality
Why these data are important Air quality in Maryland has vastly improved over the past few decades, but air pollution continues to threaten the health of communities throughout the state. Exposure to toxic air pollutants including ozone and small particles can result in both short and long term health consequences, contributing to health problems such as asthma and heart disease. Monitoring air quality is essential to track changes in pollution over time, identify localities with disproportionately higher risks of exposure, and assess the potential effects on human health.
Data Sources Maryland Department of the Environment Ambient Air Monitoring Program
Years available 2000-most recent data available (usually 1-2 years prior to current date)
Data source description Ground-level criteria air pollutant concentrations, Ambient Air Monitoring Network data, and high impact air pollution source locations
What's reported Eight-hour average ozone concentration; Daily average fine particulate matter (PM2.5) concentration; Annual average PM2.5 concentration; Ambient Air Monitoring Site locations; Locations of High Impact Air Pollution Sources Permitted in Maryland; Percent of days with PM2.5 over the National Ambient Air Quality Standard; Number of days with maximum 8-hour average ozone concentration over the National Ambient Air Quality Standard
How it's reported Concentrations (ppb); Concentrations (μg/m3); point locations; percentages; Counts
Level of geographic detail State, county and point location
Level of demographic detail N/A
Data disclaimers

Not every jurisdiction has an air monitoring station. Most of the stations are concentrated in the urban/industrial areas that have the highest population and number of pollutant sources.

Data is mapped to show statewide changes.
The summary data provided on this website are downloadable. For more detailed data, refer to the data sources. Yes
Environmental Health Helpline 1-866-703-3266
mdh.envhealth@maryland.gov
Last Updated 6/14/2023
Frequency of data updates Annual
Data suppression rules

Only counties that had at least 75% of the days monitored during the county's ozone season were considered valid and included in the data.

For PM2.5, only counties with year-round monitoring were considered valid and included.

Not all jurisdictions have air monitoring stations. Jurisdictions without stations are noted as Missing* in data tables.

`,\r\n themeOverviews: [\r\n {\r\n theme: 'Status',\r\n text:\r\n 'Provides a detailed view of air quality over time throughout Maryland.',\r\n },\r\n {\r\n theme: 'Disparities',\r\n text:\r\n 'Provides geographic distribution of air emission sources throughout Maryland.',\r\n },\r\n {\r\n theme: 'More Data',\r\n text:\r\n 'Provides a detailed view of Nationally Consistent Data and Measures (NCDMs) for air quality as specified by the Centers for Disease Control and Prevention (CDC). All additional data are available for download.',\r\n },\r\n ],\r\n countySuppressionRules: {\r\n range: '1 to 10',\r\n populationMin: '5,000',\r\n },\r\n subCountySuppressionRules: null,\r\n omitNcdmData: false, // Prevents the Download All NCDM button from displaying and skips the call to get NCDM configs. TODO: set to true when the endpoint is configured.\r\n themes: {\r\n status: {\r\n defaultTabPath: 'ozone',\r\n themeTitle: 'Status',\r\n themePath: 'status',\r\n tabs: {\r\n ozone: {\r\n tabTitle: 'Ozone',\r\n tabPath: 'ozone',\r\n contentType: 'map',\r\n timeSlider: true, // TODO: May need to re-evalutate this approach as the section is built out.\r\n contentTitle: 'Ozone Design Values 2000-2020',\r\n exportTitle: 'Ozone Design Values 2000-2020',\r\n exportSubtitle: '',\r\n mapSets: [\r\n {\r\n set: 'primary',\r\n geometry: 'County',\r\n outFields: ['County', 'Rate'],\r\n columnHeaders: [\r\n {\r\n field: 'County',\r\n headerName: 'County',\r\n flex: 1,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'Rate',\r\n headerName: 'Rate',\r\n flex: 1,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n popupContent: {\r\n title: {\r\n field: 'FullCounty',\r\n },\r\n additional: {\r\n name:\r\n 'You cannot zoom into this map. Please see \"About\" for more information.',\r\n },\r\n },\r\n setLayers: [\r\n {\r\n id: 'ozone-2000',\r\n zIndexPosition: 'front',\r\n title: '8-Hour Ozone Design Value',\r\n yearKey: 'Year',\r\n subtitle:\r\n 'Values of 70 parts per billion (ppb) and below meet the 2015 standard (2000-2020)',\r\n defaultVisible: true,\r\n omitCommunityProfile: true,\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/AirQualityOzone/MapServer/2000`,\r\n },\r\n {\r\n id: 'ozone-2005',\r\n zIndexPosition: 'back',\r\n title: 'Ozone Data 2000-2020',\r\n yearKey: 'Year',\r\n subtitle:\r\n 'Values of 70 parts per billion (ppb) and below meet the 2015 standard (2000-2020)',\r\n defaultVisible: true,\r\n omitCommunityProfile: true,\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/AirQualityOzone/MapServer/2005`,\r\n },\r\n {\r\n id: 'ozone-2010',\r\n zIndexPosition: 'back',\r\n title: 'Ozone Data 2000-2020',\r\n yearKey: 'Year',\r\n subtitle:\r\n 'Values of 70 parts per billion (ppb) and below meet the 2015 standard (2000-2020)',\r\n defaultVisible: true,\r\n omitCommunityProfile: true,\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/AirQualityOzone/MapServer/2010`,\r\n },\r\n {\r\n id: 'ozone-2015',\r\n zIndexPosition: 'back',\r\n title: 'Ozone Data 2000-2020',\r\n yearKey: 'Year',\r\n subtitle:\r\n 'Values of 70 parts per billion (ppb) and below meet the 2015 standard (2000-2020)',\r\n defaultVisible: true,\r\n omitCommunityProfile: true,\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/AirQualityOzone/MapServer/2015`,\r\n },\r\n {\r\n id: 'ozone-2020',\r\n zIndexPosition: 'back',\r\n title: 'Ozone Data 2000-2020',\r\n yearKey: 'Year',\r\n subtitle:\r\n 'Values of 70 parts per billion (ppb) and below meet the 2015 standard (2000-2020)',\r\n defaultVisible: true,\r\n omitCommunityProfile: true,\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/AirQualityOzone/MapServer/2020`,\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n pm25Daily: {\r\n tabTitle: 'PM 2.5 Daily',\r\n tabPath: 'pm25Daily',\r\n contentType: 'map',\r\n timeSlider: true,\r\n contentTitle:\r\n 'Fine Particulate Matter (PM2.5) Daily Design Values 2001 - 2020 ',\r\n exportTitle:\r\n 'Fine Particulate Matter (PM2.5) Daily Design Values 2001 - 2020 ',\r\n exportSubtitle: '',\r\n mapSets: [\r\n {\r\n set: 'primary',\r\n geometry: 'County',\r\n outFields: ['County', 'Rate'],\r\n columnHeaders: [\r\n {\r\n field: 'County',\r\n headerName: 'County',\r\n flex: 1,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'Rate',\r\n headerName: 'Rate',\r\n flex: 1,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Age-Adjusted Rate of Emergency Department (ED) Visits for Carbon Monoxide (CO) Poisoning',\r\n popupContent: {\r\n title: {\r\n field: 'FullCounty',\r\n },\r\n additional: {\r\n name:\r\n 'You cannot zoom into this map. Please see \"About\" for more information.',\r\n },\r\n },\r\n setLayers: [\r\n {\r\n id: 'PM25-Daily-2001',\r\n zIndexPosition: 'back',\r\n title:\r\n 'Daily (24-hour) PM2.5 Design Value',\r\n yearKey: 'Year',\r\n subtitle:\r\n 'Values of 35 micrograms per cubic meter (μg/m3) and below meet the 2006 standard (2001-2020)',\r\n defaultVisible: true,\r\n omitCommunityProfile: true,\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/AirQualityPM25Daily/MapServer/2001`,\r\n },\r\n {\r\n id: 'PM25-Daily-2005',\r\n zIndexPosition: 'back',\r\n title:\r\n 'Daily (24-hour) PM2.5 Design Value',\r\n yearKey: 'Year',\r\n subtitle:\r\n 'Values of 35 micrograms per cubic meter (μg/m3) and below meet the 2006 standard (2001-2020)',\r\n defaultVisible: true,\r\n omitCommunityProfile: true,\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/AirQualityPM25Daily/MapServer/2005`,\r\n },\r\n {\r\n id: 'PM25-Daily-2010',\r\n zIndexPosition: 'back',\r\n title:\r\n 'Daily (24-hour) PM2.5 Design Value',\r\n yearKey: 'Year',\r\n subtitle:\r\n 'Values of 35 micrograms per cubic meter (μg/m3) and below meet the 2006 standard (2001-2020)',\r\n defaultVisible: true,\r\n omitCommunityProfile: true,\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/AirQualityPM25Daily/MapServer/2010`,\r\n },\r\n {\r\n id: 'PM25-Daily-2015',\r\n zIndexPosition: 'back',\r\n title:\r\n 'Daily (24-hour) PM2.5 Design Value',\r\n yearKey: 'Year',\r\n subtitle:\r\n 'Values of 35 micrograms per cubic meter (μg/m3) and below meet the 2006 standard (2000-2020)',\r\n defaultVisible: true,\r\n omitCommunityProfile: true,\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/AirQualityPM25Daily/MapServer/2015`,\r\n },\r\n {\r\n id: 'PM25-Daily-2020',\r\n zIndexPosition: 'back',\r\n title:\r\n 'Daily (24-hour) PM2.5 Design Value',\r\n yearKey: 'Year',\r\n subtitle:\r\n 'Values of 35 micrograms per cubic meter (μg/m3) and below meet the 2006 standard (2001-2020)',\r\n defaultVisible: true,\r\n omitCommunityProfile: true,\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/AirQualityPM25Daily/MapServer/2020`,\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n pm25Annual: {\r\n tabTitle: 'PM 2.5 Annual',\r\n tabPath: 'pm25Annual',\r\n contentType: 'map',\r\n timeSlider: true,\r\n contentTitle:\r\n 'Fine Particulate Matter (PM2.5) Annual Design Values 2000 - 2020 ',\r\n exportTitle:\r\n 'Fine Particulate Matter (PM2.5) Annual Design Values 2000 - 2020 ',\r\n exportSubtitle: '',\r\n mapSets: [\r\n {\r\n set: 'primary',\r\n geometry: 'County',\r\n outFields: ['County', 'Rate'],\r\n columnHeaders: [\r\n {\r\n field: 'County',\r\n headerName: 'County',\r\n flex: 1,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'Rate',\r\n headerName: 'Rate',\r\n flex: 1,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Age-Adjusted Rate of Emergency Department (ED) Visits for Carbon Monoxide (CO) Poisoning',\r\n popupContent: {\r\n title: {\r\n field: 'FullCounty',\r\n },\r\n additional: {\r\n name:\r\n 'You cannot zoom into this map. Please see \"About\" for more information.',\r\n },\r\n },\r\n setLayers: [\r\n {\r\n id: 'PM25-Annual-2000',\r\n zIndexPosition: 'back',\r\n title: 'Annual PM2.5 Design Value',\r\n yearKey: 'Year',\r\n subtitle:\r\n 'Values of 12 micrograms per cubic meter (μg/m3) and below meet the 2012 standard (2000-2020)',\r\n defaultVisible: true,\r\n omitCommunityProfile: true,\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/AirQualityPM25Annual/MapServer/2000`,\r\n },\r\n {\r\n id: 'PM25-Annual-2005',\r\n zIndexPosition: 'back',\r\n title: 'Annual PM2.5 Design Value',\r\n yearKey: 'Year',\r\n subtitle:\r\n 'Values of 12 micrograms per cubic meter (μg/m3) and below meet the 2012 standard (2000-2020)',\r\n defaultVisible: true,\r\n omitCommunityProfile: true,\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/AirQualityPM25Annual/MapServer/2005`,\r\n },\r\n {\r\n id: 'PM25-Annual-2010',\r\n zIndexPosition: 'back',\r\n title: 'Annual PM2.5 Design Value',\r\n yearKey: 'Year',\r\n subtitle:\r\n 'Values of 12 micrograms per cubic meter (μg/m3) and below meet the 2012 standard (2000-2020)',\r\n defaultVisible: true,\r\n omitCommunityProfile: true,\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/AirQualityPM25Annual/MapServer/2010`,\r\n },\r\n {\r\n id: 'PM25-Annual-2015',\r\n zIndexPosition: 'back',\r\n title: 'Annual PM2.5 Design Value',\r\n yearKey: 'Year',\r\n subtitle:\r\n 'Values of 12 micrograms per cubic meter (μg/m3) and below meet the 2012 standard (2000-2020)',\r\n defaultVisible: true,\r\n omitCommunityProfile: true,\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/AirQualityPM25Annual/MapServer/2015`,\r\n },\r\n {\r\n id: 'PM25-Annual-2020',\r\n zIndexPosition: 'back',\r\n title: 'Annual PM2.5 Design Value',\r\n yearKey: 'Year',\r\n subtitle:\r\n 'Values of 12 micrograms per cubic meter (μg/m3) and below meet the 2012 standard (2000-2020)',\r\n defaultVisible: true,\r\n omitCommunityProfile: true,\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/AirQualityPM25Annual/MapServer/2020`,\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n monitors: {\r\n tabTitle: 'Monitors',\r\n tabPath: 'monitors',\r\n contentType: 'map',\r\n contentTitle: 'Ambient Air Monitoring Network',\r\n exportTitle: 'Ambient Air Monitoring Network',\r\n exportSubtitle: '',\r\n mapSets: [\r\n {\r\n set: 'primary',\r\n geometry: 'Point',\r\n outFields: [\r\n 'Site_Name',\r\n 'Monitor_Count',\r\n 'Monitor_Types',\r\n 'County',\r\n ],\r\n columnHeaders: [\r\n {\r\n field: 'Site_Name',\r\n headerName: 'Site',\r\n flex: 1,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'Monitor_Count',\r\n headerName: 'Monitor Count',\r\n flex: 1,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'Monitor_Types',\r\n headerName: 'Monitor Types',\r\n flex: 1,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'County',\r\n headerName: 'County',\r\n flex: 1,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle: 'Ambient Air Monitoring Network',\r\n popupContent: {\r\n title: {\r\n field: 'Site_Name',\r\n },\r\n environment: {\r\n name: 'Monitor Count',\r\n field: 'Monitor_Count',\r\n className: 'field-value-align-left',\r\n unit: '',\r\n },\r\n secondary: {\r\n name: 'Monitor Types',\r\n field: 'Monitor_Types',\r\n className: 'field-value-align-left',\r\n unit: '',\r\n },\r\n health: {\r\n name: 'County',\r\n field: 'County',\r\n className: 'field-value-align-left',\r\n unit: '',\r\n },\r\n },\r\n setLayers: [\r\n {\r\n id: 'county-air-quality-monitors',\r\n zIndexPosition: 'back',\r\n title: 'Ambient Air Monitoring Sites',\r\n yearKey: 'Network_Plan_Year',\r\n subtitle: '',\r\n defaultVisible: true,\r\n sourceLayer: true,\r\n omitCommunityProfile: true,\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/AirQuality/MapServer/0`,\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n },\r\n about: ` `, // Fetched from the database\r\n resources: ` `, // Fetched from the database\r\n },\r\n disparities: {\r\n defaultTabPath: 'emissions',\r\n themeTitle: 'Disparities',\r\n themePath: 'disparities',\r\n tabs: {\r\n emissions: {\r\n tabTitle: 'Emissions',\r\n tabPath: 'emissions',\r\n contentType: 'map',\r\n contentTitle:\r\n 'Air Pollution Sources Permitted in Maryland',\r\n exportTitle:\r\n 'Air Pollution Sources Permitted in Maryland',\r\n defaultTab: true,\r\n mapSets: [\r\n {\r\n set: 'primary',\r\n geometry: 'County',\r\n outFields: [\r\n 'master_ai_name',\r\n 'air_code',\r\n 'naic_description',\r\n 'county',\r\n ],\r\n columnHeaders: [\r\n {\r\n field: 'master_ai_name',\r\n headerName: 'Source',\r\n flex: 1,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'air_code',\r\n headerName: 'Permit Type',\r\n flex: 1,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'naic_description',\r\n headerName: 'NAICS Description',\r\n flex: 1,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'county',\r\n headerName: 'County',\r\n flex: 1,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Air Pollution Sources Permitted in Maryland',\r\n popupContent: {\r\n title: {\r\n field: 'master_ai_name',\r\n },\r\n environment: {\r\n name: 'Permit Type',\r\n field: 'air_code',\r\n className: 'field-value-align-left',\r\n unit: '',\r\n },\r\n health: {\r\n name: 'County',\r\n field: 'county',\r\n className: 'field-value-align-left',\r\n unit: '',\r\n },\r\n additional: {\r\n name: 'NAICS Description',\r\n field: 'naic_description',\r\n className: 'field-value-align-left',\r\n unit: '',\r\n },\r\n },\r\n setLayers: [\r\n {\r\n id: 'county-emissions-sites',\r\n zIndexPosition: 'back',\r\n title:\r\n 'Air Pollution Sources Permitted in Maryland',\r\n yearKey: 'emission_year',\r\n subtitle: '',\r\n defaultVisible: true,\r\n sourceLayer: true,\r\n omitCommunityProfile: true,\r\n url:\r\n 'https://mdewin64.mde.state.md.us/arcgis/rest/services/MDE_ETS/ActiveHighAirEmissions2021/MapServer/0',\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n },\r\n about: ` `, // Fetched from the database\r\n resources: ` `, // Fetched from the database\r\n },\r\n moredata: {\r\n defaultTabPath: 'ncdms',\r\n themeTitle: 'More Data',\r\n themePath: 'moredata',\r\n tabs: {\r\n ncdms: {\r\n // Indicators for the select dropdown are also fetched from the database.\r\n tabTitle: '',\r\n tabPath: 'ncdms',\r\n contentType: 'ncdm',\r\n defaultTab: true,\r\n textHeader: 'Nationally Consistent Data and Measures',\r\n textSubheading: 'Sub-header',\r\n textBody: '',\r\n },\r\n },\r\n about: ` `, // Fetched from the database\r\n resources: ` `, // Fetched from the database\r\n },\r\n },\r\n },\r\n birthDefects: {\r\n topicTitle: 'Birth Defects',\r\n topicPath: 'birthDefects',\r\n category: 'health',\r\n defaultTabPath: 'status',\r\n overview:\r\n '

Birth defects are mild to severe structural changes present at birth that can affect different parts of the body and change how the body looks, works, or both. They are common, costly, and critical conditions that remain one of the leading causes of infant deaths. Birth defects are thought to be caused by a complex mix of genetic, behavioral, and environmental factors; however, additional research is needed to study the links between environmental hazards and birth defects.

',\r\n aboutData: `
Data Facts Birth Defects
Why these data are important Birth defects are mild to severe structural changes present at birth that can affect different parts of the body and change how the body looks, works, or both. They are common, costly, and critical conditions that remain one of the leading causes of infant deaths. Birth defects are thought to be caused by a complex mix of genetic, behavioral, and environmental factors; however, additional research is needed to study the links between environmental hazards and birth defects.
Data Sources Birth Defects Reporting and Information System
Years available 2016-most recent data available (usually 1-2 years prior to current date)
Data source description Confidential reports from birth facilities and health care providers.
What's reported Prevalence of specified birth conditions identified in infants born in Maryland
How it's reported Crude rates per 10,000 live births
Level of geographic detail State
Level of demographic detail N/A
Data disclaimers

Data provided are five-year rates at the state level. Data for individual years and/or county-level data are suppressed.

The summary data provided on this website are downloadable. For more detailed data, refer to the data sources. Yes
Environmental Health Helpline 1-866-703-3266
mdh.envhealth@maryland.gov
Last Updated 10/8/2024
Frequency of data updates Annual
Data suppression rules

Single year data and county level data are suppressed

`,\r\n themeOverviews: [\r\n {\r\n theme: 'Status',\r\n text: 'Provides a detailed view of birth defects in Maryland.',\r\n },\r\n ],\r\n countySuppressionRules: {\r\n range: '1 to 10',\r\n populationMin: '5,000',\r\n },\r\n subCountySuppressionRules: null,\r\n omitNcdmData: true, // Prevents the Download All NCDM button from displaying and skips the call to get NCDM configs.\r\n themes: {\r\n status: {\r\n defaultTabPath: 'overview',\r\n themeTitle: 'Status',\r\n themePath: 'status',\r\n tabs: {\r\n overview: {\r\n tabTitle: 'Overview',\r\n tabPath: 'overview',\r\n contentType: 'chart',\r\n // No contentTitle for charts, will be controlled in \"chartTitle\" property below:\r\n exportTitle: 'Rate of Birth Defects',\r\n chartType: 'horizontalBar',\r\n selectable: false,\r\n defaultSelection: '2017-2021',\r\n baseline: '000',\r\n defaultSetNames: ['rate'],\r\n info: {\r\n title: 'Birth Defects',\r\n id: 'chart-birth-defects',\r\n subtitle:\r\n 'Age-adjusted rate of hospitalization per 10,000',\r\n },\r\n chartTitle: 'Rate of Birth Defects',\r\n displayChartTitle: true,\r\n chartYAxisField: 'chartLabel',\r\n displayChartDiscontinuityGraphic: false,\r\n displayXAxisLabel: true,\r\n xAxisLabel:\r\n 'Rate of birth defect per 10,000 live births',\r\n // The data returned is the same for both 'rate' and 'individualRate', but two separate sets are needed to divide the data into two separate groups that can be toggled:\r\n chartDataSets: ['rate', 'individualRate'],\r\n url: `${process.env.REACT_APP_EPHT_API}/BirthDefects/GetRate`,\r\n urlParams: [\r\n { param: 'jurisdiction', value: '000' }, // 'value' directly supplies the url with that provided value.\r\n { param: 'dateRange', valueKey: 'dateRange' }, // 'valueKey' is the associated key that gets updated by a different component, which then sets the url value.\r\n ],\r\n chartConfig: [\r\n {\r\n label: 'All Birth Defects',\r\n setName: 'rate',\r\n fill: false,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: 'Individual Birth Defects',\r\n setName: 'individualRate',\r\n fill: false,\r\n order: 2,\r\n data: [],\r\n },\r\n ],\r\n columnHeaders: [\r\n {\r\n field: 'period',\r\n headerName: 'Period',\r\n width: 125,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'chartLabel',\r\n headerName: 'Type',\r\n width: 225,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate',\r\n headerName: 'Rate',\r\n width: 125,\r\n customFormat: 2,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle: 'Rate of Birth Defects',\r\n },\r\n },\r\n about: ` `, // Fetched from the database\r\n resources: ` `, // Fetched from the database\r\n },\r\n },\r\n },\r\n tbi: {\r\n topicTitle: 'Traumatic Brain Injury',\r\n topicPath: 'tbi',\r\n category: 'health',\r\n defaultTabPath: 'status',\r\n overview:\r\n '

Traumatic brain injury (TBI) is an injury to the brain, caused by a sudden or violent blow to the head or body. TBI-related injuries disrupt normal brain function and can lead to death or permanent disability. Everyone is at risk for a TBI, especially children and older adults. 

',\r\n aboutData: `
Data Facts Traumatic Brain Injury
Why these data are important A traumatic brain injury (TBI) is an injury caused by external forces to the brain, such as a blow or penetrating injury to the head. In Maryland, falls, firearm-related injuries, and motor vehicle crashes are common causes of TBI. Depending on the severity of the injury, affected individuals may have short-term problems with normal brain function to more serious, long-term issues such as challenges in obtaining and maintaining employment, changes in mental and cognitive health, and a reduced life-span; or an individual may die from their injury.
Data Sources Maryland Health Services Cost Review Commission
Years available 2016-most recent data available (usually 1-2 years prior to current date)
Data source description Hospital billing data from inpatient discharges and emergency department encounters
What's reported Inpatient (IP) hospitalizations; Emergency department (ED) visits
How it's reported

Crude and age-adjusted rates

95% confidence interval (CI) - lower and upper limits

Level of geographic detail State and county
Level of demographic detail Race/ethnicity, sex, and age group
Data disclaimers

HSCRC revised the methodology for coding race/ethnicity in 2013; therefore, race/ethnicity data from 2014 and later may not be comparable to previous years.

ICD-9 hospital billing codes transitioned to ICD-10 billing codes in 2015; therefore, data from 2016 and later may not be comparable to previous years.

The summary data provided on this website are downloadable. For more detailed data, refer to the data sources. Yes
Environmental Health Helpline 1-866-703-3266
mdh.envhealth@maryland.gov
Last Updated 10/8/2024
Frequency of data updates Annual
Data suppression rules HSCRC:

County level: suppression is for non-zero numerators <11 and this is reflected in data starting with 2021. Prior to 2021, suppression was for non-zero numerators <6. There is no denominator requirement.

`,\r\n themeOverviews: [\r\n {\r\n theme: 'Status',\r\n text:\r\n 'Provides data and information summarizing the current status of traumatic brain injury in Maryland.',\r\n },\r\n {\r\n theme: 'Disparities',\r\n text:\r\n 'Examines the distribution of the burden of traumatic brain injury in Maryland',\r\n },\r\n ],\r\n countySuppressionRules: {\r\n range: '1 to 10',\r\n populationMin: '5,000',\r\n },\r\n subCountySuppressionRules: null,\r\n omitNcdmData: true, // Prevents the Download All NCDM button from displaying and skips the call to get NCDM configs.\r\n themes: {\r\n status: {\r\n defaultTabPath: 'EDRates',\r\n themeTitle: 'Status',\r\n themePath: 'status',\r\n tabs: {\r\n EDRates: {\r\n tabTitle: 'ED Rate',\r\n tabPath: 'EDRates',\r\n contentType: 'map',\r\n contentTitle:\r\n 'Mean Annual Unadjusted Rate of TBI-related Emergency Department (ED) Visits',\r\n exportTitle:\r\n 'Mean Annual Unadjusted Rate of TBI-related Emergency Department (ED) Visits',\r\n exportSubtitle:\r\n 'Unadjusted rate per 100k population (period)',\r\n mapSets: [\r\n {\r\n set: 'primary',\r\n geometry: 'County',\r\n outFields: ['County', 'Rate'],\r\n columnHeaders: [\r\n {\r\n field: 'County',\r\n headerName: 'County',\r\n flex: 1,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'Rate',\r\n headerName: 'Rate',\r\n exportHeaderName: 'Rate',\r\n flex: 1,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Mean Annual Unadjusted Rate of TBI-related Emergency Department (ED) Visits',\r\n popupContent: {\r\n title: {\r\n field: 'FullCounty',\r\n },\r\n health: {\r\n name:\r\n 'TBI-related ED visits per 100,000 population',\r\n field: 'Rate',\r\n unit: '',\r\n },\r\n },\r\n setLayers: [\r\n {\r\n id: 'county-choropleth-tbi-ed-visits',\r\n zIndexPosition: 'back',\r\n title:\r\n 'Mean Annual Rate of TBI-related ED visits by County',\r\n yearKey: 'Period',\r\n subtitle:\r\n 'Unadjusted rate per 100,000 population',\r\n defaultVisible: true,\r\n sourceLayer: true,\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/TBI/MapServer/0`,\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n EDTrends: {\r\n tabTitle: 'County ED Trend',\r\n tabPath: 'EDTrends',\r\n contentType: 'chart',\r\n // No contentTitle for charts, will be controlled in \"chartTitle\" property below //\r\n exportTitle:\r\n 'Mean Annual Unadjusted Rate of TBI-related Emergency Department (ED) Visits',\r\n exportSubtitle: 'Unadjusted rate per 100k population',\r\n chartType: 'trendline',\r\n selectable: true,\r\n stratifiable: false,\r\n\r\n // The following array of stratifications will create a chart stratification button for each item:\r\n\r\n defaultSelection: '000', // 000 is the code used for statewide data at the DB\r\n defaultSetNames: ['stateRate'],\r\n baseline: '000', // 000 is the code used for statewide data at the DB\r\n info: {\r\n title:\r\n 'Rate of TBI Emergency Department (ED) Visits',\r\n id: 'chart-tbi-emergency-room-trend',\r\n subtitle: 'Age-adjusted rate per 10,000',\r\n },\r\n chartTitle: [\r\n 'Mean Annual Unadjusted Rate of TBI-related Emergency Department (ED) Visits',\r\n ],\r\n chartSubtitle: '',\r\n displayChartTitle: true,\r\n displayChartSubtitle: true,\r\n displayYAxisLabel: true,\r\n displayXAxisLabel: true,\r\n displayChartDiscontinuityGraphic: false,\r\n yAxisLabel: 'Unadjusted rate per 100,000 population',\r\n xAxisLabel: 'Period',\r\n chartXAxisField: 'year', // should match field name used in incoming dataset\r\n chartDataSets: ['rate', 'stateRate'], // should match field names used in incoming dataset\r\n url: `${process.env.REACT_APP_EPHT_API}/TBI/GetThreeYearCrudeRateCI`,\r\n urlParams: [\r\n { param: 'jurisdiction', valueKey: 'code' },\r\n {\r\n param: 'type',\r\n value: 'TBI_EDVisits_CrudeRate_3yr',\r\n },\r\n ],\r\n chartConfig: {\r\n mainDatasets: [\r\n {\r\n label: 'County',\r\n setName: 'rate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n baseline: true,\r\n label: 'Statewide',\r\n setName: 'stateRate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n ],\r\n // Note: Baseline dataset should receive `baseline: true` property.\r\n // Additional note: The `order` property will dictate how lines stack on each other, in ascending order. Baseline should be given highest value to ensure it is colored correctly by Chart.js (gray)\r\n stratificationDatasets: [],\r\n },\r\n columnHeaders: [\r\n {\r\n field: 'year',\r\n headerName: 'Period',\r\n width: 85,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate',\r\n headerName: 'County Rate',\r\n width: 134,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateCILower',\r\n headerName: 'Lower 95% Confidence Limit',\r\n width: 200,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateCIUpper',\r\n headerName: 'Upper 95% Confidence Limit',\r\n width: 200,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'stateRate',\r\n headerName: 'Statewide Rate',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'stateCILower',\r\n headerName: 'State Lower 95% Confidence Limit',\r\n width: 225,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'stateCIUpper',\r\n headerName: 'State Upper 95% Confidence Limit',\r\n width: 225,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Mean Annual Unadjusted Rate of TBI-related Emergency Department (ED) Visits',\r\n },\r\n hospitalization: {\r\n tabTitle: 'Hospitalization',\r\n tabPath: 'hospitalization',\r\n contentType: 'map',\r\n contentTitle:\r\n 'Mean Annual Unadjusted Rate of TBI-related Hospitalizations',\r\n exportTitle:\r\n 'Mean Annual Unadjusted Rate of TBI-related Hospitalizations',\r\n exportSubtitle:\r\n 'Unadjusted rate per 100k population (period)',\r\n mapSets: [\r\n {\r\n set: 'primary',\r\n geometry: 'County',\r\n outFields: ['County', 'Rate'],\r\n columnHeaders: [\r\n {\r\n field: 'County',\r\n headerName: 'County',\r\n flex: 1,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'Rate',\r\n headerName: 'Rate',\r\n exportHeaderName: 'Rate',\r\n flex: 1,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Mean annual unadjusted Rate of TBI-related Hospitalizations',\r\n popupContent: {\r\n title: {\r\n field: 'FullCounty',\r\n },\r\n health: {\r\n name:\r\n 'TBI-related hospitalizations per 100,000 population',\r\n field: 'Rate',\r\n unit: '',\r\n },\r\n },\r\n setLayers: [\r\n {\r\n id:\r\n 'county-choropleth-tbi-hospitalization',\r\n zIndexPosition: 'back',\r\n title:\r\n 'Mean Annual Rate of TBI-related Hospitalizations by County',\r\n yearKey: 'Period',\r\n subtitle:\r\n 'Unadjusted rate per 100,000 population',\r\n defaultVisible: true,\r\n sourceLayer: true,\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/TBI/MapServer/1`,\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n countyHospitalizationTrend: {\r\n tabTitle: 'County Hosp. Trend',\r\n tabPath: 'countyHospitalizationTrend',\r\n contentType: 'chart',\r\n // No contentTitle for charts, will be controlled in \"chartTitle\" property below //\r\n exportTitle:\r\n 'Mean annual unadjusted Rate of TBI-related Hospitalizations',\r\n exportSubtitle: 'Unadjusted rate per 100k population',\r\n chartType: 'trendline',\r\n selectable: true,\r\n stratifiable: false,\r\n\r\n // The following array of stratifications will create a chart stratification button for each item:\r\n\r\n defaultSelection: '000', // 000 is the code used for statewide data at the DB\r\n defaultSetNames: ['stateRate'],\r\n baseline: '000', // 000 is the code used for statewide data at the DB\r\n info: {\r\n title: 'Rate of TBI Hospitalizations',\r\n id: 'chart-tbi-hospitalizations-trend',\r\n subtitle: 'Age-adjusted rate per 10,000',\r\n },\r\n chartTitle: [\r\n 'Mean Annual Unadjusted Rate of TBI-related Hospitalizations',\r\n ],\r\n chartSubtitle: '',\r\n displayChartTitle: true,\r\n displayChartSubtitle: true,\r\n displayYAxisLabel: true,\r\n displayXAxisLabel: true,\r\n displayChartDiscontinuityGraphic: false,\r\n yAxisLabel: 'Unadjusted rate per 100,000 population',\r\n xAxisLabel: 'Period',\r\n chartXAxisField: 'year', // should match field name used in incoming dataset\r\n chartDataSets: ['rate', 'stateRate'], // should match field names used in incoming dataset\r\n url: `${process.env.REACT_APP_EPHT_API}/TBI/GetThreeYearCrudeRateCI`,\r\n urlParams: [\r\n { param: 'jurisdiction', valueKey: 'code' },\r\n {\r\n param: 'type',\r\n value: 'TBI_Hospitalizations_CrudeRate_3yr',\r\n },\r\n ],\r\n chartConfig: {\r\n mainDatasets: [\r\n {\r\n label: 'County',\r\n setName: 'rate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n baseline: true,\r\n label: 'Statewide',\r\n setName: 'stateRate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n ],\r\n // Note: Baseline dataset should receive `baseline: true` property.\r\n // Additional note: The `order` property will dictate how lines stack on each other, in ascending order. Baseline should be given highest value to ensure it is colored correctly by Chart.js (gray)\r\n stratificationDatasets: [],\r\n },\r\n columnHeaders: [\r\n {\r\n field: 'year',\r\n headerName: 'Period',\r\n width: 85,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate',\r\n headerName: 'County Rate',\r\n width: 134,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateCILower',\r\n headerName: 'Lower 95% Confidence Limit',\r\n width: 200,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateCIUpper',\r\n headerName: 'Upper 95% Confidence Limit',\r\n width: 200,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'stateRate',\r\n headerName: 'Statewide Rate',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'stateCILower',\r\n headerName: 'State Lower 95% Confidence Limit',\r\n width: 225,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'stateCIUpper',\r\n headerName: 'State Upper 95% Confidence Limit',\r\n width: 225,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Mean Annual Unadjusted Rate of TBI-related Hospitalizations',\r\n },\r\n mortality: {\r\n tabTitle: 'Mortality',\r\n tabPath: 'mortality',\r\n contentType: 'map',\r\n contentTitle:\r\n 'Mean Annual Unadjusted Rate of TBI-related Mortality',\r\n exportTitle:\r\n 'Mean Annual Unadjusted Rate of TBI-related Mortality',\r\n exportSubtitle:\r\n 'Unadjusted rate per 100k population (period)',\r\n mapSets: [\r\n {\r\n set: 'primary',\r\n geometry: 'County',\r\n outFields: ['County', 'Rate'],\r\n columnHeaders: [\r\n {\r\n field: 'County',\r\n headerName: 'County',\r\n flex: 1,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'Rate',\r\n headerName: 'Rate',\r\n exportHeaderName: 'Rate',\r\n flex: 1, //\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Mean annual unadjusted Rate of TBI-related Mortality',\r\n popupContent: {\r\n title: {\r\n field: 'FullCounty',\r\n },\r\n health: {\r\n name:\r\n 'TBI-related mortality per 100,000 population',\r\n field: 'Rate',\r\n unit: '',\r\n },\r\n },\r\n setLayers: [\r\n {\r\n id: 'county-choropleth-tbi-mortality',\r\n zIndexPosition: 'back',\r\n title:\r\n 'Mean Annual Rate of TBI-related Mortality by County',\r\n yearKey: 'Period',\r\n subtitle:\r\n 'Unadjusted rate per 100,000 population',\r\n defaultVisible: true,\r\n sourceLayer: true,\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/TBI/MapServer/2`,\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n countyMortalityTrend: {\r\n tabTitle: 'County Mortality Trend',\r\n tabPath: 'countyMortalityTrend',\r\n contentType: 'chart',\r\n // No contentTitle for charts, will be controlled in \"chartTitle\" property below //\r\n exportTitle:\r\n 'Mean annual unadjusted Rate of TBI-related Mortality',\r\n exportSubtitle: 'Unadjusted rate per 100k population',\r\n chartType: 'trendline',\r\n selectable: true,\r\n stratifiable: false,\r\n\r\n // The following array of stratifications will create a chart stratification button for each item:\r\n\r\n defaultSelection: '000', // 000 is the code used for statewide data at the DB\r\n defaultSetNames: ['stateRate'],\r\n baseline: '000', // 000 is the code used for statewide data at the DB\r\n info: {\r\n title: 'Rate of TBI Mortality',\r\n id: 'chart-tbi-mortality-trend',\r\n subtitle: 'Age-adjusted rate per 10,000',\r\n },\r\n chartTitle: [\r\n 'Mean Annual Unadjusted Rate of TBI-related Mortality',\r\n ],\r\n chartSubtitle: '',\r\n displayChartTitle: true,\r\n displayChartSubtitle: true,\r\n displayYAxisLabel: true,\r\n displayXAxisLabel: true,\r\n displayChartDiscontinuityGraphic: false,\r\n yAxisLabel: 'Unadjusted rate per 100,000 population',\r\n xAxisLabel: 'Period',\r\n chartXAxisField: 'year', // should match field name used in incoming dataset\r\n chartDataSets: ['rate', 'stateRate'], // should match field names used in incoming dataset\r\n url: `${process.env.REACT_APP_EPHT_API}/TBI/GetThreeYearCrudeRateCI`,\r\n urlParams: [\r\n { param: 'jurisdiction', valueKey: 'code' },\r\n {\r\n param: 'type',\r\n value: 'TBI_Mortality_CrudeRate_3yr',\r\n },\r\n ],\r\n chartConfig: {\r\n mainDatasets: [\r\n {\r\n label: 'County',\r\n setName: 'rate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n baseline: true,\r\n label: 'Statewide',\r\n setName: 'stateRate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n ],\r\n // Note: Baseline dataset should receive `baseline: true` property.\r\n // Additional note: The `order` property will dictate how lines stack on each other, in ascending order. Baseline should be given highest value to ensure it is colored correctly by Chart.js (gray)\r\n stratificationDatasets: [],\r\n },\r\n columnHeaders: [\r\n {\r\n field: 'year',\r\n headerName: 'Period',\r\n width: 85,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate',\r\n headerName: 'County Rate',\r\n width: 134,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateCILower',\r\n headerName: 'Lower 95% Confidence Limit',\r\n width: 200,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateCIUpper',\r\n headerName: 'Upper 95% Confidence Limit',\r\n width: 200,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'stateRate',\r\n headerName: 'Statewide Rate',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'stateCILower',\r\n headerName: 'State Lower 95% Confidence Limit',\r\n width: 225,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'stateCIUpper',\r\n headerName: 'State Upper 95% Confidence Limit',\r\n width: 225,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Mean Annual Unadjusted Rate of TBI-related Mortality',\r\n },\r\n },\r\n about: ` `, // Fetched from the database\r\n resources: ` `, // Fetched from the database\r\n },\r\n disparities: {\r\n defaultTabPath: 'statewideEDTrend',\r\n themeTitle: 'Disparities',\r\n themePath: 'disparities',\r\n tabs: {\r\n statewideEDTrend: {\r\n tabTitle: 'State ED Trend',\r\n tabPath: 'statewideEDTrend',\r\n contentType: 'chart',\r\n exportTitle:\r\n 'Annual Age-adjusted Rate of TBI-related Emergency Department (ED) Visits',\r\n exportSubtitle: 'Age-adjusted rate per 100k population',\r\n chartType: 'trendline',\r\n selectable: false,\r\n stratifiable: true,\r\n // The following array of stratifications will create a chart stratification button for each item:\r\n stratifications: [\r\n {\r\n title: 'Age',\r\n field: 'age',\r\n },\r\n {\r\n title: 'Cause',\r\n field: 'cause',\r\n },\r\n {\r\n title: 'Ethnicity',\r\n field: 'TbiEthnicity',\r\n },\r\n {\r\n title: 'Race',\r\n field: 'TbiRace',\r\n },\r\n {\r\n title: 'Sex', // Name that appears for button\r\n field: 'sex', // Must match stratification key name in json response returned from endpoint\r\n },\r\n ],\r\n defaultSelection: '000', // 000 is the code used for statewide data at the DB\r\n defaultSetNames: ['stateRate'],\r\n baseline: '000', // 000 is the code used for statewide data at the DB\r\n info: {\r\n title:\r\n 'Annual Age-adjusted Rate of TBI-related Emergency Department (ED) Visits',\r\n id: 'chart-statewide-tbi-emergency-room-trend',\r\n subtitle: 'Age-adjusted rate per 100k population',\r\n },\r\n chartTitle: [\r\n 'Annual Age-adjusted Rate of TBI-related Emergency Department (ED) Visits',\r\n ],\r\n chartSubtitle: '',\r\n displayChartTitle: true,\r\n displayChartSubtitle: true,\r\n displayYAxisLabel: true,\r\n displayXAxisLabel: true,\r\n displayChartDiscontinuityGraphic: false,\r\n yAxisLabel: 'Age-adjusted rate per 100,000 population',\r\n xAxisLabel: 'Year',\r\n chartXAxisField: 'year', // should match field name used in incoming dataset\r\n chartDataSets: ['rate', 'stateRate'], // should match field names used in incoming dataset\r\n url: `${process.env.REACT_APP_EPHT_API}/TBI/GetOneYearAgeAdjRate`,\r\n urlParams: [\r\n {\r\n param: 'type',\r\n value: 'TBI_EDVisits_AgeAdjRate_Annual',\r\n },\r\n ],\r\n chartConfig: {\r\n mainDatasets: [\r\n {\r\n label: 'County',\r\n setName: 'rate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n baseline: true,\r\n label: 'Statewide',\r\n setName: 'stateRate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n ],\r\n // Note: Baseline dataset should receive `baseline: true` property.\r\n // Additional note: The `order` property will dictate how lines stack on each other, in ascending order. Baseline should be given highest value to ensure it is colored correctly by Chart.js (gray)\r\n stratificationDatasets: [\r\n {\r\n label: 'All',\r\n setName: 'rateTotal',\r\n stratification: 'cause',\r\n title: 'Cause',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 4,\r\n data: [],\r\n },\r\n {\r\n label: 'Falls',\r\n setName: 'rateFalls',\r\n stratification: 'cause',\r\n title: 'Cause',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: 'Firearm',\r\n setName: 'rateFirearm',\r\n stratification: 'cause',\r\n title: 'Cause',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: 'Vehicle',\r\n setName: 'rateMotorVehicle',\r\n stratification: 'cause',\r\n title: 'Cause',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 3,\r\n data: [],\r\n },\r\n {\r\n label: 'All',\r\n setName: 'rateTotal',\r\n stratification: 'age',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 12,\r\n data: [],\r\n },\r\n {\r\n label: '< 1',\r\n setName: 'rateUnder1',\r\n stratification: 'age',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: '1-4',\r\n setName: 'rate1to4',\r\n stratification: 'age',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: '5-14',\r\n setName: 'rate5to14',\r\n stratification: 'age',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 3,\r\n data: [],\r\n },\r\n {\r\n label: '15-24',\r\n setName: 'rate15to24',\r\n stratification: 'age',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 4,\r\n data: [],\r\n },\r\n {\r\n label: '25-34',\r\n setName: 'rate25to34',\r\n stratification: 'age',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 5,\r\n data: [],\r\n },\r\n {\r\n label: '35-44',\r\n setName: 'rate35to44',\r\n stratification: 'age',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 6,\r\n data: [],\r\n },\r\n {\r\n label: '45-54',\r\n setName: 'rate45to54',\r\n stratification: 'age',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 7,\r\n data: [],\r\n },\r\n {\r\n label: '55-64',\r\n setName: 'rate55to64',\r\n stratification: 'age',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 8,\r\n data: [],\r\n },\r\n {\r\n label: '65-74',\r\n setName: 'rate65to74',\r\n stratification: 'age',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 9,\r\n data: [],\r\n },\r\n {\r\n label: '75-84',\r\n setName: 'rate75to84',\r\n stratification: 'age',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 10,\r\n data: [],\r\n },\r\n {\r\n label: '85+',\r\n setName: 'rateover85',\r\n stratification: 'age',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 11,\r\n data: [],\r\n },\r\n {\r\n label: 'All',\r\n setName: 'rateTotal',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 3,\r\n data: [],\r\n },\r\n {\r\n label: 'Female',\r\n setName: 'rateFemale',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: 'Male',\r\n setName: 'rateMale',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: 'All',\r\n setName: 'rateTotal',\r\n stratification: 'TbiRace',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 4,\r\n data: [],\r\n },\r\n {\r\n label: 'Black',\r\n setName: 'rateBlack',\r\n stratification: 'TbiRace',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: 'White',\r\n setName: 'rateWhite',\r\n stratification: 'TbiRace',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: 'Other',\r\n setName: 'rateOther',\r\n stratification: 'TbiRace',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 3,\r\n data: [],\r\n },\r\n {\r\n label: 'All',\r\n setName: 'rateTotal',\r\n stratification: 'TbiEthnicity',\r\n title: 'Ethnicity',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 3,\r\n data: [],\r\n },\r\n {\r\n label: 'Hispanic',\r\n setName: 'rateHispanic',\r\n stratification: 'TbiEthnicity',\r\n title: 'Ethnicity',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: 'Non-Hispanic',\r\n setName: 'rateNonHispanic',\r\n stratification: 'TbiEthnicity',\r\n title: 'Ethnicity',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n ],\r\n },\r\n columnHeaders: [\r\n {\r\n field: 'year',\r\n headerName: 'Year',\r\n width: 85,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate',\r\n headerName: 'County Rate',\r\n width: 134,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'stateRate',\r\n headerName: 'Statewide Rate',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateFalls',\r\n headerName: 'Falls',\r\n stratification: 'cause',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateFirearm',\r\n headerName: 'Firearm',\r\n stratification: 'cause',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateMotorVehicle',\r\n headerName: 'Vehicle',\r\n stratification: 'cause',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateUnder1',\r\n headerName: 'Ages < 1',\r\n stratification: 'age',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate1to4',\r\n headerName: 'Ages 1-4',\r\n stratification: 'age',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate5to14',\r\n headerName: 'Ages 5-14',\r\n stratification: 'age',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate15to24',\r\n headerName: 'Ages 15-24',\r\n stratification: 'age',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate25to34',\r\n headerName: 'Ages 25-34',\r\n stratification: 'age',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate35to44',\r\n headerName: 'Ages 35-44',\r\n stratification: 'age',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate45to54',\r\n headerName: 'Ages 45-54',\r\n stratification: 'age',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate55to64',\r\n headerName: 'Ages 55-64',\r\n stratification: 'age',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate65to74',\r\n headerName: 'Ages 65-74',\r\n stratification: 'age',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate75to84',\r\n headerName: 'Ages 75-84',\r\n stratification: 'age',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateover85',\r\n headerName: 'Ages 85+',\r\n stratification: 'age',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateFemale',\r\n headerName: 'Female',\r\n stratification: 'sex',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateMale',\r\n headerName: 'Male',\r\n stratification: 'sex',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateBlack',\r\n headerName: 'Black',\r\n stratification: 'TbiRace',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateWhite',\r\n headerName: 'White',\r\n stratification: 'TbiRace',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateOther',\r\n headerName: 'Other',\r\n stratification: 'TbiRace',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateHispanic',\r\n headerName: 'Hispanic',\r\n stratification: 'TbiEthnicity',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateNonHispanic',\r\n headerName: 'Non-Hispanic',\r\n stratification: 'TbiEthnicity',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Annual Age-adjusted Rate of TBI-related Emergency Department (ED) Visits',\r\n },\r\n statewideHospTrend: {\r\n tabTitle: 'State Hosp. Trend',\r\n tabPath: 'statewideHospTrend',\r\n contentType: 'chart',\r\n exportTitle:\r\n 'Annual Age-adjusted Rate of TBI-related Hospitalizations',\r\n exportSubtitle: 'Age-adjusted rate per 100k population',\r\n chartType: 'trendline',\r\n selectable: false,\r\n stratifiable: true,\r\n // The following array of stratifications will create a chart stratification button for each item:\r\n stratifications: [\r\n {\r\n title: 'Age',\r\n field: 'age',\r\n },\r\n {\r\n title: 'Cause',\r\n field: 'cause',\r\n },\r\n {\r\n title: 'Ethnicity',\r\n field: 'TbiEthnicity',\r\n },\r\n {\r\n title: 'Race',\r\n field: 'TbiRace',\r\n },\r\n {\r\n title: 'Sex', // Name that appears for button\r\n field: 'sex', // Must match stratification key name in json response returned from endpoint\r\n },\r\n ],\r\n defaultSelection: '000', // 000 is the code used for statewide data at the DB\r\n defaultSetNames: ['stateRate'],\r\n baseline: '000', // 000 is the code used for statewide data at the DB\r\n info: {\r\n title:\r\n 'Annual Age-adjusted Rate of TBI-related Hospitalizations',\r\n id: 'chart-statewide-tbi-hospitalizations-trend',\r\n subtitle: 'Age-adjusted rate per 100k population ',\r\n },\r\n chartTitle: [\r\n 'Annual Age-adjusted Rate of TBI-related Hospitalizations',\r\n ],\r\n chartSubtitle: '',\r\n displayChartTitle: true,\r\n displayChartSubtitle: true,\r\n displayYAxisLabel: true,\r\n displayXAxisLabel: true,\r\n displayChartDiscontinuityGraphic: false,\r\n yAxisLabel: 'Age-adjusted rate per 100,000 population',\r\n xAxisLabel: 'Year',\r\n chartXAxisField: 'year', // should match field name used in incoming dataset\r\n chartDataSets: ['rate', 'stateRate'], // should match field names used in incoming dataset\r\n url: `${process.env.REACT_APP_EPHT_API}/TBI/GetOneYearAgeAdjRate`,\r\n urlParams: [\r\n {\r\n param: 'type',\r\n value: 'TBI_Hospitalizations_AgeAdjRate_Annual',\r\n },\r\n ],\r\n chartConfig: {\r\n mainDatasets: [\r\n {\r\n label: 'County',\r\n setName: 'rate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n baseline: true,\r\n label: 'Statewide',\r\n setName: 'stateRate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n ],\r\n // Note: Baseline dataset should receive `baseline: true` property.\r\n // Additional note: The `order` property will dictate how lines stack on each other, in ascending order. Baseline should be given highest value to ensure it is colored correctly by Chart.js (gray)\r\n stratificationDatasets: [\r\n {\r\n label: 'All',\r\n setName: 'rateTotal',\r\n stratification: 'cause',\r\n title: 'Cause',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 4,\r\n data: [],\r\n },\r\n {\r\n label: 'Falls',\r\n setName: 'rateFalls',\r\n stratification: 'cause',\r\n title: 'Cause',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: 'Firearm',\r\n setName: 'rateFirearm',\r\n stratification: 'cause',\r\n title: 'Cause',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: 'Vehicle',\r\n setName: 'rateMotorVehicle',\r\n stratification: 'cause',\r\n title: 'Cause',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 3,\r\n data: [],\r\n },\r\n {\r\n label: 'All',\r\n setName: 'rateTotal',\r\n stratification: 'age',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 12,\r\n data: [],\r\n },\r\n {\r\n label: '< 1',\r\n setName: 'rateUnder1',\r\n stratification: 'age',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: '1-4',\r\n setName: 'rate1to4',\r\n stratification: 'age',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: '5-14',\r\n setName: 'rate5to14',\r\n stratification: 'age',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 3,\r\n data: [],\r\n },\r\n {\r\n label: '15-24',\r\n setName: 'rate15to24',\r\n stratification: 'age',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 4,\r\n data: [],\r\n },\r\n {\r\n label: '25-34',\r\n setName: 'rate25to34',\r\n stratification: 'age',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 5,\r\n data: [],\r\n },\r\n {\r\n label: '35-44',\r\n setName: 'rate35to44',\r\n stratification: 'age',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 6,\r\n data: [],\r\n },\r\n {\r\n label: '45-54',\r\n setName: 'rate45to54',\r\n stratification: 'age',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 7,\r\n data: [],\r\n },\r\n {\r\n label: '55-64',\r\n setName: 'rate55to64',\r\n stratification: 'age',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 8,\r\n data: [],\r\n },\r\n {\r\n label: '65-74',\r\n setName: 'rate65to74',\r\n stratification: 'age',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 9,\r\n data: [],\r\n },\r\n {\r\n label: '75-84',\r\n setName: 'rate75to84',\r\n stratification: 'age',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 10,\r\n data: [],\r\n },\r\n {\r\n label: '85+',\r\n setName: 'rateover85',\r\n stratification: 'age',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 11,\r\n data: [],\r\n },\r\n {\r\n label: 'All',\r\n setName: 'rateTotal',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 3,\r\n data: [],\r\n },\r\n {\r\n label: 'Female',\r\n setName: 'rateFemale',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: 'Male',\r\n setName: 'rateMale',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: 'All',\r\n setName: 'rateTotal',\r\n stratification: 'TbiRace',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 4,\r\n data: [],\r\n },\r\n {\r\n label: 'Black',\r\n setName: 'rateBlack',\r\n stratification: 'TbiRace',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: 'White',\r\n setName: 'rateWhite',\r\n stratification: 'TbiRace',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: 'Other',\r\n setName: 'rateOther',\r\n stratification: 'TbiRace',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 3,\r\n data: [],\r\n },\r\n {\r\n label: 'All',\r\n setName: 'rateTotal',\r\n stratification: 'TbiEthnicity',\r\n title: 'Ethnicity',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 3,\r\n data: [],\r\n },\r\n {\r\n label: 'Hispanic',\r\n setName: 'rateHispanic',\r\n stratification: 'TbiEthnicity',\r\n title: 'Ethnicity',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: 'Non-Hispanic',\r\n setName: 'rateNonHispanic',\r\n stratification: 'TbiEthnicity',\r\n title: 'Ethnicity',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n ],\r\n },\r\n columnHeaders: [\r\n {\r\n field: 'year',\r\n headerName: 'Year',\r\n width: 85,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate',\r\n headerName: 'County Rate',\r\n width: 134,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'stateRate',\r\n headerName: 'Statewide Rate',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateFalls',\r\n headerName: 'Falls',\r\n stratification: 'cause',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateFirearm',\r\n headerName: 'Firearm',\r\n stratification: 'cause',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateMotorVehicle',\r\n headerName: 'Vehicle',\r\n stratification: 'cause',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateUnder1',\r\n headerName: 'Ages < 1',\r\n stratification: 'age',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate1to4',\r\n headerName: 'Ages 1-4',\r\n stratification: 'age',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate5to14',\r\n headerName: 'Ages 5-14',\r\n stratification: 'age',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate15to24',\r\n headerName: 'Ages 15-24',\r\n stratification: 'age',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate25to34',\r\n headerName: 'Ages 25-34',\r\n stratification: 'age',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate35to44',\r\n headerName: 'Ages 35-44',\r\n stratification: 'age',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate45to54',\r\n headerName: 'Ages 45-54',\r\n stratification: 'age',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate55to64',\r\n headerName: 'Ages 55-64',\r\n stratification: 'age',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate65to74',\r\n headerName: 'Ages 65-74',\r\n stratification: 'age',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate75to84',\r\n headerName: 'Ages 75-84',\r\n stratification: 'age',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateover85',\r\n headerName: 'Ages 85+',\r\n stratification: 'age',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateFemale',\r\n headerName: 'Female',\r\n stratification: 'sex',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateMale',\r\n headerName: 'Male',\r\n stratification: 'sex',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateBlack',\r\n headerName: 'Black',\r\n stratification: 'TbiRace',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateWhite',\r\n headerName: 'White',\r\n stratification: 'TbiRace',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateOther',\r\n headerName: 'Other',\r\n stratification: 'TbiRace',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateHispanic',\r\n headerName: 'Hispanic',\r\n stratification: 'TbiEthnicity',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateNonHispanic',\r\n headerName: 'Non-Hispanic',\r\n stratification: 'TbiEthnicity',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Annual Age-adjusted Rate of TBI-related Hospitalizations',\r\n },\r\n statewideMortalityTrend: {\r\n tabTitle: 'State Mortality Trend',\r\n tabPath: 'statewideMortalityTrend',\r\n contentType: 'chart',\r\n exportTitle:\r\n 'Annual Age-adjusted Rate of TBI-related Mortality',\r\n exportSubtitle: 'Age-adjusted rate per 100k population',\r\n chartType: 'trendline',\r\n selectable: false,\r\n stratifiable: true,\r\n // The following array of stratifications will create a chart stratification button for each item:\r\n stratifications: [\r\n {\r\n title: 'Age',\r\n field: 'age',\r\n },\r\n {\r\n title: 'Cause',\r\n field: 'cause',\r\n },\r\n {\r\n title: 'Ethnicity',\r\n field: 'TbiEthnicity',\r\n },\r\n {\r\n title: 'Race',\r\n field: 'TbiRace',\r\n },\r\n {\r\n title: 'Sex', // Name that appears for button\r\n field: 'sex', // Must match stratification key name in json response returned from endpoint\r\n },\r\n ],\r\n defaultSelection: '000', // 000 is the code used for statewide data at the DB\r\n defaultSetNames: ['stateRate'],\r\n baseline: '000', // 000 is the code used for statewide data at the DB\r\n info: {\r\n title:\r\n 'Annual Age-adjusted Rate of TBI-related Mortality',\r\n id: 'chart-statewide-tbi-mortality-trend',\r\n subtitle: 'Age-adjusted rate per 100k population',\r\n },\r\n chartTitle: [\r\n 'Annual Age-adjusted Rate of TBI-related Mortality',\r\n ],\r\n chartSubtitle: '',\r\n displayChartTitle: true,\r\n displayChartSubtitle: true,\r\n displayYAxisLabel: true,\r\n displayXAxisLabel: true,\r\n displayChartDiscontinuityGraphic: false,\r\n yAxisLabel: 'Age-adjusted rate per 100,000 population',\r\n xAxisLabel: 'Year',\r\n chartXAxisField: 'year', // should match field name used in incoming dataset\r\n chartDataSets: ['rate', 'stateRate'], // should match field names used in incoming dataset\r\n url: `${process.env.REACT_APP_EPHT_API}/TBI/GetOneYearAgeAdjRate`,\r\n urlParams: [\r\n {\r\n param: 'type',\r\n value: 'TBI_Mortality_AgeAdjRate_Annual',\r\n },\r\n ],\r\n chartConfig: {\r\n mainDatasets: [\r\n {\r\n label: 'County',\r\n setName: 'rate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n baseline: true,\r\n label: 'Statewide',\r\n setName: 'stateRate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n ],\r\n // Note: Baseline dataset should receive `baseline: true` property.\r\n // Additional note: The `order` property will dictate how lines stack on each other, in ascending order. Baseline should be given highest value to ensure it is colored correctly by Chart.js (gray)\r\n stratificationDatasets: [\r\n {\r\n label: 'All',\r\n setName: 'rateTotal',\r\n stratification: 'cause',\r\n title: 'Cause',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 4,\r\n data: [],\r\n },\r\n {\r\n label: 'Falls',\r\n setName: 'rateFalls',\r\n stratification: 'cause',\r\n title: 'Cause',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: 'Firearm',\r\n setName: 'rateFirearm',\r\n stratification: 'cause',\r\n title: 'Cause',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: 'Vehicle',\r\n setName: 'rateMotorVehicle',\r\n stratification: 'cause',\r\n title: 'Cause',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 3,\r\n data: [],\r\n },\r\n {\r\n label: 'All',\r\n setName: 'rateTotal',\r\n stratification: 'age',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 12,\r\n data: [],\r\n },\r\n {\r\n label: '< 1',\r\n setName: 'rateUnder1',\r\n stratification: 'age',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: '1-4',\r\n setName: 'rate1to4',\r\n stratification: 'age',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: '5-14',\r\n setName: 'rate5to14',\r\n stratification: 'age',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 3,\r\n data: [],\r\n },\r\n {\r\n label: '15-24',\r\n setName: 'rate15to24',\r\n stratification: 'age',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 4,\r\n data: [],\r\n },\r\n {\r\n label: '25-34',\r\n setName: 'rate25to34',\r\n stratification: 'age',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 5,\r\n data: [],\r\n },\r\n {\r\n label: '35-44',\r\n setName: 'rate35to44',\r\n stratification: 'age',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 6,\r\n data: [],\r\n },\r\n {\r\n label: '45-54',\r\n setName: 'rate45to54',\r\n stratification: 'age',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 7,\r\n data: [],\r\n },\r\n {\r\n label: '55-64',\r\n setName: 'rate55to64',\r\n stratification: 'age',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 8,\r\n data: [],\r\n },\r\n {\r\n label: '65-74',\r\n setName: 'rate65to74',\r\n stratification: 'age',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 9,\r\n data: [],\r\n },\r\n {\r\n label: '75-84',\r\n setName: 'rate75to84',\r\n stratification: 'age',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 10,\r\n data: [],\r\n },\r\n {\r\n label: '85+',\r\n setName: 'rateover85',\r\n stratification: 'age',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 11,\r\n data: [],\r\n },\r\n {\r\n label: 'All',\r\n setName: 'rateTotal',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 3,\r\n data: [],\r\n },\r\n {\r\n label: 'Female',\r\n setName: 'rateFemale',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: 'Male',\r\n setName: 'rateMale',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: 'All',\r\n setName: 'rateTotal',\r\n stratification: 'TbiRace',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 4,\r\n data: [],\r\n },\r\n {\r\n label: 'Black',\r\n setName: 'rateBlack',\r\n stratification: 'TbiRace',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: 'White',\r\n setName: 'rateWhite',\r\n stratification: 'TbiRace',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: 'Other',\r\n setName: 'rateOther',\r\n stratification: 'TbiRace',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 3,\r\n data: [],\r\n },\r\n {\r\n label: 'All',\r\n setName: 'rateTotal',\r\n stratification: 'TbiEthnicity',\r\n title: 'Ethnicity',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 3,\r\n data: [],\r\n },\r\n {\r\n label: 'Hispanic',\r\n setName: 'rateHispanic',\r\n stratification: 'TbiEthnicity',\r\n title: 'Ethnicity',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: 'Non-Hispanic',\r\n setName: 'rateNonHispanic',\r\n stratification: 'TbiEthnicity',\r\n title: 'Ethnicity',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n ],\r\n },\r\n columnHeaders: [\r\n {\r\n field: 'year',\r\n headerName: 'Year',\r\n width: 85,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate',\r\n headerName: 'County Rate',\r\n width: 134,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'stateRate',\r\n headerName: 'Statewide Rate',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateFalls',\r\n headerName: 'Falls',\r\n stratification: 'cause',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateFirearm',\r\n headerName: 'Firearm',\r\n stratification: 'cause',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateMotorVehicle',\r\n headerName: 'Vehicle',\r\n stratification: 'cause',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateUnder1',\r\n headerName: 'Ages < 1',\r\n stratification: 'age',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate1to4',\r\n headerName: 'Ages 1-4',\r\n stratification: 'age',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate5to14',\r\n headerName: 'Ages 5-14',\r\n stratification: 'age',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate15to24',\r\n headerName: 'Ages 15-24',\r\n stratification: 'age',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate25to34',\r\n headerName: 'Ages 25-34',\r\n stratification: 'age',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate35to44',\r\n headerName: 'Ages 35-44',\r\n stratification: 'age',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate45to54',\r\n headerName: 'Ages 45-54',\r\n stratification: 'age',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate55to64',\r\n headerName: 'Ages 55-64',\r\n stratification: 'age',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate65to74',\r\n headerName: 'Ages 65-74',\r\n stratification: 'age',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate75to84',\r\n headerName: 'Ages 75-84',\r\n stratification: 'age',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateover85',\r\n headerName: 'Ages 85+',\r\n stratification: 'age',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateFemale',\r\n headerName: 'Female',\r\n stratification: 'sex',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateMale',\r\n headerName: 'Male',\r\n stratification: 'sex',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateBlack',\r\n headerName: 'Black',\r\n stratification: 'TbiRace',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateWhite',\r\n headerName: 'White',\r\n stratification: 'TbiRace',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateOther',\r\n headerName: 'Other',\r\n stratification: 'TbiRace',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateHispanic',\r\n headerName: 'Hispanic',\r\n stratification: 'TbiEthnicity',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateNonHispanic',\r\n headerName: 'Non-Hispanic',\r\n stratification: 'TbiEthnicity',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Annual Age-adjusted Rate of TBI-related Mortality',\r\n },\r\n causeEDTable: {\r\n tabTitle: 'County ED Table',\r\n tabPath: 'causeEDTable',\r\n contentType: 'table',\r\n url: `${process.env.REACT_APP_EPHT_API}/TBI/GetThreeYearCrudeRateCause?type=TBI_EDVisits_CrudeRate_3yr`,\r\n info: {\r\n title: 'Cause ED Table',\r\n id: 'table-cause-ED-trend',\r\n subtitle:\r\n 'Unadjusted rate per 100,000 population in 3-year periods',\r\n },\r\n tableTitle:\r\n 'Mean Annual Rate of TBI-related Emergency Department (ED) Visits ',\r\n tableSubtitle:\r\n 'Unadjusted rate per 100,000 population in 3-year periods',\r\n exportTitle:\r\n 'Mean Annual Rate of TBI-related Emergency Department (ED) Visits ',\r\n exportSubtitle:\r\n 'Unadjusted rate per 100k population in 3-year periods ',\r\n columnHeaders: [\r\n {\r\n field: 'year',\r\n headerName: 'Period',\r\n width: 120,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'jurisdiction',\r\n headerName: 'County',\r\n width: 120,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate',\r\n headerName: 'Total',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateFalls',\r\n headerName: 'Falls',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateFirearm',\r\n headerName: 'Firearm',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateMotorVehicle',\r\n headerName: 'Motor Vehicle',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n ],\r\n },\r\n causeHospTable: {\r\n tabTitle: 'County Hosp. Table',\r\n tabPath: 'causeHospTable',\r\n contentType: 'table',\r\n url: `${process.env.REACT_APP_EPHT_API}/TBI/GetThreeYearCrudeRateCause?type=TBI_Hospitalizations_CrudeRate_3yr`,\r\n info: {\r\n title: 'Cause ED Table',\r\n id: 'table-cause-ED-trend',\r\n subtitle:\r\n 'Unadjusted rate per 100,000 population in 3-year periods',\r\n },\r\n tableTitle:\r\n 'Mean Annual Rate of TBI-related Hospitalizations',\r\n tableSubtitle:\r\n 'Unadjusted rate per 100,000 population in 3-year periods',\r\n exportTitle:\r\n 'Mean Annual Rate of TBI-related Hospitalizations',\r\n exportSubtitle:\r\n 'Unadjusted rate per 100k population in 3-year periods',\r\n columnHeaders: [\r\n {\r\n field: 'year',\r\n headerName: 'Period',\r\n width: 120,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'jurisdiction',\r\n headerName: 'County',\r\n width: 120,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate',\r\n headerName: 'Total',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateFalls',\r\n headerName: 'Falls',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateFirearm',\r\n headerName: 'Firearm',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateMotorVehicle',\r\n headerName: 'Motor Vehicle',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n ],\r\n },\r\n stratifiedEDTable: {\r\n tabTitle: 'Stratified County ED Table',\r\n tabPath: 'stratifiedEDTable',\r\n contentType: 'table',\r\n url: `${process.env.REACT_APP_EPHT_API}/TBI/GetFiveYearCrudeRate?type=TBI_EDVisits_CrudeRate_5yr`,\r\n info: {\r\n title:\r\n 'Mean Annual Rate of TBI-related Emergency Department (ED) Visits',\r\n id: 'table-cause-ED-trend',\r\n subtitle:\r\n 'Unadjusted rate per 100,000 population in 5-year periods',\r\n },\r\n tableTitle:\r\n 'Mean Annual Rate of TBI-related Emergency Department (ED) Visits',\r\n tableSubtitle:\r\n 'Unadjusted rate per 100,000 population in 5-year periods ',\r\n exportTitle:\r\n 'Mean Annual Rate of TBI-related Emergency Department (ED) Visits',\r\n exportSubtitle:\r\n 'Unadjusted rate per 100,000 population in 5-year periods',\r\n columnHeaders: [\r\n {\r\n field: 'year',\r\n headerName: 'Period',\r\n width: 120,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'jurisdiction',\r\n headerName: 'County',\r\n width: 120,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateFallsMale',\r\n headerName: 'Falls Male',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateFirearmMale',\r\n headerName: 'Firearm Male',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateMotorVehicleMale',\r\n headerName: 'Motor Vehicle Male',\r\n width: 150,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateFallsFemale',\r\n headerName: 'Falls Female',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateFirearmFemale',\r\n headerName: 'Firearm Female',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateMotorVehicleFemale',\r\n headerName: 'Motor Vehicle Female',\r\n width: 160,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateFallsAgeUnder15',\r\n headerName: 'Falls <15',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateFirearmAgeUnder15',\r\n headerName: 'Fiream <15',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateMotorVehicleAgeUnder15',\r\n headerName: 'Motor Vehicle <15',\r\n width: 140,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateFallsAge15to24',\r\n headerName: 'Falls 15-24',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateFirearmAge15to24',\r\n headerName: 'Fiream 15-24',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateMotorVehicleAge15to24',\r\n headerName: 'Motor Vehicle 15-24',\r\n width: 140,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateFallsAge25to64',\r\n headerName: 'Falls 25-64',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateFirearmAge25to64',\r\n headerName: 'Fiream 25-64',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateMotorVehicleAge25to64',\r\n headerName: 'Motor Vehicle 25-64',\r\n width: 140,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateFallsAge65Plus',\r\n headerName: 'Falls 65+',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateFirearmAge65Plus',\r\n headerName: 'Fiream 65+',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateMotorVehicleAge65Plus',\r\n headerName: 'Motor Vehicle 65+',\r\n width: 140,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateFallsWhite',\r\n headerName: 'Falls White',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateFirearmWhite',\r\n headerName: 'Firearm White',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateMotorVehicleWhite',\r\n headerName: 'Motor Vehicle White',\r\n width: 140,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateFallsBlack',\r\n headerName: 'Falls Black',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateFirearmBlack',\r\n headerName: 'Firearm Black',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateMotorVehicleBlack',\r\n headerName: 'Motor Vehicle Black',\r\n width: 140,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateFallsOther',\r\n headerName: 'Falls Other Races',\r\n width: 140,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateFirearmOther',\r\n headerName: 'Firearm Other Races',\r\n width: 140,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateMotorVehicleOther',\r\n headerName: 'Motor Vehicle Other Races',\r\n width: 180,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateFallsHispanic',\r\n headerName: 'Falls Hispanic',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateFirearmHispanic',\r\n headerName: 'Firearm Hispanic',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateMotorVehicleHispanic',\r\n headerName: 'Motor Vehicle Hispanic',\r\n width: 170,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateFallsNonHispanic',\r\n headerName: 'Falls Non-hispanic',\r\n width: 150,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateFirearmNonHispanic',\r\n headerName: 'Firearm Non-hispanic',\r\n width: 150,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateMotorVehicleNonHispanic',\r\n headerName: 'Motor Vehicle Non-hispanic',\r\n width: 200,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n ],\r\n },\r\n cdcEDTable: {\r\n tabTitle: 'State ED Table',\r\n tabPath: 'cdcEDTable',\r\n contentType: 'table',\r\n url: `${process.env.REACT_APP_EPHT_API}/TBI/GetCDCAgeAdjRate?type=TBI_CDC_EDVisits_AgeAdjRate_Annual`,\r\n info: {\r\n title: 'CDC ED Table',\r\n id: 'table-CDC-ED',\r\n subtitle:\r\n 'Age-adjusted rate per 100,000 population',\r\n },\r\n tableTitle:\r\n 'Annual Rate of TBI-related Emergency Department (ED) Visits',\r\n tableSubtitle:\r\n 'Age-adjusted rate per 100,000 population',\r\n exportTitle:\r\n 'Annual Rate of TBI-related Emergency Department (ED) Visits',\r\n exportSubtitle: 'Age-adjusted rate per 100k population',\r\n columnHeaders: [\r\n {\r\n field: 'year',\r\n headerName: 'Period',\r\n width: 120,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'jurisdiction',\r\n headerName: 'Jurisdiction',\r\n width: 120,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateTotal',\r\n headerName: 'Total',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateTotalFemale',\r\n headerName: 'Female All Ages',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateTotalMale',\r\n headerName: 'Male All Ages',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateUnder1',\r\n headerName: 'Total < 1',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateUnder1Female',\r\n headerName: 'Female < 1',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateUnder1Male',\r\n headerName: 'Male < 1',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate1to4',\r\n headerName: 'Total 1-4',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate1to4Female',\r\n headerName: 'Female 1-4',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate1to4Male',\r\n headerName: 'Male 1-4',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate5to9',\r\n headerName: 'Total 5-9',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate5to9Female',\r\n headerName: 'Female 5-9',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate5to9Male',\r\n headerName: 'Male 5-9',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate10to14',\r\n headerName: 'Total 10-14',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate10to14Female',\r\n headerName: 'Female 10-14',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate10to14Male',\r\n headerName: 'Male 10-14',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate15to19',\r\n headerName: 'Total 15-19',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate15to19Female',\r\n headerName: 'Female 15-19',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate15to19Male',\r\n headerName: 'Male 15-19',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate20to24',\r\n headerName: 'Total 20-24',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate20to24Female',\r\n headerName: 'Female 20-24',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate20to24Male',\r\n headerName: 'Male 20-24',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate25to34',\r\n headerName: 'Total 25-34',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate25to34Female',\r\n headerName: 'Female 25-34',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate25to34Male',\r\n headerName: 'Male 25-34',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate35to44',\r\n headerName: 'Total 35-44',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate35to44Female',\r\n headerName: 'Female 35-44',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate35to44Male',\r\n headerName: 'Male 35-44',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate45to54',\r\n headerName: 'Total 45-54',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate45to54Female',\r\n headerName: 'Female 45-54',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate45to54Male',\r\n headerName: 'Male 45-54',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate55to64',\r\n headerName: 'Total 55-64',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate55to64Female',\r\n headerName: 'Female 55-64',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate55to64Male',\r\n headerName: 'Male 55-64',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate65to74',\r\n headerName: 'Total 65-74',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate65to74Female',\r\n headerName: 'Female 65-74',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate65to74Male',\r\n headerName: 'Male 65-74',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate75to84',\r\n headerName: 'Total 75-84',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate75to84Female',\r\n headerName: 'Female 75-84',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate75to84Male',\r\n headerName: 'Male 75-84',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateover85',\r\n headerName: 'Total 85+',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateover85Female',\r\n headerName: 'Female 85+',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateover85Male',\r\n headerName: 'Male 85+',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n ],\r\n },\r\n cdcHospTable: {\r\n tabTitle: 'State Hosp. Table',\r\n tabPath: 'cdcHospTable',\r\n contentType: 'table',\r\n url: `${process.env.REACT_APP_EPHT_API}/TBI/GetCDCAgeAdjRate?type=TBI_CDC_Hospitalizations_AgeAdjRate_Annual`,\r\n info: {\r\n title: 'CDC Hosp Table',\r\n id: 'table-CDC-Hosp',\r\n subtitle:\r\n 'Age-adjusted rate per 100,000 population',\r\n },\r\n tableTitle:\r\n 'Annual Rate of TBI-related Hospitalizations',\r\n tableSubtitle:\r\n 'Age-adjusted rate per 100,000 population',\r\n exportTitle:\r\n 'Annual Rate of TBI-related Hospitalizations',\r\n exportSubtitle: 'Age-adjusted rate per 100k population',\r\n columnHeaders: [\r\n {\r\n field: 'year',\r\n headerName: 'Period',\r\n width: 120,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'jurisdiction',\r\n headerName: 'Jurisdiction',\r\n width: 120,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateTotal',\r\n headerName: 'Total',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateTotalFemale',\r\n headerName: 'Female All Ages',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateTotalMale',\r\n headerName: 'Male All Ages',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateUnder1',\r\n headerName: 'Total < 1',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateUnder1Female',\r\n headerName: 'Female < 1',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateUnder1Male',\r\n headerName: 'Male < 1',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate1to4',\r\n headerName: 'Total 1-4',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate1to4Female',\r\n headerName: 'Female 1-4',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate1to4Male',\r\n headerName: 'Male 1-4',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate5to9',\r\n headerName: 'Total 5-9',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate5to9Female',\r\n headerName: 'Female 5-9',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate5to9Male',\r\n headerName: 'Male 5-9',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate10to14',\r\n headerName: 'Total 10-14',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate10to14Female',\r\n headerName: 'Female 10-14',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate10to14Male',\r\n headerName: 'Male 10-14',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate15to19',\r\n headerName: 'Total 15-19',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate15to19Female',\r\n headerName: 'Female 15-19',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate15to19Male',\r\n headerName: 'Male 15-19',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate20to24',\r\n headerName: 'Total 20-24',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate20to24Female',\r\n headerName: 'Female 20-24',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate20to24Male',\r\n headerName: 'Male 20-24',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate25to34',\r\n headerName: 'Total 25-34',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate25to34Female',\r\n headerName: 'Female 25-34',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate25to34Male',\r\n headerName: 'Male 25-34',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate35to44',\r\n headerName: 'Total 35-44',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate35to44Female',\r\n headerName: 'Female 35-44',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate35to44Male',\r\n headerName: 'Male 35-44',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate45to54',\r\n headerName: 'Total 45-54',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate45to54Female',\r\n headerName: 'Female 45-54',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate45to54Male',\r\n headerName: 'Male 45-54',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate55to64',\r\n headerName: 'Total 55-64',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate55to64Female',\r\n headerName: 'Female 55-64',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate55to64Male',\r\n headerName: 'Male 55-64',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate65to74',\r\n headerName: 'Total 65-74',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate65to74Female',\r\n headerName: 'Female 65-74',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate65to74Male',\r\n headerName: 'Male 65-74',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate75to84',\r\n headerName: 'Total 75-84',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate75to84Female',\r\n headerName: 'Female 75-84',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate75to84Male',\r\n headerName: 'Male 75-84',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateover85',\r\n headerName: 'Total 85+',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateover85Female',\r\n headerName: 'Female 85+',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateover85Male',\r\n headerName: 'Male 85+',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n ],\r\n },\r\n cdcMortalityTable: {\r\n tabTitle: 'State Mortality Table',\r\n tabPath: 'cdcMortalityTable',\r\n contentType: 'table',\r\n url: `${process.env.REACT_APP_EPHT_API}/TBI/GetCDCAgeAdjRate?type=TBI_CDC_Mortality_AgeAdjRate_Annual`,\r\n info: {\r\n title: 'CDC Mortality Table',\r\n id: 'table-CDC-Mortality',\r\n subtitle:\r\n 'Age-adjusted rate per 100,000 population',\r\n },\r\n tableTitle: 'Annual Rate of TBI-related Mortality',\r\n tableSubtitle:\r\n 'Age-adjusted rate per 100,000 population',\r\n exportTitle: 'Annual Rate of TBI-related Mortality',\r\n exportSubtitle: 'Age-adjusted rate per 100k population',\r\n columnHeaders: [\r\n {\r\n field: 'year',\r\n headerName: 'Period',\r\n width: 120,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'jurisdiction',\r\n headerName: 'Jurisdiction',\r\n width: 120,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateTotal',\r\n headerName: 'Total',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateTotalFemale',\r\n headerName: 'Female All Ages',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateTotalMale',\r\n headerName: 'Male All Ages',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateUnder1',\r\n headerName: 'Total < 1',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateUnder1Female',\r\n headerName: 'Female < 1',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateUnder1Male',\r\n headerName: 'Male < 1',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate1to4',\r\n headerName: 'Total 1-4',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate1to4Female',\r\n headerName: 'Female 1-4',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate1to4Male',\r\n headerName: 'Male 1-4',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate5to9',\r\n headerName: 'Total 5-9',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate5to9Female',\r\n headerName: 'Female 5-9',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate5to9Male',\r\n headerName: 'Male 5-9',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate10to14',\r\n headerName: 'Total 10-14',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate10to14Female',\r\n headerName: 'Female 10-14',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate10to14Male',\r\n headerName: 'Male 10-14',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate15to19',\r\n headerName: 'Total 15-19',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate15to19Female',\r\n headerName: 'Female 15-19',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate15to19Male',\r\n headerName: 'Male 15-19',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate20to24',\r\n headerName: 'Total 20-24',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate20to24Female',\r\n headerName: 'Female 20-24',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate20to24Male',\r\n headerName: 'Male 20-24',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate25to34',\r\n headerName: 'Total 25-34',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate25to34Female',\r\n headerName: 'Female 25-34',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate25to34Male',\r\n headerName: 'Male 25-34',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate35to44',\r\n headerName: 'Total 35-44',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate35to44Female',\r\n headerName: 'Female 35-44',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate35to44Male',\r\n headerName: 'Male 35-44',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate45to54',\r\n headerName: 'Total 45-54',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate45to54Female',\r\n headerName: 'Female 45-54',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate45to54Male',\r\n headerName: 'Male 45-54',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate55to64',\r\n headerName: 'Total 55-64',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate55to64Female',\r\n headerName: 'Female 55-64',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate55to64Male',\r\n headerName: 'Male 55-64',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate65to74',\r\n headerName: 'Total 65-74',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate65to74Female',\r\n headerName: 'Female 65-74',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate65to74Male',\r\n headerName: 'Male 65-74',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate75to84',\r\n headerName: 'Total 75-84',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate75to84Female',\r\n headerName: 'Female 75-84',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate75to84Male',\r\n headerName: 'Male 75-84',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateover85',\r\n headerName: 'Total 85+',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateover85Female',\r\n headerName: 'Female 85+',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateover85Male',\r\n headerName: 'Male 85+',\r\n width: 120,\r\n align: 'left',\r\n customFormat: 2,\r\n headerAlign: 'left',\r\n },\r\n ],\r\n },\r\n },\r\n about: ` `, // Fetched from the database\r\n resources: ` `, // Fetched from the database\r\n },\r\n },\r\n },\r\n cancer: {\r\n topicTitle: 'Cancer',\r\n topicPath: 'cancer',\r\n category: 'health',\r\n overview: '

Cancer Overview here:

',\r\n aboutData: `
Data Facts
`,\r\n hasSubtopics: true,\r\n themeOverviews: [\r\n {\r\n theme: 'Status',\r\n text: 'Provides a detailed view of cancer...',\r\n },\r\n ],\r\n },\r\n 'cancer-allCause': {\r\n topicTitle: 'All Cause Cancer',\r\n topicPath: 'cancer-allCause',\r\n parentTopic: 'cancer',\r\n category: 'health',\r\n overview: [\r\n `

Cancer is a group of diseases in which cells of the body grow out of control. Each year, more than 31,000 Marylanders are diagnosed with invasive cancer, and more than 10,000 Marylanders die due to cancer.

The EPHT data portal contains information on some of the most common cancers and those about which the Department receives questions. For more information, please visit the Maryland Center for Cancer Prevention and Control.

`,\r\n ],\r\n themeOverviews: [\r\n {\r\n theme: 'Status',\r\n text:\r\n 'Provides a detailed view of different types of cancer over time throughout Maryland by area.',\r\n },\r\n ],\r\n aboutData: `
Data FactsCancer
Why these data are importantCancer continues to be the second leading cause of death in Maryland and nationally. The presence of certain contaminants in the environment has been found to be correlated with the incidence of some cancers. Tracking these cancers is important to better understand their distributions in the population, and how this may potentially be impacted by environmental exposures.
Data SourcesMaryland Cancer Registry
Years available2010 - most recent complete year available (generally 2 years prior to current year)
Data source descriptionAll new cases of reportable cancers (excluding non-genital squamous cell or basal cell skin cancer) that are diagnosed and/or treated in Maryland and reported to the MCR
What's reportedCancer Incidence
How it's reportedAge adjusted incidence rates
Level of geographic detail State, county, and census tract
Level of demographic detailRace/ethnicity and sex
Data disclaimers

Gender is reported to the MCR as male, female, hermaphrodite, transsexual, and unknown (not stated); but numbers and rates for only males and females are displayed here. As a result, the totals shown in the count for number of cancer cases may not equal the sum of males and females.

County is reported to the MCR as the jurisdiction of residence for each cancer case or is categorized as unknown. As a result, the totals shown in the count for number of cases may not equal the sum of cancer cases across the 24 jurisdictions in Maryland due to cases with unknown county.

Age-adjusted rates do not include cancer cases for which age has not been reported. Incidence rates were calculated using the 2000 US standard population.

Incidence data provided by the MCR include the race categories: white, black, other, and unknown, regardless of Hispanic ethnicity. The \"Other\" race category includes cases reported as American Indian or Alaskan Native, Asian or Pacific Islander, and any other race category, except cases with unknown or missing race.

The summary data provided on this website are downloadable. For more detailed data, refer to the data sources.Yes
Environmental Health Helpline1-866-703-3266
mdh.envhealth@maryland.gov
Last Updated6/14/2023
Data suppression rules

For county-level data: Rates are suppressed when counts of cases are between 1 and 15.

For census tract-level data: Rates are suppressed when counts of cases are between 1 and 15 and/or the total population size is less than 5,000.

`,\r\n countySuppressionRules: {\r\n range: '1 to 10',\r\n populationMin: '5,000',\r\n },\r\n omitNcdmData: true, // Prevents the Download All NCDM button from displaying and skips the call to get NCDM configs\r\n themes: {\r\n status: {\r\n defaultTabPath: 'allCause',\r\n themeTitle: 'Status',\r\n themePath: 'status',\r\n tabs: {\r\n allCause: {\r\n tabTitle: 'Map',\r\n tabPath: 'allCause',\r\n contentType: 'map',\r\n contentTitle:\r\n 'Age-Adjusted Incidence Rate of All Cause Cancer',\r\n exportTitle: 'Age-Adjusted Incidence All Cause Cancer',\r\n exportSubtitle:\r\n 'Age-adjusted incidence rate per 100k population (2015-2019) ',\r\n mapSets: [\r\n {\r\n set: 'primary',\r\n geometry: 'County',\r\n outFields: ['County', 'Rate'],\r\n columnHeaders: [\r\n {\r\n field: 'County',\r\n headerName: 'County',\r\n flex: 1,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'Rate',\r\n headerName: 'Rate',\r\n exportHeaderName: 'Rate',\r\n flex: 1, //\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Age-Adjusted Incidence Rate of All Cause Cancer',\r\n popupContent: {\r\n title: {\r\n field: 'FullCounty',\r\n },\r\n health: {\r\n name:\r\n 'All Cause Cancer rate per 100,000',\r\n field: 'Rate',\r\n unit: '',\r\n },\r\n },\r\n setLayers: [\r\n {\r\n id: 'county-bladder-cancer',\r\n zIndexPosition: 'back',\r\n title:\r\n 'Incidence Rate of All Cause Cancer by County',\r\n yearKey: 'Period',\r\n subtitle:\r\n 'Age-adjusted rate per 100,000 population',\r\n defaultVisible: true,\r\n sourceLayer: true,\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/CancerCounty/MapServer/4`,\r\n },\r\n ],\r\n },\r\n {\r\n set: 'secondary',\r\n geometry: 'Tract',\r\n outFields: [\r\n 'GEOID',\r\n 'TractCode',\r\n 'TractName',\r\n 'FullCounty',\r\n 'Rate',\r\n ],\r\n columnHeaders: [\r\n {\r\n field: 'FullCounty',\r\n headerName: 'County',\r\n flex: 1,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'TractName',\r\n headerName: 'Tract Name',\r\n flex: 1,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'Rate',\r\n headerName: 'Rate',\r\n exportHeaderName: 'Rate',\r\n flex: 1, //\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Age-Adjusted Incidence Rate of All Cause Cancer',\r\n popupContent: {\r\n title: {\r\n field: 'PopupTitle',\r\n },\r\n health: {\r\n name:\r\n 'All Cause Cancer rate per 100,000',\r\n field: 'Rate',\r\n unit: '',\r\n },\r\n },\r\n setLayers: [\r\n {\r\n id: 'census-tract-all-cause-cancer',\r\n zIndexPosition: 'back',\r\n title:\r\n 'Incidence Rate of All Cause Cancer by Census Tract',\r\n yearKey: 'Year',\r\n subtitle:\r\n 'Age-adjusted rate per 100,000 population (2015-2019)',\r\n defaultVisible: true,\r\n sourceLayer: true,\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/CancerCensusTract/MapServer/0`,\r\n },\r\n {\r\n id: 'county-outline-all-cause-cancer',\r\n zIndexPosition: 'front',\r\n title: '',\r\n yearKey: 'Year',\r\n subtitle: '',\r\n defaultVisible: true,\r\n sourceLayer: false,\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/CountyBoundaries/MapServer/0`,\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n allCauseTrend: {\r\n tabTitle: 'Trend',\r\n tabPath: 'allCauseTrend',\r\n contentType: 'chart',\r\n // No contentTitle for charts, will be controlled in \"chartTitle\" property below //\r\n exportTitle:\r\n 'Age-Adjusted Incidence Rate of All Cause Cancer',\r\n exportSubtitle:\r\n 'Age-adjusted incidence rate per 100k population',\r\n chartType: 'trendline',\r\n selectable: true,\r\n stratifiable: false,\r\n\r\n // The following array of stratifications will create a chart stratification button for each item:\r\n stratifications: [\r\n {\r\n title: 'Race', // Name that appears for button\r\n field: 'CancerRace', // Must match stratification key name in json response returned from endpoint\r\n },\r\n {\r\n title: 'Sex', // Name that appears for button\r\n field: 'sex', // Must match stratification key name in json response returned from endpoint\r\n },\r\n ],\r\n defaultSelection: '001',\r\n defaultSetNames: ['rate'],\r\n // baseline: '000' Left in for when statewide data is present.\r\n info: {\r\n title: 'Rate of All Cause Cancer',\r\n id: 'chart-all-cause-overall-trend',\r\n subtitle: 'Age-adjusted rate per 100,000',\r\n },\r\n chartTitle: [\r\n 'Age-Adjusted Incidence Rate of All Cause Cancer',\r\n ],\r\n chartSubtitle: '',\r\n displayChartTitle: true,\r\n displayChartSubtitle: false,\r\n displayYAxisLabel: true,\r\n displayXAxisLabel: true,\r\n displayChartDiscontinuityGraphic: false,\r\n yAxisLabel:\r\n 'Age-adjusted incidence rate per 100,000 population',\r\n xAxisLabel: 'Period',\r\n chartXAxisField: 'year', // should match field name used in incoming dataset\r\n chartDataSets: ['rate', 'stateRate'], // should match field names used in incoming dataset\r\n url: `${process.env.REACT_APP_EPHT_API}/Cancer/GetRate`,\r\n urlParams: [\r\n { param: 'jurisdiction', valueKey: 'code' },\r\n { param: 'type', value: 'Cancer_AllCause_5yr' },\r\n ],\r\n chartConfig: {\r\n mainDatasets: [\r\n {\r\n label: 'County',\r\n setName: 'rate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n // Left in place for when statewide data is available.\r\n // {\r\n // label: 'Statewide',\r\n // setName: 'stateRate',\r\n // fill: false,\r\n // pointRadius: 3,\r\n // pointBorderWidth: 3,\r\n // pointHoverRadius: 8,\r\n // lineTension: 0,\r\n // order: 2,\r\n // data: [],\r\n // },\r\n ],\r\n // Note: Baseline dataset should receive `baseline: true` property.\r\n // Additional note: The `order` property will dictate how lines stack on each other, in ascending order. Baseline should be given highest value to ensure it is colored correctly by Chart.js (gray)\r\n stratificationDatasets: [\r\n {\r\n label: 'White',\r\n setName: 'rateWhite',\r\n stratification: 'CancerRace',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: 'Black',\r\n setName: 'rateBlack',\r\n stratification: 'CancerRace',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: 'All',\r\n setName: 'rateTotal',\r\n baseline: true,\r\n stratification: 'CancerRace',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 5,\r\n data: [],\r\n },\r\n {\r\n label: 'Female',\r\n setName: 'rateFemale',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: 'Male',\r\n setName: 'rateMale',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: 'All',\r\n baseline: true,\r\n setName: 'rateTotal',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 3,\r\n data: [],\r\n },\r\n ],\r\n },\r\n columnHeaders: [\r\n {\r\n field: 'year',\r\n headerName: 'Year',\r\n width: 115,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate',\r\n headerName: 'County Rate',\r\n width: 134,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'stateRate',\r\n headerName: 'Statewide Rate',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Age-Adjusted Incidence Rate of All Cause Cancer',\r\n },\r\n },\r\n about: ` `, // Fetched from the database\r\n resources: [\r\n 'External Link',\r\n 'Other Link',\r\n 'More Info',\r\n 'Downloadable PDF',\r\n 'Downloadable CSV',\r\n 'Link',\r\n ],\r\n },\r\n },\r\n },\r\n 'cancer-leukemia': {\r\n topicTitle: 'Leukemia',\r\n topicPath: 'cancer-leukemia',\r\n parentTopic: 'cancer',\r\n category: 'health',\r\n defaultTabPath: 'overall',\r\n overview: [\r\n `

Cancer is a group of diseases in which cells of the body grow out of control. Each year, more than 31,000 Marylanders are diagnosed with invasive cancer, and more than 10,000 Marylanders die due to cancer.

The EPHT data portal contains information on some of the most common cancers and those about which the Department receives questions. For more information, please visit the Maryland Center for Cancer Prevention and Control.

`,\r\n ],\r\n themeOverviews: [\r\n {\r\n theme: 'Status',\r\n text:\r\n 'Provides a detailed view of different types of cancer over time throughout Maryland by area.',\r\n },\r\n {\r\n theme: 'More Data',\r\n text:\r\n 'Provides a detailed view of Nationally Consistent Data and Measures (NCDMs) for cancer as specified by the Centers for Disease Control and Prevention (CDC). All additional data are available for download.',\r\n },\r\n ],\r\n aboutData: `
Data FactsCancer
Why these data are importantCancer continues to be the second leading cause of death in Maryland and nationally. The presence of certain contaminants in the environment has been found to be correlated with the incidence of some cancers. Tracking these cancers is important to better understand their distributions in the population, and how this may potentially be impacted by environmental exposures.
Data SourcesMaryland Cancer Registry
Years available2010 - most recent complete year available (generally 2 years prior to current year)
Data source descriptionAll new cases of reportable cancers (excluding non-genital squamous cell or basal cell skin cancer) that are diagnosed and/or treated in Maryland and reported to the MCR
What's reportedCancer Incidence
How it's reportedAge adjusted incidence rates
Level of geographic detail State, county, and census tract
Level of demographic detailRace/ethnicity and sex
Data disclaimers

Gender is reported to the MCR as male, female, hermaphrodite, transsexual, and unknown (not stated); but numbers and rates for only males and females are displayed here. As a result, the totals shown in the count for number of cancer cases may not equal the sum of males and females.

County is reported to the MCR as the jurisdiction of residence for each cancer case or is categorized as unknown. As a result, the totals shown in the count for number of cases may not equal the sum of cancer cases across the 24 jurisdictions in Maryland due to cases with unknown county.

Age-adjusted rates do not include cancer cases for which age has not been reported. Incidence rates were calculated using the 2000 US standard population.

Incidence data provided by the MCR include the race categories: white, black, other, and unknown, regardless of Hispanic ethnicity. The \"Other\" race category includes cases reported as American Indian or Alaskan Native, Asian or Pacific Islander, and any other race category, except cases with unknown or missing race.

The summary data provided on this website are downloadable. For more detailed data, refer to the data sources.Yes
Environmental Health Helpline1-866-703-3266
mdh.envhealth@maryland.gov
Last Updated6/14/2023
Data suppression rules

For county-level data: Rates are suppressed when counts of cases are between 1 and 15.

For census tract-level data: Rates are suppressed when counts of cases are between 1 and 15 and/or the total population size is less than 5,000.

`,\r\n countySuppressionRules: {\r\n range: '1 to 10',\r\n populationMin: '5,000',\r\n },\r\n omitNcdmData: false, // Prevents the Download All NCDM button from displaying and skips the call to get NCDM configs\r\n themes: {\r\n status: {\r\n defaultTabPath: 'overall',\r\n themeTitle: 'Status',\r\n themePath: 'status',\r\n tabs: {\r\n overall: {\r\n tabTitle: 'Overall Map',\r\n tabPath: 'overall',\r\n contentType: 'map',\r\n contentTitle: 'Age-Adjusted Incidence Rate of Leukemia',\r\n exportTitle: 'Age-Adjusted Incidence Rate of Leukemia',\r\n exportSubtitle:\r\n 'Age-adjusted incidence rate per 100k population (2016-2020)',\r\n mapSets: [\r\n {\r\n set: 'primary',\r\n geometry: 'County',\r\n outFields: ['County', 'Rate'],\r\n columnHeaders: [\r\n {\r\n field: 'County',\r\n headerName: 'County',\r\n flex: 1,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'Rate',\r\n headerName: 'Rate',\r\n exportHeaderName: 'Rate',\r\n flex: 1, //\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Age-Adjusted Incidence Rate of Leukemia',\r\n popupContent: {\r\n title: {\r\n field: 'FullCounty',\r\n },\r\n health: {\r\n name: 'Leukemia rate per 100,000',\r\n field: 'Rate',\r\n unit: '',\r\n },\r\n },\r\n setLayers: [\r\n {\r\n id: 'county-overall-cancer',\r\n zIndexPosition: 'back',\r\n title:\r\n 'Incidence Rate of Leukemia by County',\r\n yearKey: 'Period',\r\n subtitle:\r\n 'Age-adjusted rate per 100,000 population',\r\n defaultVisible: true,\r\n sourceLayer: true,\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/CancerCounty/MapServer/11`,\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n overallTrend: {\r\n tabTitle: 'Overall Trend',\r\n tabPath: 'overallTrend',\r\n contentType: 'chart',\r\n // No contentTitle for charts, will be controlled in \"chartTitle\" property below //\r\n exportTitle: 'Age-Adjusted Incidence Rate of Leukemia',\r\n exportSubtitle:\r\n 'Age-adjusted incidence rate per 100k population',\r\n chartType: 'trendline',\r\n selectable: true,\r\n stratifiable: true,\r\n\r\n // The following array of stratifications will create a chart stratification button for each item:\r\n stratifications: [\r\n {\r\n title: 'Race', // Name that appears for button\r\n field: 'CancerRace', // Must match stratification key name in json response returned from endpoint\r\n },\r\n {\r\n title: 'Sex', // Name that appears for button\r\n field: 'sex', // Must match stratification key name in json response returned from endpoint\r\n },\r\n ],\r\n defaultSelection: '000', // 000 is the code used for statewide data at the DB\r\n defaultSetNames: ['stateRate'],\r\n baseline: '000',\r\n info: {\r\n title: 'Rate of Leukemia',\r\n id: 'chart-leukemia-overall-trend',\r\n subtitle: 'Age-adjusted rate per 100,000',\r\n },\r\n chartTitle: ['Age-Adjusted Incidence Rate of Leukemia'],\r\n chartSubtitle: '',\r\n displayChartTitle: true,\r\n displayChartSubtitle: false,\r\n displayYAxisLabel: true,\r\n displayXAxisLabel: true,\r\n displayChartDiscontinuityGraphic: false,\r\n yAxisLabel:\r\n 'Age-adjusted incidence rate per 100,000 population',\r\n xAxisLabel: 'Period',\r\n chartXAxisField: 'year', // should match field name used in incoming dataset\r\n chartDataSets: ['rate', 'stateRate'], // should match field names used in incoming dataset\r\n url: `${process.env.REACT_APP_EPHT_API}/Cancer/GetRate`,\r\n urlParams: [\r\n { param: 'jurisdiction', valueKey: 'code' },\r\n { param: 'type', value: 'Cancer_Leukemia_5yr' },\r\n ],\r\n chartConfig: {\r\n mainDatasets: [\r\n {\r\n label: 'County',\r\n setName: 'rate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n baseline: true,\r\n label: 'Statewide',\r\n setName: 'stateRate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n ],\r\n // Note: Baseline dataset should receive `baseline: true` property.\r\n // Additional note: The `order` property will dictate how lines stack on each other, in ascending order. Baseline should be given highest value to ensure it is colored correctly by Chart.js (gray)\r\n stratificationDatasets: [\r\n {\r\n label: 'White',\r\n setName: 'rateWhite',\r\n stratification: 'CancerRace',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: 'Black',\r\n setName: 'rateBlack',\r\n stratification: 'CancerRace',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: 'All',\r\n setName: 'rateTotal',\r\n baseline: true,\r\n stratification: 'CancerRace',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 5,\r\n data: [],\r\n },\r\n {\r\n label: 'Female',\r\n setName: 'rateFemale',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: 'Male',\r\n setName: 'rateMale',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: 'All',\r\n baseline: true,\r\n setName: 'rateTotal',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 3,\r\n data: [],\r\n },\r\n ],\r\n },\r\n columnHeaders: [\r\n {\r\n field: 'year',\r\n headerName: 'Year',\r\n width: 115,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate',\r\n headerName: 'County Rate',\r\n width: 134,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'stateRate',\r\n headerName: 'Statewide Rate',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateWhite',\r\n headerName: 'White',\r\n stratification: 'CancerRace',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateBlack',\r\n headerName: 'Black',\r\n stratification: 'CancerRace',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateMale',\r\n headerName: 'Male',\r\n stratification: 'sex',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateFemale',\r\n headerName: 'Female',\r\n stratification: 'sex',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle: 'Age-Adjusted Incidence Rate of Leukemia',\r\n },\r\n acuteMyeloid: {\r\n tabTitle: 'AML Map',\r\n tabPath: 'acuteMyeloid',\r\n contentType: 'map',\r\n contentTitle:\r\n 'Age-Adjusted Incidence Rate of Acute Myeloid Leukemia (AML)',\r\n exportTitle:\r\n 'Age-Adjusted Incidence Rate of Acute Myeloid Leukemia (AML)',\r\n exportSubtitle:\r\n 'Age-adjusted incidence rate per 100k population (2016-2020) ',\r\n mapSets: [\r\n {\r\n set: 'primary',\r\n geometry: 'County',\r\n outFields: ['County', 'Rate'],\r\n columnHeaders: [\r\n {\r\n field: 'County',\r\n headerName: 'County',\r\n flex: 1,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'Rate',\r\n headerName: 'Rate',\r\n exportHeaderName: 'Rate',\r\n flex: 1, //\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Age-Adjusted Incidence Rate of Acute Myeloid Leukemia (AML)',\r\n popupContent: {\r\n title: {\r\n field: 'FullCounty',\r\n },\r\n health: {\r\n name:\r\n 'Acute Myeloid Leukemia rate per 100,000',\r\n field: 'Rate',\r\n unit: '',\r\n },\r\n },\r\n setLayers: [\r\n {\r\n id: 'county-acute-myeloid-cancer',\r\n zIndexPosition: 'back',\r\n title:\r\n 'Incidence Rate of Acute Myeloid Leukemia by County',\r\n yearKey: 'Period',\r\n subtitle:\r\n 'Age-adjusted rate per 100,000 population',\r\n defaultVisible: true,\r\n sourceLayer: true,\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/CancerCounty/MapServer/9`,\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n acuteMyeloidTrend: {\r\n tabTitle: 'AML Trend',\r\n tabPath: 'acuteMyeloidTrend',\r\n contentType: 'chart',\r\n exportTitle:\r\n 'Age-Adjusted Incidence Rate of Acute Myeloid Leukemia (AML)',\r\n exportSubtitle:\r\n 'Age-adjusted incidence rate per 100k population',\r\n chartType: 'trendline',\r\n selectable: true,\r\n stratifiable: true,\r\n\r\n // The following array of stratifications will create a chart stratification button for each item:\r\n stratifications: [\r\n {\r\n title: 'Race', // Name that appears for button\r\n field: 'CancerRace', // Must match stratification key name in json response returned from endpoint\r\n },\r\n {\r\n title: 'Sex', // Name that appears for button\r\n field: 'sex', // Must match stratification key name in json response returned from endpoint\r\n },\r\n ],\r\n defaultSelection: '000', // 000 is the code used for statewide data at the DB\r\n defaultSetNames: ['stateRate'],\r\n baseline: '000',\r\n info: {\r\n title: 'Rate of AML Leukemia',\r\n id: 'chart-leukemia-aml-trend',\r\n subtitle: 'Age-adjusted rate per 100,000',\r\n },\r\n chartTitle: [\r\n 'Age-Adjusted Incidence Rate of Acute Myeloid Leukemia (AML)',\r\n ],\r\n chartSubtitle: '',\r\n displayChartTitle: true,\r\n displayChartSubtitle: false,\r\n displayYAxisLabel: true,\r\n displayXAxisLabel: true,\r\n displayChartDiscontinuityGraphic: false,\r\n yAxisLabel:\r\n 'Age-adjusted incidence rate per 100,000 population',\r\n xAxisLabel: 'Period',\r\n chartXAxisField: 'year', // should match field name used in incoming dataset\r\n chartDataSets: ['rate', 'stateRate'], // should match field names used in incoming dataset\r\n url: `${process.env.REACT_APP_EPHT_API}/Cancer/GetRate`,\r\n urlParams: [\r\n { param: 'jurisdiction', valueKey: 'code' },\r\n {\r\n param: 'type',\r\n value: 'Cancer_Leukemia_AcuteMyleoid_5yr',\r\n },\r\n ],\r\n chartConfig: {\r\n mainDatasets: [\r\n {\r\n label: 'County',\r\n setName: 'rate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n baseline: true,\r\n label: 'Statewide',\r\n setName: 'stateRate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n ],\r\n // Note: Baseline dataset should receive `baseline: true` property.\r\n // Additional note: The `order` property will dictate how lines stack on each other, in ascending order. Baseline should be given highest value to ensure it is colored correctly by Chart.js (gray)\r\n stratificationDatasets: [\r\n {\r\n label: 'White',\r\n setName: 'rateWhite',\r\n stratification: 'CancerRace',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: 'Black',\r\n setName: 'rateBlack',\r\n stratification: 'CancerRace',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: 'All',\r\n setName: 'rateTotal',\r\n baseline: true,\r\n stratification: 'CancerRace',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 5,\r\n data: [],\r\n },\r\n {\r\n label: 'Female',\r\n setName: 'rateFemale',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: 'Male',\r\n setName: 'rateMale',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: 'All',\r\n baseline: true,\r\n setName: 'rateTotal',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 3,\r\n data: [],\r\n },\r\n ],\r\n },\r\n columnHeaders: [\r\n {\r\n field: 'year',\r\n headerName: 'Year',\r\n width: 115,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate',\r\n headerName: 'County Rate',\r\n width: 134,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'stateRate',\r\n headerName: 'Statewide Rate',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateWhite',\r\n headerName: 'White',\r\n stratification: 'CancerRace',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateBlack',\r\n headerName: 'Black',\r\n stratification: 'CancerRace',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateMale',\r\n headerName: 'Male',\r\n stratification: 'sex',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateFemale',\r\n headerName: 'Female',\r\n stratification: 'sex',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Age-Adjusted Incidence Rate of Acute Myeloid Leukemia (AML)',\r\n },\r\n chronicLymphocytic: {\r\n tabTitle: 'CLL Map',\r\n tabPath: 'chronicLymphocytic',\r\n contentType: 'map',\r\n contentTitle:\r\n 'Age-Adjusted Incidence Rate of Chronic Lymphocytic Leukemia (CLL)',\r\n exportTitle:\r\n 'Age-Adjusted Incidence Rate of Chronic Lymphocytic Leukemia (CLL)',\r\n exportSubtitle:\r\n 'Age-adjusted incidence rate per 100k population (2016-2020) ',\r\n mapSets: [\r\n {\r\n set: 'primary',\r\n geometry: 'County',\r\n outFields: ['County', 'Rate'],\r\n columnHeaders: [\r\n {\r\n field: 'County',\r\n headerName: 'County',\r\n flex: 1,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'Rate',\r\n headerName: 'Rate',\r\n exportHeaderName: 'Rate',\r\n flex: 1, //\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Age-Adjusted Incidence Rate of Chronic Lymphocytic Leukemia (CLL)',\r\n popupContent: {\r\n title: {\r\n field: 'FullCounty',\r\n },\r\n health: {\r\n name:\r\n 'Chronic Lymphocytic Leukemia rate per 100,000',\r\n field: 'Rate',\r\n unit: '',\r\n },\r\n },\r\n setLayers: [\r\n {\r\n id: 'county-chronic-lymphocytic-cancer',\r\n zIndexPosition: 'back',\r\n title:\r\n 'Incidence Rate of Chronic Lymphocytic Leukemia by County',\r\n yearKey: 'Period',\r\n subtitle:\r\n 'Age-adjusted rate per 100,000 population',\r\n defaultVisible: true,\r\n sourceLayer: true,\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/CancerCounty/MapServer/10`,\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n chronicLymphocyticTrend: {\r\n tabTitle: 'CLL Trend',\r\n tabPath: 'chronicLymphocyticTrend',\r\n contentType: 'chart',\r\n exportTitle:\r\n 'Age-Adjusted Incidence Rate of Chronic Lymphocytic Leukemia (CLL)',\r\n exportSubtitle:\r\n 'Age-adjusted incidence rate per 100k population',\r\n chartType: 'trendline',\r\n selectable: true,\r\n stratifiable: true,\r\n\r\n // The following array of stratifications will create a chart stratification button for each item:\r\n stratifications: [\r\n {\r\n title: 'Race', // Name that appears for button\r\n field: 'CancerRace', // Must match stratification key name in json response returned from endpoint\r\n },\r\n {\r\n title: 'Sex', // Name that appears for button\r\n field: 'sex', // Must match stratification key name in json response returned from endpoint\r\n },\r\n ],\r\n defaultSelection: '000', // 000 is the code used for statewide data at the DB\r\n defaultSetNames: ['stateRate'],\r\n baseline: '000',\r\n info: {\r\n title: 'Rate of CML Leukemia',\r\n id: 'chart-leukemia-cml-trend',\r\n subtitle: 'Age-adjusted rate per 100,000',\r\n },\r\n chartTitle: [\r\n 'Age-Adjusted Incidence Rate of Chronic Lymphocytic Leukemia (CLL)',\r\n ],\r\n chartSubtitle: '',\r\n displayChartTitle: true,\r\n displayChartSubtitle: false,\r\n displayYAxisLabel: true,\r\n displayXAxisLabel: true,\r\n displayChartDiscontinuityGraphic: false,\r\n yAxisLabel:\r\n 'Age-adjusted incidence rate per 100,000 population',\r\n xAxisLabel: 'Period',\r\n chartXAxisField: 'year', // should match field name used in incoming dataset\r\n chartDataSets: ['rate', 'stateRate'], // should match field names used in incoming dataset\r\n url: `${process.env.REACT_APP_EPHT_API}/Cancer/GetRate`,\r\n urlParams: [\r\n { param: 'jurisdiction', valueKey: 'code' },\r\n {\r\n param: 'type',\r\n value: 'Cancer_Leukemia_ChronicLymphocytic_5yr',\r\n },\r\n ],\r\n chartConfig: {\r\n mainDatasets: [\r\n {\r\n label: 'County',\r\n setName: 'rate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n baseline: true,\r\n label: 'Statewide',\r\n setName: 'stateRate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n ],\r\n // Note: Baseline dataset should receive `baseline: true` property.\r\n // Additional note: The `order` property will dictate how lines stack on each other, in ascending order. Baseline should be given highest value to ensure it is colored correctly by Chart.js (gray)\r\n stratificationDatasets: [\r\n {\r\n label: 'White',\r\n setName: 'rateWhite',\r\n stratification: 'CancerRace',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: 'Black',\r\n setName: 'rateBlack',\r\n stratification: 'CancerRace',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: 'All',\r\n setName: 'rateTotal',\r\n baseline: true,\r\n stratification: 'CancerRace',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 5,\r\n data: [],\r\n },\r\n {\r\n label: 'Female',\r\n setName: 'rateFemale',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: 'Male',\r\n setName: 'rateMale',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: 'All',\r\n baseline: true,\r\n setName: 'rateTotal',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 3,\r\n data: [],\r\n },\r\n ],\r\n },\r\n columnHeaders: [\r\n {\r\n field: 'year',\r\n headerName: 'Year',\r\n width: 115,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate',\r\n headerName: 'County Rate',\r\n width: 134,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'stateRate',\r\n headerName: 'Statewide Rate',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateWhite',\r\n headerName: 'White',\r\n stratification: 'CancerRace',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateBlack',\r\n headerName: 'Black',\r\n stratification: 'CancerRace',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateMale',\r\n headerName: 'Male',\r\n stratification: 'sex',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateFemale',\r\n headerName: 'Female',\r\n stratification: 'sex',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Age-Adjusted Incidence Rate of Chronic Lymphocytic Leukemia (CLL)',\r\n },\r\n },\r\n about: ` `, // Fetched from the database\r\n resources: [\r\n 'External Link',\r\n 'Other Link',\r\n 'More Info',\r\n 'Downloadable PDF',\r\n 'Downloadable CSV',\r\n 'Link',\r\n ],\r\n },\r\n moredata: {\r\n defaultTabPath: 'ncdms',\r\n themeTitle: 'More Data',\r\n themePath: 'moredata',\r\n tabs: {\r\n ncdms: {\r\n tabTitle: '',\r\n tabPath: 'ncdms',\r\n contentType: 'ncdm',\r\n defaultTab: true,\r\n textHeader: 'Nationally Consistent Data and Measures',\r\n textSubheading: 'Sub-header',\r\n textBody: '',\r\n },\r\n },\r\n about: ` `, // Fetched from the database\r\n resources: ` `, // Fetched from the database\r\n },\r\n },\r\n },\r\n 'cancer-childhoodLeukemia': {\r\n topicTitle: 'Leukemia in Children',\r\n topicPath: 'cancer-childhoodLeukemia', // Topic path name must equal the object title key [two] lines above.\r\n parentTopic: 'cancer',\r\n category: 'health',\r\n defaultTabPath: 'overall',\r\n overview: [\r\n `

Cancer is a group of diseases in which cells of the body grow out of control. Each year, more than 31,000 Marylanders are diagnosed with invasive cancer, and more than 10,000 Marylanders die due to cancer.

The EPHT data portal contains information on some of the most common cancers and those about which the Department receives questions. For more information, please visit the Maryland Center for Cancer Prevention and Control.

`,\r\n ],\r\n themeOverviews: [\r\n {\r\n theme: 'Status',\r\n text:\r\n 'Provides a detailed view of different types of cancer over time throughout Maryland by area.',\r\n },\r\n {\r\n theme: 'More Data',\r\n text:\r\n 'Provides a detailed view of Nationally Consistent Data and Measures (NCDMs) for cancer as specified by the Centers for Disease Control and Prevention (CDC). All additional data are available for download.',\r\n },\r\n ],\r\n aboutData: `
Data FactsCancer
Why these data are importantCancer continues to be the second leading cause of death in Maryland and nationally. The presence of certain contaminants in the environment has been found to be correlated with the incidence of some cancers. Tracking these cancers is important to better understand their distributions in the population, and how this may potentially be impacted by environmental exposures.
Data SourcesMaryland Cancer Registry
Years available2010 - most recent complete year available (generally 2 years prior to current year)
Data source descriptionAll new cases of reportable cancers (excluding non-genital squamous cell or basal cell skin cancer) that are diagnosed and/or treated in Maryland and reported to the MCR
What's reportedCancer Incidence
How it's reportedAge adjusted incidence rates
Level of geographic detail State, county, and census tract
Level of demographic detailRace/ethnicity and sex
Data disclaimers

Gender is reported to the MCR as male, female, hermaphrodite, transsexual, and unknown (not stated); but numbers and rates for only males and females are displayed here. As a result, the totals shown in the count for number of cancer cases may not equal the sum of males and females.

County is reported to the MCR as the jurisdiction of residence for each cancer case or is categorized as unknown. As a result, the totals shown in the count for number of cases may not equal the sum of cancer cases across the 24 jurisdictions in Maryland due to cases with unknown county.

Age-adjusted rates do not include cancer cases for which age has not been reported. Incidence rates were calculated using the 2000 US standard population.

Incidence data provided by the MCR include the race categories: white, black, other, and unknown, regardless of Hispanic ethnicity. The \"Other\" race category includes cases reported as American Indian or Alaskan Native, Asian or Pacific Islander, and any other race category, except cases with unknown or missing race.

The summary data provided on this website are downloadable. For more detailed data, refer to the data sources.Yes
Environmental Health Helpline1-866-703-3266
mdh.envhealth@maryland.gov
Last Updated6/14/2023
Data suppression rules

For county-level data: Rates are suppressed when counts of cases are between 1 and 15.

For census tract-level data: Rates are suppressed when counts of cases are between 1 and 15 and/or the total population size is less than 5,000.

`,\r\n countySuppressionRules: {\r\n range: '1 to 10',\r\n populationMin: '5,000',\r\n },\r\n omitNcdmData: false, // Prevents the Download All NCDM button from displaying and skips the call to get NCDM configs\r\n themes: {\r\n status: {\r\n defaultTabPath: 'overall',\r\n themeTitle: 'Status',\r\n themePath: 'status',\r\n tabs: {\r\n overall: {\r\n tabTitle: 'Overall',\r\n tabPath: 'overall',\r\n contentType: 'map',\r\n contentTitle:\r\n 'Age-Adjusted Incidence Rate of Leukemia in Children Under 20',\r\n exportTitle:\r\n 'Age-Adjusted Incidence Rate of Leukemia in Children',\r\n exportSubtitle:\r\n 'Age-adjusted incidence rate per 1 million population (2015-2019)',\r\n mapSets: [\r\n {\r\n set: 'primary',\r\n geometry: 'County',\r\n outFields: ['County', 'Rate'],\r\n columnHeaders: [\r\n {\r\n field: 'County',\r\n headerName: 'County',\r\n flex: 1,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'Rate',\r\n headerName: 'Rate',\r\n exportHeaderName: 'Rate',\r\n flex: 1, //\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Age-Adjusted Incidence Rate of Leukemia in Children',\r\n popupContent: {\r\n title: {\r\n field: 'FullCounty',\r\n },\r\n health: {\r\n name: 'Leukemia rate per 1,000,000',\r\n field: 'Rate',\r\n unit: '',\r\n },\r\n },\r\n setLayers: [\r\n {\r\n id: 'county-overall-children-cancer',\r\n zIndexPosition: 'back',\r\n title:\r\n 'Incidence Rate of Leukemia in Children by County',\r\n yearKey: 'Period',\r\n subtitle:\r\n 'Age-adjusted rate per 1,000,000 population',\r\n defaultVisible: true,\r\n sourceLayer: true,\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/CancerCounty/MapServer/1`,\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n overallTrend: {\r\n tabTitle: 'Overall Trend',\r\n tabPath: 'overallTrend',\r\n contentType: 'chart',\r\n // No contentTitle for charts, will be controlled in \"chartTitle\" property below //\r\n exportTitle:\r\n 'Age-Adjusted Incidence Rate of Leukemia in Children',\r\n exportSubtitle:\r\n 'Age-adjusted incidence rate per 1 million population',\r\n chartType: 'trendline',\r\n selectable: true,\r\n stratifiable: true,\r\n\r\n // The following array of stratifications will create a chart stratification button for each item:\r\n stratifications: [\r\n {\r\n title: 'Age',\r\n field: 'CancerChildhoodAge',\r\n },\r\n ],\r\n defaultSelection: '000', // 000 is the code used for statewide data at the DB\r\n defaultSetNames: ['stateRate'],\r\n baseline: '000',\r\n info: {\r\n title: 'Rate of Leukemia',\r\n id: 'chart-childhood-leukemia-overall-trend',\r\n subtitle: 'Age-adjusted rate per 100,000',\r\n },\r\n chartTitle: [\r\n 'Age-Adjusted Incidence Rate of Leukemia in Children Under 20',\r\n ],\r\n chartSubtitle: '',\r\n displayChartTitle: true,\r\n displayChartSubtitle: false,\r\n displayYAxisLabel: true,\r\n displayXAxisLabel: true,\r\n displayChartDiscontinuityGraphic: false,\r\n yAxisLabel:\r\n 'Age-adjusted rate per 1,000,000 population',\r\n xAxisLabel: 'Period',\r\n chartXAxisField: 'year', // should match field name used in incoming dataset\r\n chartDataSets: ['rate', 'stateRate'], // should match field names used in incoming dataset\r\n url: `${process.env.REACT_APP_EPHT_API}/Cancer/GetRate`,\r\n urlParams: [\r\n { param: 'jurisdiction', valueKey: 'code' },\r\n {\r\n param: 'type',\r\n value: 'CancerChildhood_Leukemia_5yr',\r\n },\r\n ],\r\n chartConfig: {\r\n mainDatasets: [\r\n {\r\n label: 'County',\r\n setName: 'rate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n baseline: true,\r\n label: 'Statewide',\r\n setName: 'stateRate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n ],\r\n // Note: Baseline dataset should receive `baseline: true` property.\r\n // Additional note: The `order` property will dictate how lines stack on each other, in ascending order. Baseline should be given highest value to ensure it is colored correctly by Chart.js (gray)\r\n stratificationDatasets: [\r\n {\r\n label: 'Rate Under 15',\r\n setName: 'rateUnder15',\r\n stratification: 'CancerChildhoodAge',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: 'Rate Under 20',\r\n setName: 'rateUnder20',\r\n stratification: 'CancerChildhoodAge',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n ],\r\n },\r\n columnHeaders: [\r\n {\r\n field: 'year',\r\n headerName: 'Year',\r\n width: 115,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate',\r\n headerName: 'County Rate',\r\n width: 134,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'stateRate',\r\n headerName: 'Statewide Rate',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateUnder15',\r\n headerName: 'Rate Under 15',\r\n stratification: 'CancerChildhoodAge',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateUnder20',\r\n headerName: 'Rate Under 20',\r\n stratification: 'CancerChildhoodAge',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Age-Adjusted Incidence Rate of Leukemia in Children',\r\n },\r\n acuteMyeloid: {\r\n tabTitle: 'AML Map',\r\n tabPath: 'acuteMyeloid',\r\n contentType: 'map',\r\n contentTitle:\r\n 'Age-Adjusted Incidence Rate of Acute Myeloid Leukemia (AML) in Children under 20',\r\n exportTitle:\r\n 'Age-Adjusted Incidence Rate of Acute Myeloid Leukemia (AML) in Children',\r\n exportSubtitle:\r\n 'Age-adjusted incidence rate per 1 million population (2015-2019)',\r\n mapSets: [\r\n {\r\n set: 'primary',\r\n geometry: 'County',\r\n outFields: ['County', 'Rate'],\r\n columnHeaders: [\r\n {\r\n field: 'County',\r\n headerName: 'County',\r\n flex: 1,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'Rate',\r\n headerName: 'Rate',\r\n exportHeaderName: 'Rate',\r\n flex: 1, //\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Age-Adjusted Incidence Rate of Acute Myeloid Leukemia (AML) in Children',\r\n popupContent: {\r\n title: {\r\n field: 'FullCounty',\r\n },\r\n health: {\r\n name:\r\n 'Acute Myeloid Leukemia rate per 1,000,000',\r\n field: 'Rate',\r\n unit: '',\r\n },\r\n },\r\n setLayers: [\r\n {\r\n id:\r\n 'county-acute-myeloid-children-cancer',\r\n zIndexPosition: 'back',\r\n title:\r\n 'Incidence Rate of Acute Myeloid Leukemia in Children by County',\r\n yearKey: 'Period',\r\n subtitle:\r\n 'Age-adjusted rate per 1,000,000 population',\r\n defaultVisible: true,\r\n sourceLayer: true,\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/CancerCounty/MapServer/3`,\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n acuteMyeloidTrend: {\r\n tabTitle: 'AML Trend',\r\n tabPath: 'acuteMyeloidTrend',\r\n contentType: 'chart',\r\n // No contentTitle for charts, will be controlled in \"chartTitle\" property below //\r\n exportTitle:\r\n 'Age-Adjusted Incidence Rate of Acute Myeloid Leukemia (AML) in Children',\r\n exportSubtitle:\r\n 'Age-adjusted incidence rate per 1 million population',\r\n chartType: 'trendline',\r\n selectable: true,\r\n stratifiable: true,\r\n\r\n // The following array of stratifications will create a chart stratification button for each item:\r\n stratifications: [\r\n {\r\n title: 'Age',\r\n field: 'CancerChildhoodAge',\r\n },\r\n ],\r\n defaultSelection: '000', // 000 is the code used for statewide data at the DB\r\n defaultSetNames: ['stateRate'],\r\n baseline: '000',\r\n info: {\r\n title: 'Rate of Acute Myeloid Leukemia',\r\n id: 'chart-childhood-leukemia-AML-trend',\r\n subtitle: 'Age-adjusted rate per 100,000',\r\n },\r\n chartTitle: [\r\n 'Age-Adjusted Incidence Rate of Acute Myeloid Leukemia (AML) in Children Under 20',\r\n ],\r\n chartSubtitle: '',\r\n displayChartTitle: true,\r\n displayChartSubtitle: false,\r\n displayYAxisLabel: true,\r\n displayXAxisLabel: true,\r\n displayChartDiscontinuityGraphic: false,\r\n yAxisLabel:\r\n 'Age-adjusted rate per 1,000,000 population',\r\n xAxisLabel: 'Period',\r\n chartXAxisField: 'year', // should match field name used in incoming dataset\r\n chartDataSets: ['rate', 'stateRate'], // should match field names used in incoming dataset\r\n url: `${process.env.REACT_APP_EPHT_API}/Cancer/GetRate`,\r\n urlParams: [\r\n { param: 'jurisdiction', valueKey: 'code' },\r\n {\r\n param: 'type',\r\n value:\r\n 'CancerChildhood_Leukemia_AcuteMyleoid_5yr',\r\n },\r\n ],\r\n chartConfig: {\r\n mainDatasets: [\r\n {\r\n label: 'County',\r\n setName: 'rate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n baseline: true,\r\n label: 'Statewide',\r\n setName: 'stateRate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n ],\r\n // Note: Baseline dataset should receive `baseline: true` property.\r\n // Additional note: The `order` property will dictate how lines stack on each other, in ascending order. Baseline should be given highest value to ensure it is colored correctly by Chart.js (gray)\r\n stratificationDatasets: [\r\n {\r\n label: 'Rate Under 15',\r\n setName: 'rateUnder15',\r\n stratification: 'CancerChildhoodAge',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: 'Rate Under 20',\r\n setName: 'rateUnder20',\r\n stratification: 'CancerChildhoodAge',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n ],\r\n },\r\n columnHeaders: [\r\n {\r\n field: 'year',\r\n headerName: 'Year',\r\n width: 115,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate',\r\n headerName: 'County Rate',\r\n width: 134,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'stateRate',\r\n headerName: 'Statewide Rate',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateUnder15',\r\n headerName: 'Rate Under 15',\r\n stratification: 'CancerChildhoodAge',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateUnder20',\r\n headerName: 'Rate Under 20',\r\n stratification: 'CancerChildhoodAge',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Age-Adjusted Incidence Rate of Acute Myeloid Leukemia (AML) in Children',\r\n },\r\n acuteLymphocytic: {\r\n tabTitle: 'ALL Map',\r\n tabPath: 'acuteLymphocytic',\r\n contentType: 'map',\r\n contentTitle:\r\n 'Age-Adjusted Incidence Rate of Acute Lymphocytic Leukemia (ALL) in Children under 20',\r\n exportTitle:\r\n 'Age-Adjusted Incidence Rate of Acute Lymphocytic Leukemia (ALL) in Children',\r\n exportSubtitle:\r\n 'Age-adjusted incidence rate per 1 million population (2015-2019)',\r\n mapSets: [\r\n {\r\n set: 'primary',\r\n geometry: 'County',\r\n outFields: ['County', 'Rate'],\r\n columnHeaders: [\r\n {\r\n field: 'County',\r\n headerName: 'County',\r\n flex: 1,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'Rate',\r\n headerName: 'Rate',\r\n exportHeaderName: 'Rate',\r\n flex: 1, //\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Age-Adjusted Incidence Rate of Acute Lymphocytic Leukemia (ALL) in Children',\r\n popupContent: {\r\n title: {\r\n field: 'FullCounty',\r\n },\r\n health: {\r\n name:\r\n 'Acute Lymphocytic Leukemia rate per 1,000,000',\r\n field: 'Rate',\r\n unit: '',\r\n },\r\n },\r\n setLayers: [\r\n {\r\n id:\r\n 'county-acute-lymphocytic-children-cancer',\r\n zIndexPosition: 'back',\r\n title:\r\n 'Incidence Rate of Acute Lymphocytic Leukemia in Children by County',\r\n yearKey: 'Period',\r\n subtitle:\r\n 'Age-adjusted rate per 1,000,000 population',\r\n defaultVisible: true,\r\n sourceLayer: true,\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/CancerCounty/MapServer/2`,\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n acuteLymphocyticTrend: {\r\n tabTitle: 'ALL Trend',\r\n tabPath: 'acuteLymphocyticTrend',\r\n contentType: 'chart',\r\n exportTitle:\r\n 'Age-Adjusted Incidence Rate of Acute Lymphocytic Leukemia (ALL) in Children',\r\n exportSubtitle:\r\n 'Age-adjusted incidence rate per 1 million population',\r\n chartType: 'trendline',\r\n selectable: true,\r\n stratifiable: true,\r\n\r\n // The following array of stratifications will create a chart stratification button for each item:\r\n stratifications: [\r\n {\r\n title: 'Age',\r\n field: 'CancerChildhoodAge',\r\n },\r\n ],\r\n defaultSelection: '000', // 000 is the code used for statewide data at the DB\r\n defaultSetNames: ['stateRate'],\r\n baseline: '000',\r\n info: {\r\n title: 'Rate of Acute Lymphocytic Leukemia',\r\n id: 'chart-childhood-leukemia-ALL-trend',\r\n subtitle: 'Age-adjusted rate per 100,000',\r\n },\r\n chartTitle: [\r\n 'Age-Adjusted Incidence Rate of Acute Lymphocytic Leukemia (ALL) in Children Under 20',\r\n ],\r\n chartSubtitle: '',\r\n displayChartTitle: true,\r\n displayChartSubtitle: false,\r\n displayYAxisLabel: true,\r\n displayXAxisLabel: true,\r\n displayChartDiscontinuityGraphic: false,\r\n yAxisLabel:\r\n 'Age-adjusted rate per 1,000,000 population',\r\n xAxisLabel: 'Period',\r\n chartXAxisField: 'year', // should match field name used in incoming dataset\r\n chartDataSets: ['rate', 'stateRate'], // should match field names used in incoming dataset\r\n url: `${process.env.REACT_APP_EPHT_API}/Cancer/GetRate`,\r\n urlParams: [\r\n { param: 'jurisdiction', valueKey: 'code' },\r\n {\r\n param: 'type',\r\n value:\r\n 'CancerChildhood_Leukemia_AcuteLymphocytic_5yr',\r\n },\r\n ],\r\n chartConfig: {\r\n mainDatasets: [\r\n {\r\n label: 'County',\r\n setName: 'rate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n baseline: true,\r\n label: 'Statewide',\r\n setName: 'stateRate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n ],\r\n // Note: Baseline dataset should receive `baseline: true` property.\r\n // Additional note: The `order` property will dictate how lines stack on each other, in ascending order. Baseline should be given highest value to ensure it is colored correctly by Chart.js (gray)\r\n stratificationDatasets: [\r\n {\r\n label: 'Rate Under 15',\r\n setName: 'rateUnder15',\r\n stratification: 'CancerChildhoodAge',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: 'Rate Under 20',\r\n setName: 'rateUnder20',\r\n stratification: 'CancerChildhoodAge',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n ],\r\n },\r\n columnHeaders: [\r\n {\r\n field: 'year',\r\n headerName: 'Year',\r\n width: 115,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate',\r\n headerName: 'County Rate',\r\n width: 134,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'stateRate',\r\n headerName: 'Statewide Rate',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateUnder15',\r\n headerName: 'Rate Under 15',\r\n stratification: 'CancerChildhoodAge',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateUnder20',\r\n headerName: 'Rate Under 20',\r\n stratification: 'CancerChildhoodAge',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Age-Adjusted Incidence Rate of Acute Lymphocytic Leukemia (ALL) in Children',\r\n },\r\n },\r\n about: ` `, // Fetched from the database\r\n resources: [\r\n 'External Link',\r\n 'Other Link',\r\n 'More Info',\r\n 'Downloadable PDF',\r\n 'Downloadable CSV',\r\n 'Link',\r\n ],\r\n },\r\n moredata: {\r\n defaultTabPath: 'ncdms',\r\n themeTitle: 'More Data',\r\n themePath: 'moredata',\r\n tabs: {\r\n ncdms: {\r\n tabTitle: '',\r\n tabPath: 'ncdms',\r\n contentType: 'ncdm',\r\n defaultTab: true,\r\n textHeader: 'Nationally Consistent Data and Measures',\r\n textSubheading: 'Sub-header',\r\n textBody: '',\r\n },\r\n },\r\n about: ` `, // Fetched from the database\r\n resources: ` `, // Fetched from the database\r\n },\r\n },\r\n },\r\n 'cancer-lung': {\r\n topicTitle: 'Lung and Bronchus Cancer',\r\n topicPath: 'cancer-lung',\r\n parentTopic: 'cancer',\r\n category: 'health',\r\n defaultTabPath: 'lung',\r\n overview: [\r\n `

Cancer is a group of diseases in which cells of the body grow out of control. Each year, more than 31,000 Marylanders are diagnosed with invasive cancer, and more than 10,000 Marylanders die due to cancer.

The EPHT data portal contains information on some of the most common cancers and those about which the Department receives questions. For more information, please visit the Maryland Center for Cancer Prevention and Control.

`,\r\n ],\r\n themeOverviews: [\r\n {\r\n theme: 'Status',\r\n text:\r\n 'Provides a detailed view of different types of cancer over time throughout Maryland by area.',\r\n },\r\n ],\r\n aboutData: `
Data FactsCancer
Why these data are importantCancer continues to be the second leading cause of death in Maryland and nationally. The presence of certain contaminants in the environment has been found to be correlated with the incidence of some cancers. Tracking these cancers is important to better understand their distributions in the population, and how this may potentially be impacted by environmental exposures.
Data SourcesMaryland Cancer Registry
Years available2010 - most recent complete year available (generally 2 years prior to current year)
Data source descriptionAll new cases of reportable cancers (excluding non-genital squamous cell or basal cell skin cancer) that are diagnosed and/or treated in Maryland and reported to the MCR
What's reportedCancer Incidence
How it's reportedAge adjusted incidence rates
Level of geographic detail State, county, and census tract
Level of demographic detailRace/ethnicity and sex
Data disclaimers

Gender is reported to the MCR as male, female, hermaphrodite, transsexual, and unknown (not stated); but numbers and rates for only males and females are displayed here. As a result, the totals shown in the count for number of cancer cases may not equal the sum of males and females.

County is reported to the MCR as the jurisdiction of residence for each cancer case or is categorized as unknown. As a result, the totals shown in the count for number of cases may not equal the sum of cancer cases across the 24 jurisdictions in Maryland due to cases with unknown county.

Age-adjusted rates do not include cancer cases for which age has not been reported. Incidence rates were calculated using the 2000 US standard population.

Incidence data provided by the MCR include the race categories: white, black, other, and unknown, regardless of Hispanic ethnicity. The \"Other\" race category includes cases reported as American Indian or Alaskan Native, Asian or Pacific Islander, and any other race category, except cases with unknown or missing race.

The summary data provided on this website are downloadable. For more detailed data, refer to the data sources.Yes
Environmental Health Helpline1-866-703-3266
mdh.envhealth@maryland.gov
Last Updated6/14/2023
Data suppression rules

For county-level data: Rates are suppressed when counts of cases are between 1 and 15.

For census tract-level data: Rates are suppressed when counts of cases are between 1 and 15 and/or the total population size is less than 5,000.

`,\r\n countySuppressionRules: {\r\n range: '1 to 10',\r\n populationMin: '5,000',\r\n },\r\n omitNcdmData: true, // Prevents the Download All NCDM button from displaying and skips the call to get NCDM configs\r\n themes: {\r\n status: {\r\n defaultTabPath: 'lung',\r\n themeTitle: 'Status',\r\n themePath: 'status',\r\n tabs: {\r\n lung: {\r\n tabTitle: 'Map',\r\n tabPath: 'lung',\r\n contentType: 'map',\r\n contentTitle:\r\n 'Age-Adjusted Incidence Rate of Lung and Bronchus Cancer',\r\n exportTitle:\r\n 'Age-Adjusted Incidence Rate of Lung and Bronchus Cancer',\r\n exportSubtitle:\r\n 'Age-adjusted incidence rate per 100k population (County: 2016-2020, Tract: 2015-2019)',\r\n mapSets: [\r\n {\r\n set: 'primary',\r\n geometry: 'County',\r\n outFields: ['County', 'Rate'],\r\n columnHeaders: [\r\n {\r\n field: 'County',\r\n headerName: 'County',\r\n flex: 1,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'Rate',\r\n headerName: 'Rate',\r\n exportHeaderName: 'Rate',\r\n flex: 1, //\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Age-Adjusted Incidence Rate of Lung and Bronchus Cancer',\r\n popupContent: {\r\n title: {\r\n field: 'FullCounty',\r\n },\r\n health: {\r\n name:\r\n 'Lung and Bronchus Cancer rate per 100,000',\r\n field: 'Rate',\r\n unit: '',\r\n },\r\n },\r\n setLayers: [\r\n {\r\n id: 'county-lung-cancer',\r\n zIndexPosition: 'back',\r\n title:\r\n 'Incidence Rate of Lung and Bronchus Cancer by County',\r\n yearKey: 'Period',\r\n subtitle:\r\n 'Age-adjusted rate per 100,000 population',\r\n defaultVisible: true,\r\n sourceLayer: true,\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/CancerCounty/MapServer/13`,\r\n },\r\n ],\r\n },\r\n {\r\n set: 'secondary',\r\n geometry: 'Tract',\r\n outFields: [\r\n 'GEOID',\r\n 'TractCode',\r\n 'TractName',\r\n 'FullCounty',\r\n 'Rate',\r\n ],\r\n columnHeaders: [\r\n {\r\n field: 'FullCounty',\r\n headerName: 'County',\r\n flex: 1,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'TractName',\r\n headerName: 'Tract Name',\r\n flex: 1,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'Rate',\r\n headerName: 'Rate',\r\n exportHeaderName: 'Rate',\r\n flex: 1, //\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Age-Adjusted Incidence Rate of Lung and Bronchus Cancer',\r\n popupContent: {\r\n title: {\r\n field: 'PopupTitle',\r\n },\r\n health: {\r\n name:\r\n 'Lung and Bronchus Cancer rate per 100,000',\r\n field: 'Rate',\r\n unit: '',\r\n },\r\n },\r\n setLayers: [\r\n {\r\n id: 'census-tract-lung-cancer',\r\n zIndexPosition: 'back',\r\n title:\r\n 'Incidence Rate of Lung and Bronchus Cancer by Census Tract',\r\n yearKey: 'Year',\r\n subtitle:\r\n 'Age-adjusted rate per 100,000 population (2015-2019)',\r\n defaultVisible: true,\r\n sourceLayer: true,\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/CancerCensusTract/MapServer/2`,\r\n },\r\n {\r\n id: 'county-outline-lung-cancer',\r\n zIndexPosition: 'front',\r\n title: '',\r\n yearKey: 'Year',\r\n subtitle: '',\r\n defaultVisible: true,\r\n sourceLayer: false,\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/CountyBoundaries/MapServer/0`,\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n lungTrend: {\r\n tabTitle: 'Trend',\r\n tabPath: 'lungTrend',\r\n contentType: 'chart',\r\n // No contentTitle for charts, will be controlled in \"chartTitle\" property below //\r\n exportTitle:\r\n 'Age-Adjusted Incidence Rate of Lung and Bronchus Cancer',\r\n exportSubtitle:\r\n 'Age-adjusted incidence rate per 100k population',\r\n chartType: 'trendline',\r\n selectable: true,\r\n stratifiable: true,\r\n\r\n // The following array of stratifications will create a chart stratification button for each item:\r\n stratifications: [\r\n {\r\n title: 'Race', // Name that appears for button\r\n field: 'CancerRace', // Must match stratification key name in json response returned from endpoint\r\n },\r\n {\r\n title: 'Sex', // Name that appears for button\r\n field: 'sex', // Must match stratification key name in json response returned from endpoint\r\n },\r\n ],\r\n defaultSelection: '000', // 000 is the code used for statewide data at the DB\r\n defaultSetNames: ['stateRate'],\r\n baseline: '000',\r\n info: {\r\n title: 'Rate of Lung and Bronchus Cancer',\r\n id: 'chart-lung-cancer-trend',\r\n subtitle: 'Age-adjusted rate per 100,000',\r\n },\r\n chartTitle: [\r\n 'Age-Adjusted Incidence Rate of Lung and Bronchus Cancer',\r\n ],\r\n chartSubtitle: '',\r\n displayChartTitle: true,\r\n displayChartSubtitle: false,\r\n displayYAxisLabel: true,\r\n displayXAxisLabel: true,\r\n displayChartDiscontinuityGraphic: false,\r\n yAxisLabel:\r\n 'Age-adjusted incidence rate per 100,000 population',\r\n xAxisLabel: 'Period',\r\n chartXAxisField: 'year', // should match field name used in incoming dataset\r\n chartDataSets: ['rate', 'stateRate'], // should match field names used in incoming dataset\r\n url: `${process.env.REACT_APP_EPHT_API}/Cancer/GetRate`,\r\n urlParams: [\r\n { param: 'jurisdiction', valueKey: 'code' },\r\n { param: 'type', value: 'Cancer_LungBronchus_5yr' },\r\n ],\r\n chartConfig: {\r\n mainDatasets: [\r\n {\r\n label: 'County',\r\n setName: 'rate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n baseline: true,\r\n label: 'Statewide',\r\n setName: 'stateRate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n ],\r\n // Note: Baseline dataset should receive `baseline: true` property.\r\n // Additional note: The `order` property will dictate how lines stack on each other, in ascending order. Baseline should be given highest value to ensure it is colored correctly by Chart.js (gray)\r\n stratificationDatasets: [\r\n {\r\n label: 'White',\r\n setName: 'rateWhite',\r\n stratification: 'CancerRace',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: 'Black',\r\n setName: 'rateBlack',\r\n stratification: 'CancerRace',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: 'All',\r\n setName: 'rateTotal',\r\n baseline: true,\r\n stratification: 'CancerRace',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 5,\r\n data: [],\r\n },\r\n {\r\n label: 'Female',\r\n setName: 'rateFemale',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: 'Male',\r\n setName: 'rateMale',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: 'All',\r\n baseline: true,\r\n setName: 'rateTotal',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 3,\r\n data: [],\r\n },\r\n ],\r\n },\r\n columnHeaders: [\r\n {\r\n field: 'year',\r\n headerName: 'Year',\r\n width: 115,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate',\r\n headerName: 'County Rate',\r\n width: 134,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'stateRate',\r\n headerName: 'Statewide Rate',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateWhite',\r\n headerName: 'White',\r\n stratification: 'CancerRace',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateBlack',\r\n headerName: 'Black',\r\n stratification: 'CancerRace',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateMale',\r\n headerName: 'Male',\r\n stratification: 'sex',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateFemale',\r\n headerName: 'Female',\r\n stratification: 'sex',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Age-Adjusted Incidence Rate of Lung and Bronchus Cancer',\r\n },\r\n },\r\n about: ` `, // Fetched from the database\r\n resources: [\r\n 'External Link',\r\n 'Other Link',\r\n 'More Info',\r\n 'Downloadable PDF',\r\n 'Downloadable CSV',\r\n 'Link',\r\n ],\r\n },\r\n },\r\n },\r\n 'cancer-brain': {\r\n topicTitle: 'Brain and other Nervous System Cancers',\r\n topicPath: 'cancer-brain',\r\n parentTopic: 'cancer',\r\n category: 'health',\r\n defaultTabPath: 'levels',\r\n overview: [\r\n `

Cancer is a group of diseases in which cells of the body grow out of control. Each year, more than 31,000 Marylanders are diagnosed with invasive cancer, and more than 10,000 Marylanders die due to cancer.

The EPHT data portal contains information on some of the most common cancers and those about which the Department receives questions. For more information, please visit the Maryland Center for Cancer Prevention and Control.

`,\r\n ],\r\n themeOverviews: [\r\n {\r\n theme: 'Status',\r\n text:\r\n 'Provides a detailed view of different types of cancer over time throughout Maryland by area.',\r\n },\r\n ],\r\n aboutData: `
Data FactsCancer
Why these data are importantCancer continues to be the second leading cause of death in Maryland and nationally. The presence of certain contaminants in the environment has been found to be correlated with the incidence of some cancers. Tracking these cancers is important to better understand their distributions in the population, and how this may potentially be impacted by environmental exposures.
Data SourcesMaryland Cancer Registry
Years available2010 - most recent complete year available (generally 2 years prior to current year)
Data source descriptionAll new cases of reportable cancers (excluding non-genital squamous cell or basal cell skin cancer) that are diagnosed and/or treated in Maryland and reported to the MCR
What's reportedCancer Incidence
How it's reportedAge adjusted incidence rates
Level of geographic detail State, county, and census tract
Level of demographic detailRace/ethnicity and sex
Data disclaimers

Gender is reported to the MCR as male, female, hermaphrodite, transsexual, and unknown (not stated); but numbers and rates for only males and females are displayed here. As a result, the totals shown in the count for number of cancer cases may not equal the sum of males and females.

County is reported to the MCR as the jurisdiction of residence for each cancer case or is categorized as unknown. As a result, the totals shown in the count for number of cases may not equal the sum of cancer cases across the 24 jurisdictions in Maryland due to cases with unknown county.

Age-adjusted rates do not include cancer cases for which age has not been reported. Incidence rates were calculated using the 2000 US standard population.

Incidence data provided by the MCR include the race categories: white, black, other, and unknown, regardless of Hispanic ethnicity. The \"Other\" race category includes cases reported as American Indian or Alaskan Native, Asian or Pacific Islander, and any other race category, except cases with unknown or missing race.

The summary data provided on this website are downloadable. For more detailed data, refer to the data sources.Yes
Environmental Health Helpline1-866-703-3266
mdh.envhealth@maryland.gov
Last Updated6/14/2023
Data suppression rules

For county-level data: Rates are suppressed when counts of cases are between 1 and 15.

For census tract-level data: Rates are suppressed when counts of cases are between 1 and 15 and/or the total population size is less than 5,000.

`,\r\n countySuppressionRules: {\r\n range: '1 to 10',\r\n populationMin: '5,000',\r\n },\r\n omitNcdmData: true, // Prevents the Download All NCDM button from displaying and skips the call to get NCDM configs\r\n themes: {\r\n status: {\r\n defaultTabPath: 'brain',\r\n themeTitle: 'Status',\r\n themePath: 'status',\r\n tabs: {\r\n brain: {\r\n tabTitle: 'Map',\r\n tabPath: 'brain',\r\n contentType: 'map',\r\n contentTitle:\r\n 'Age-Adjusted Incidence Rate of Brain and other Nervous System Cancers',\r\n exportTitle:\r\n 'Age-Adjusted Incidence Rate of Brain and other Nervous System Cancers',\r\n exportSubtitle:\r\n 'Age-adjusted incidence rate per 100k population (2016-2020) ',\r\n mapSets: [\r\n {\r\n set: 'primary',\r\n geometry: 'County',\r\n outFields: ['County', 'Rate'],\r\n columnHeaders: [\r\n {\r\n field: 'County',\r\n headerName: 'County',\r\n flex: 1,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'Rate',\r\n headerName: 'Rate',\r\n exportHeaderName: 'Rate',\r\n flex: 1, //\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Age-Adjusted Incidence Rate of Brain and other Nervous System Cancers',\r\n popupContent: {\r\n title: {\r\n field: 'FullCounty',\r\n },\r\n health: {\r\n name:\r\n 'Brain and other Nervous System Cancers rate per 100,000',\r\n field: 'Rate',\r\n unit: '',\r\n },\r\n },\r\n setLayers: [\r\n {\r\n id: 'county-brain-cancer',\r\n zIndexPosition: 'back',\r\n title:\r\n 'Incidence Rate of Brain and other Nervous System Cancers by County',\r\n yearKey: 'Period',\r\n subtitle:\r\n 'Age-adjusted rate per 100,000 population',\r\n defaultVisible: true,\r\n sourceLayer: true,\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/CancerCounty/MapServer/6`,\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n brainTrend: {\r\n tabTitle: 'Trend',\r\n tabPath: 'brainTrend',\r\n contentType: 'chart',\r\n // No contentTitle for charts, will be controlled in \"chartTitle\" property below //\r\n exportTitle:\r\n 'Age-Adjusted Incidence Rate of Brain and other Nervous System Cancers',\r\n exportSubtitle:\r\n 'Age-adjusted incidence rate per 100k population',\r\n chartType: 'trendline',\r\n selectable: true,\r\n stratifiable: true,\r\n\r\n // The following array of stratifications will create a chart stratification button for each item:\r\n stratifications: [\r\n {\r\n title: 'Race', // Name that appears for button\r\n field: 'CancerRace', // Must match stratification key name in json response returned from endpoint\r\n },\r\n {\r\n title: 'Sex', // Name that appears for button\r\n field: 'sex', // Must match stratification key name in json response returned from endpoint\r\n },\r\n ],\r\n defaultSelection: '000', // 000 is the code used for statewide data at the DB\r\n defaultSetNames: ['stateRate'],\r\n baseline: '000',\r\n info: {\r\n title: 'Rate of CML Leukemia',\r\n id: 'chart-brain-cancer-trend',\r\n subtitle: 'Age-adjusted rate per 100,000',\r\n },\r\n chartTitle: [\r\n 'Age-Adjusted Incidence Rate of Brain and other Nervous System Cancers',\r\n ],\r\n chartSubtitle: '',\r\n displayChartTitle: true,\r\n displayChartSubtitle: false,\r\n displayYAxisLabel: true,\r\n displayXAxisLabel: true,\r\n displayChartDiscontinuityGraphic: false,\r\n yAxisLabel:\r\n 'Age-adjusted incidence rate per 100,000 population',\r\n xAxisLabel: 'Period',\r\n chartXAxisField: 'year', // should match field name used in incoming dataset\r\n chartDataSets: ['rate', 'stateRate'], // should match field names used in incoming dataset\r\n url: `${process.env.REACT_APP_EPHT_API}/Cancer/GetRate`,\r\n urlParams: [\r\n { param: 'jurisdiction', valueKey: 'code' },\r\n {\r\n param: 'type',\r\n value: 'Cancer_BrainNervousSystem_5yr',\r\n },\r\n ],\r\n chartConfig: {\r\n mainDatasets: [\r\n {\r\n label: 'County',\r\n setName: 'rate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n baseline: true,\r\n label: 'Statewide',\r\n setName: 'stateRate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n ],\r\n // Note: Baseline dataset should receive `baseline: true` property.\r\n // Additional note: The `order` property will dictate how lines stack on each other, in ascending order. Baseline should be given highest value to ensure it is colored correctly by Chart.js (gray)\r\n stratificationDatasets: [\r\n {\r\n label: 'White',\r\n setName: 'rateWhite',\r\n stratification: 'CancerRace',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: 'Black',\r\n setName: 'rateBlack',\r\n stratification: 'CancerRace',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: 'All',\r\n setName: 'rateTotal',\r\n baseline: true,\r\n stratification: 'CancerRace',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 5,\r\n data: [],\r\n },\r\n {\r\n label: 'Female',\r\n setName: 'rateFemale',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: 'Male',\r\n setName: 'rateMale',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: 'All',\r\n baseline: true,\r\n setName: 'rateTotal',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 3,\r\n data: [],\r\n },\r\n ],\r\n },\r\n columnHeaders: [\r\n {\r\n field: 'year',\r\n headerName: 'Year',\r\n width: 115,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate',\r\n headerName: 'County Rate',\r\n width: 134,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'stateRate',\r\n headerName: 'Statewide Rate',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateWhite',\r\n headerName: 'White',\r\n stratification: 'CancerRace',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateBlack',\r\n headerName: 'Black',\r\n stratification: 'CancerRace',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateMale',\r\n headerName: 'Male',\r\n stratification: 'sex',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateFemale',\r\n headerName: 'Female',\r\n stratification: 'sex',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Age-Adjusted Incidence Rate of Brain and other Nervous System Cancers',\r\n },\r\n },\r\n about: ` `, // Fetched from the database\r\n resources: [\r\n 'External Link',\r\n 'Other Link',\r\n 'More Info',\r\n 'Downloadable PDF',\r\n 'Downloadable CSV',\r\n 'Link',\r\n ],\r\n },\r\n },\r\n },\r\n 'cancer-childhoodBrain': {\r\n topicTitle: 'Brain and other Nervous System Cancers in Children',\r\n topicPath: 'cancer-childhoodBrain',\r\n parentTopic: 'cancer',\r\n category: 'health',\r\n defaultTabPath: 'levels',\r\n overview: [\r\n `

Cancer is a group of diseases in which cells of the body grow out of control. Each year, more than 31,000 Marylanders are diagnosed with invasive cancer, and more than 10,000 Marylanders die due to cancer.

The EPHT data portal contains information on some of the most common cancers and those about which the Department receives questions. For more information, please visit the Maryland Center for Cancer Prevention and Control.

`,\r\n ],\r\n themeOverviews: [\r\n {\r\n theme: 'Status',\r\n text:\r\n 'Provides a detailed view of different types of cancer over time throughout Maryland by area.',\r\n },\r\n {\r\n theme: 'More Data',\r\n text:\r\n 'Provides a detailed view of Nationally Consistent Data and Measures (NCDMs) for cancer as specified by the Centers for Disease Control and Prevention (CDC). All additional data are available for download.',\r\n },\r\n ],\r\n aboutData: `
Data FactsCancer
Why these data are importantCancer continues to be the second leading cause of death in Maryland and nationally. The presence of certain contaminants in the environment has been found to be correlated with the incidence of some cancers. Tracking these cancers is important to better understand their distributions in the population, and how this may potentially be impacted by environmental exposures.
Data SourcesMaryland Cancer Registry
Years available2010 - most recent complete year available (generally 2 years prior to current year)
Data source descriptionAll new cases of reportable cancers (excluding non-genital squamous cell or basal cell skin cancer) that are diagnosed and/or treated in Maryland and reported to the MCR
What's reportedCancer Incidence
How it's reportedAge adjusted incidence rates
Level of geographic detail State, county, and census tract
Level of demographic detailRace/ethnicity and sex
Data disclaimers

Gender is reported to the MCR as male, female, hermaphrodite, transsexual, and unknown (not stated); but numbers and rates for only males and females are displayed here. As a result, the totals shown in the count for number of cancer cases may not equal the sum of males and females.

County is reported to the MCR as the jurisdiction of residence for each cancer case or is categorized as unknown. As a result, the totals shown in the count for number of cases may not equal the sum of cancer cases across the 24 jurisdictions in Maryland due to cases with unknown county.

Age-adjusted rates do not include cancer cases for which age has not been reported. Incidence rates were calculated using the 2000 US standard population.

Incidence data provided by the MCR include the race categories: white, black, other, and unknown, regardless of Hispanic ethnicity. The \"Other\" race category includes cases reported as American Indian or Alaskan Native, Asian or Pacific Islander, and any other race category, except cases with unknown or missing race.

The summary data provided on this website are downloadable. For more detailed data, refer to the data sources.Yes
Environmental Health Helpline1-866-703-3266
mdh.envhealth@maryland.gov
Last Updated6/14/2023
Data suppression rules

For county-level data: Rates are suppressed when counts of cases are between 1 and 15.

For census tract-level data: Rates are suppressed when counts of cases are between 1 and 15 and/or the total population size is less than 5,000.

`,\r\n countySuppressionRules: {\r\n range: '1 to 10',\r\n populationMin: '5,000',\r\n },\r\n omitNcdmData: false, // Prevents the Download All NCDM button from displaying and skips the call to get NCDM configs\r\n themes: {\r\n status: {\r\n defaultTabPath: 'brain',\r\n themeTitle: 'Status',\r\n themePath: 'status',\r\n tabs: {\r\n brain: {\r\n tabTitle: 'Map',\r\n tabPath: 'brain',\r\n contentType: 'map',\r\n contentTitle:\r\n 'Age-Adjusted Incidence Rate of Brain and other Nervous System Cancers in Children Under 20',\r\n exportTitle:\r\n 'Age-Adjusted Incidence Rate of Brain and other Nervous System Cancers in Children',\r\n exportSubtitle:\r\n 'Age-adjusted incidence rate per 1 million population (2015-2019)',\r\n mapSets: [\r\n {\r\n set: 'primary',\r\n geometry: 'County',\r\n outFields: ['County', 'Rate'],\r\n columnHeaders: [\r\n {\r\n field: 'County',\r\n headerName: 'County',\r\n flex: 1,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'Rate',\r\n headerName: 'Rate',\r\n exportHeaderName: 'Rate',\r\n flex: 1, //\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Age-Adjusted Incidence Rate of Brain and other Nervous System Cancers in Children by County',\r\n popupContent: {\r\n title: {\r\n field: 'FullCounty',\r\n },\r\n health: {\r\n name:\r\n 'Brain and other Nervous System Cancers rate per 1,000,000',\r\n field: 'Rate',\r\n unit: '',\r\n },\r\n },\r\n setLayers: [\r\n {\r\n id: 'county-childhood-brain-cancer',\r\n zIndexPosition: 'back',\r\n title:\r\n 'Incidence Rate of Brain and other Nervous System Cancers in Children by County',\r\n yearKey: 'Period',\r\n subtitle:\r\n 'Age-adjusted rate per 1,000,000 population',\r\n defaultVisible: true,\r\n sourceLayer: true,\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/CancerCounty/MapServer/0`,\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n trend: {\r\n tabTitle: 'Trend',\r\n tabPath: 'trend',\r\n contentType: 'chart',\r\n // No contentTitle for charts, will be controlled in \"chartTitle\" property below //\r\n exportTitle:\r\n 'Age-Adjusted Incidence Rate of Brain and other Nervous System Cancers in Children',\r\n exportSubtitle:\r\n 'Age-adjusted incidence rate per 1 million population',\r\n chartType: 'trendline',\r\n selectable: true,\r\n stratifiable: true,\r\n\r\n // The following array of stratifications will create a chart stratification button for each item:\r\n stratifications: [\r\n {\r\n title: 'Age',\r\n field: 'CancerChildhoodAge',\r\n },\r\n ],\r\n defaultSelection: '000', // 000 is the code used for statewide data at the DB\r\n defaultSetNames: ['stateRate'],\r\n baseline: '000',\r\n info: {\r\n title: 'Rate of Leukemia',\r\n id: 'chart-childhood-brain-overall-trend',\r\n subtitle: 'Age-adjusted rate per 1,000,000',\r\n },\r\n chartTitle: [\r\n 'Age-Adjusted Incidence Rate of Brain and other Nervous System Cancers in Children Under 20',\r\n ],\r\n chartSubtitle: '',\r\n displayChartTitle: true,\r\n displayChartSubtitle: false,\r\n displayYAxisLabel: true,\r\n displayXAxisLabel: true,\r\n displayChartDiscontinuityGraphic: false,\r\n yAxisLabel:\r\n 'Age-adjusted rate per 1,000,000 population',\r\n xAxisLabel: 'Period',\r\n chartXAxisField: 'year', // should match field name used in incoming dataset\r\n chartDataSets: ['rate', 'stateRate'], // should match field names used in incoming dataset\r\n url: `${process.env.REACT_APP_EPHT_API}/Cancer/GetRate`,\r\n urlParams: [\r\n { param: 'jurisdiction', valueKey: 'code' },\r\n {\r\n param: 'type',\r\n value: 'CancerChildhood_BrainNervousSystem_5yr',\r\n },\r\n ],\r\n chartConfig: {\r\n mainDatasets: [\r\n {\r\n label: 'County',\r\n setName: 'rate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n baseline: true,\r\n label: 'Statewide',\r\n setName: 'stateRate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n ],\r\n // Note: Baseline dataset should receive `baseline: true` property.\r\n // Additional note: The `order` property will dictate how lines stack on each other, in ascending order. Baseline should be given highest value to ensure it is colored correctly by Chart.js (gray)\r\n stratificationDatasets: [\r\n {\r\n label: 'Rate Under 15',\r\n setName: 'rateUnder15',\r\n stratification: 'CancerChildhoodAge',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: 'Rate Under 20',\r\n setName: 'rateUnder20',\r\n stratification: 'CancerChildhoodAge',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n ],\r\n },\r\n columnHeaders: [\r\n {\r\n field: 'year',\r\n headerName: 'Year',\r\n width: 115,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate',\r\n headerName: 'County Rate',\r\n width: 134,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'stateRate',\r\n headerName: 'Statewide Rate',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateUnder15',\r\n headerName: 'Rate Under 15',\r\n stratification: 'CancerChildhoodAge',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateUnder20',\r\n headerName: 'Rate Under 20',\r\n stratification: 'CancerChildhoodAge',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Age-Adjusted Incidence Rate of Brain and other Nervous System Cancers in Children',\r\n },\r\n },\r\n about: ` `, // Fetched from the database\r\n resources: [\r\n 'External Link',\r\n 'Other Link',\r\n 'More Info',\r\n 'Downloadable PDF',\r\n 'Downloadable CSV',\r\n 'Link',\r\n ],\r\n },\r\n moredata: {\r\n defaultTabPath: 'ncdms',\r\n themeTitle: 'More Data',\r\n themePath: 'moredata',\r\n tabs: {\r\n ncdms: {\r\n tabTitle: '',\r\n tabPath: 'ncdms',\r\n contentType: 'ncdm',\r\n defaultTab: true,\r\n textHeader: 'Nationally Consistent Data and Measures',\r\n textSubheading: 'Sub-header',\r\n textBody: '',\r\n },\r\n },\r\n about: ` `, // Fetched from the database\r\n resources: ` `, // Fetched from the database\r\n },\r\n },\r\n },\r\n 'cancer-breast': {\r\n topicTitle: 'Breast Cancer in Females',\r\n topicPath: 'cancer-breast',\r\n parentTopic: 'cancer',\r\n category: 'health',\r\n defaultTabPath: 'levels',\r\n overview: [\r\n `

Cancer is a group of diseases in which cells of the body grow out of control. Each year, more than 31,000 Marylanders are diagnosed with invasive cancer, and more than 10,000 Marylanders die due to cancer.

The EPHT data portal contains information on some of the most common cancers and those about which the Department receives questions. For more information, please visit the Maryland Center for Cancer Prevention and Control.

`,\r\n ],\r\n themeOverviews: [\r\n {\r\n theme: 'Status',\r\n text:\r\n 'Provides a detailed view of different types of cancer over time throughout Maryland by area.',\r\n },\r\n ],\r\n aboutData: `
Data FactsCancer
Why these data are importantCancer continues to be the second leading cause of death in Maryland and nationally. The presence of certain contaminants in the environment has been found to be correlated with the incidence of some cancers. Tracking these cancers is important to better understand their distributions in the population, and how this may potentially be impacted by environmental exposures.
Data SourcesMaryland Cancer Registry
Years available2010 - most recent complete year available (generally 2 years prior to current year)
Data source descriptionAll new cases of reportable cancers (excluding non-genital squamous cell or basal cell skin cancer) that are diagnosed and/or treated in Maryland and reported to the MCR
What's reportedCancer Incidence
How it's reportedAge adjusted incidence rates
Level of geographic detail State, county, and census tract
Level of demographic detailRace/ethnicity and sex
Data disclaimers

Gender is reported to the MCR as male, female, hermaphrodite, transsexual, and unknown (not stated); but numbers and rates for only males and females are displayed here. As a result, the totals shown in the count for number of cancer cases may not equal the sum of males and females.

County is reported to the MCR as the jurisdiction of residence for each cancer case or is categorized as unknown. As a result, the totals shown in the count for number of cases may not equal the sum of cancer cases across the 24 jurisdictions in Maryland due to cases with unknown county.

Age-adjusted rates do not include cancer cases for which age has not been reported. Incidence rates were calculated using the 2000 US standard population.

Incidence data provided by the MCR include the race categories: white, black, other, and unknown, regardless of Hispanic ethnicity. The \"Other\" race category includes cases reported as American Indian or Alaskan Native, Asian or Pacific Islander, and any other race category, except cases with unknown or missing race.

The summary data provided on this website are downloadable. For more detailed data, refer to the data sources.Yes
Environmental Health Helpline1-866-703-3266
mdh.envhealth@maryland.gov
Last Updated6/14/2023
Data suppression rules

For county-level data: Rates are suppressed when counts of cases are between 1 and 15.

For census tract-level data: Rates are suppressed when counts of cases are between 1 and 15 and/or the total population size is less than 5,000.

`,\r\n countySuppressionRules: {\r\n range: '1 to 10',\r\n populationMin: '5,000',\r\n },\r\n omitNcdmData: true, // Prevents the Download All NCDM button from displaying and skips the call to get NCDM configs\r\n themes: {\r\n status: {\r\n defaultTabPath: 'breast',\r\n themeTitle: 'Status',\r\n themePath: 'status',\r\n tabs: {\r\n breast: {\r\n tabTitle: 'Map',\r\n tabPath: 'breast',\r\n contentType: 'map',\r\n contentTitle:\r\n 'Age-Adjusted Incidence Rate of Breast Cancer in Females',\r\n exportTitle:\r\n 'Age-Adjusted Incidence Rate of Breast Cancer in Females',\r\n exportSubtitle:\r\n 'Age-adjusted incidence rate per 100k population (County: 2016-2020, Tract: 2015-2019)',\r\n mapSets: [\r\n {\r\n set: 'primary',\r\n geometry: 'County',\r\n outFields: ['County', 'Rate'],\r\n columnHeaders: [\r\n {\r\n field: 'County',\r\n headerName: 'County',\r\n flex: 1,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'Rate',\r\n headerName: 'Rate',\r\n exportHeaderName: 'Rate',\r\n flex: 1, //\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Age-Adjusted Incidence Rate of Breast Cancer in Females',\r\n popupContent: {\r\n title: {\r\n field: 'FullCounty',\r\n },\r\n health: {\r\n name:\r\n 'Breast Cancer in Females rate per 100,000',\r\n field: 'Rate',\r\n unit: '',\r\n },\r\n },\r\n setLayers: [\r\n {\r\n id: 'county-breast-cancer',\r\n zIndexPosition: 'back',\r\n title:\r\n 'Incidence Rate of Breast Cancer in Females by County',\r\n yearKey: 'Period',\r\n subtitle:\r\n 'Age-adjusted rate per 100,000 population',\r\n defaultVisible: true,\r\n sourceLayer: true,\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/CancerCounty/MapServer/7`,\r\n },\r\n ],\r\n },\r\n {\r\n set: 'secondary',\r\n geometry: 'Tract',\r\n outFields: [\r\n 'GEOID',\r\n 'TractCode',\r\n 'TractName',\r\n 'FullCounty',\r\n 'Rate',\r\n ],\r\n columnHeaders: [\r\n {\r\n field: 'FullCounty',\r\n headerName: 'County',\r\n flex: 1,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'TractName',\r\n headerName: 'Tract Name',\r\n flex: 1,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'Rate',\r\n headerName: 'Rate',\r\n exportHeaderName: 'Rate',\r\n flex: 1, //\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Age-Adjusted Incidence Rate of Breast Cancer in Females',\r\n popupContent: {\r\n title: {\r\n field: 'PopupTitle',\r\n },\r\n health: {\r\n name:\r\n 'Breast Cancer in Females rate per 100,000',\r\n field: 'Rate',\r\n unit: '',\r\n },\r\n },\r\n setLayers: [\r\n {\r\n id: 'census-tract-breast-cancer',\r\n zIndexPosition: 'back',\r\n title:\r\n 'Incidence Rate of Breast Cancer in Females by Census Tract',\r\n yearKey: 'Year',\r\n subtitle:\r\n 'Age-adjusted rate per 100,000 population (2015-2019)',\r\n defaultVisible: true,\r\n sourceLayer: true,\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/CancerCensusTract/MapServer/1`,\r\n },\r\n {\r\n id: 'county-outline-breast-cancer',\r\n zIndexPosition: 'front',\r\n title: '',\r\n yearKey: 'Year',\r\n subtitle: '',\r\n defaultVisible: true,\r\n sourceLayer: false,\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/CountyBoundaries/MapServer/0`,\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n breastTrend: {\r\n tabTitle: 'Trend',\r\n tabPath: 'breastTrend',\r\n contentType: 'chart',\r\n // No contentTitle for charts, will be controlled in \"chartTitle\" property below //\r\n exportTitle:\r\n 'Age-Adjusted Incidence Rate of Breast Cancer in Females',\r\n exportSubtitle:\r\n 'Age-adjusted incidence rate per 100k population',\r\n chartType: 'trendline',\r\n selectable: true,\r\n stratifiable: true,\r\n\r\n // The following array of stratifications will create a chart stratification button for each item:\r\n stratifications: [\r\n {\r\n title: 'Age', // Name that appears for button\r\n field: 'CancerBreastAge', // Must match stratification key name in json response returned from endpoint\r\n },\r\n {\r\n title: 'Race', // Name that appears for button\r\n field: 'CancerBreastRace', // Must match stratification key name in json response returned from endpoint\r\n },\r\n ],\r\n defaultSelection: '000', // 000 is the code used for statewide data at the DB\r\n defaultSetNames: ['stateRate'],\r\n baseline: '000',\r\n info: {\r\n title: 'Rate of Breast Cancer in Females',\r\n id: 'chart-breast-cancer-trend',\r\n subtitle: 'Age-adjusted rate per 100,000',\r\n },\r\n chartTitle: [\r\n 'Age-Adjusted Incidence Rate of Breast Cancer in Females',\r\n ],\r\n chartSubtitle: '',\r\n displayChartTitle: true,\r\n displayChartSubtitle: false,\r\n displayYAxisLabel: true,\r\n displayXAxisLabel: true,\r\n displayChartDiscontinuityGraphic: false,\r\n yAxisLabel:\r\n 'Age-adjusted incidence rate per 100,000 population',\r\n xAxisLabel: 'Period',\r\n chartXAxisField: 'year', // should match field name used in incoming dataset\r\n chartDataSets: ['rate', 'stateRate'], // should match field names used in incoming dataset\r\n url: `${process.env.REACT_APP_EPHT_API}/Cancer/GetRate`,\r\n urlParams: [\r\n { param: 'jurisdiction', valueKey: 'code' },\r\n { param: 'type', value: 'Cancer_Breast_5yr' }, // The method to construct the url params is looking for the key name 'value' so this convention must be followed for dynamic construction to work.\r\n ],\r\n chartConfig: {\r\n mainDatasets: [\r\n {\r\n label: 'County',\r\n setName: 'rate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n baseline: true,\r\n label: 'Statewide',\r\n setName: 'stateRate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n ],\r\n // Note: Baseline dataset should receive `baseline: true` property.\r\n // Additional note: The `order` property will dictate how lines stack on each other, in ascending order. Baseline should be given highest value to ensure it is colored correctly by Chart.js (gray)\r\n stratificationDatasets: [\r\n {\r\n label: 'White',\r\n setName: 'rateWhite',\r\n stratification: 'CancerBreastRace',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: 'White 50 and over',\r\n setName: 'rateOver50White',\r\n stratification: 'CancerBreastRace',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 4,\r\n data: [],\r\n },\r\n {\r\n label: 'White under 50',\r\n setName: 'rateUnder50White',\r\n stratification: 'CancerBreastRace',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 6,\r\n data: [],\r\n },\r\n {\r\n label: 'Black',\r\n setName: 'rateBlack',\r\n stratification: 'CancerBreastRace',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: 'Black 50 and over',\r\n setName: 'rateOver50Black',\r\n stratification: 'CancerBreastRace',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 3,\r\n data: [],\r\n },\r\n {\r\n label: 'Black under 50',\r\n setName: 'rateUnder50Black',\r\n stratification: 'CancerBreastRace',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 5,\r\n data: [],\r\n },\r\n {\r\n label: 'All',\r\n setName: 'rateTotal',\r\n baseline: true,\r\n stratification: 'CancerBreastRace',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 7,\r\n data: [],\r\n },\r\n // Age stratifications are kept in here for future updates where age data is available. Endpoint should currently return an `age` property, with nulled out values.\r\n {\r\n label: '50 and over',\r\n setName: 'rateOver50',\r\n stratification: 'CancerBreastAge',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: '50 and over Black',\r\n setName: 'rateOver50Black',\r\n stratification: 'CancerBreastAge',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: '50 and over White',\r\n setName: 'rateOver50White',\r\n stratification: 'CancerBreastAge',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 3,\r\n data: [],\r\n },\r\n {\r\n label: 'Under 50',\r\n setName: 'rateUnder50',\r\n stratification: 'CancerBreastAge',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 4,\r\n data: [],\r\n },\r\n {\r\n label: 'Under 50 Black',\r\n setName: 'rateUnder50Black',\r\n stratification: 'CancerBreastAge',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 5,\r\n data: [],\r\n },\r\n {\r\n label: 'Under 50 White',\r\n setName: 'rateUnder50White',\r\n stratification: 'CancerBreastAge',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 5,\r\n data: [],\r\n },\r\n {\r\n label: 'All',\r\n baseline: true,\r\n setName: 'rateTotal',\r\n stratification: 'CancerBreastAge',\r\n title: 'Age',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 6,\r\n data: [],\r\n },\r\n ],\r\n },\r\n columnHeaders: [\r\n {\r\n field: 'year',\r\n headerName: 'Year',\r\n width: 115,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate',\r\n headerName: 'County Rate',\r\n width: 134,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'stateRate',\r\n headerName: 'Statewide Rate',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateWhite',\r\n headerName: 'White',\r\n stratification: 'CancerBreastRace',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateOver50White',\r\n headerName: 'White 50 and over',\r\n stratification: 'CancerBreastRace',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateUnder50White',\r\n headerName: 'White under 50',\r\n stratification: 'CancerBreastRace',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateBlack',\r\n headerName: 'Black',\r\n stratification: 'CancerBreastRace',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateOver50Black',\r\n headerName: 'Black 50 and over',\r\n stratification: 'CancerBreastRace',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateUnder50Black',\r\n headerName: 'Black under 50',\r\n stratification: 'CancerBreastRace',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateOver50',\r\n headerName: '50 and over',\r\n stratification: 'CancerBreastAge',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateOver50Black',\r\n headerName: '50 and over Black',\r\n stratification: 'CancerBreastAge',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateOver50White',\r\n headerName: '50 and over White',\r\n stratification: 'CancerBreastAge',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateUnder50',\r\n headerName: 'Under 50',\r\n stratification: 'CancerBreastAge',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateUnder50Black',\r\n headerName: 'Under 50 Black',\r\n stratification: 'CancerBreastAge',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateUnder50White',\r\n headerName: 'Under 50 White',\r\n stratification: 'CancerBreastAge',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Age-Adjusted Incidence Rate of Breast Cancer in Females',\r\n },\r\n },\r\n about: ` `, // Fetched from the database\r\n resources: [\r\n 'External Link',\r\n 'Other Link',\r\n 'More Info',\r\n 'Downloadable PDF',\r\n 'Downloadable CSV',\r\n 'Link',\r\n ],\r\n },\r\n },\r\n },\r\n 'cancer-kidney': {\r\n topicTitle: 'Kidney and Renal Pelvis Cancer',\r\n topicPath: 'cancer-kidney',\r\n parentTopic: 'cancer',\r\n category: 'health',\r\n defaultTabPath: 'kidney',\r\n overview: [\r\n `

Cancer is a group of diseases in which cells of the body grow out of control. Each year, more than 31,000 Marylanders are diagnosed with invasive cancer, and more than 10,000 Marylanders die due to cancer.

The EPHT data portal contains information on some of the most common cancers and those about which the Department receives questions. For more information, please visit the Maryland Center for Cancer Prevention and Control.

`,\r\n ],\r\n themeOverviews: [\r\n {\r\n theme: 'Status',\r\n text:\r\n 'Provides a detailed view of different types of cancer over time throughout Maryland by area.',\r\n },\r\n ],\r\n aboutData: `
Data FactsCancer
Why these data are importantCancer continues to be the second leading cause of death in Maryland and nationally. The presence of certain contaminants in the environment has been found to be correlated with the incidence of some cancers. Tracking these cancers is important to better understand their distributions in the population, and how this may potentially be impacted by environmental exposures.
Data SourcesMaryland Cancer Registry
Years available2010 - most recent complete year available (generally 2 years prior to current year)
Data source descriptionAll new cases of reportable cancers (excluding non-genital squamous cell or basal cell skin cancer) that are diagnosed and/or treated in Maryland and reported to the MCR
What's reportedCancer Incidence
How it's reportedAge adjusted incidence rates
Level of geographic detail State, county, and census tract
Level of demographic detailRace/ethnicity and sex
Data disclaimers

Gender is reported to the MCR as male, female, hermaphrodite, transsexual, and unknown (not stated); but numbers and rates for only males and females are displayed here. As a result, the totals shown in the count for number of cancer cases may not equal the sum of males and females.

County is reported to the MCR as the jurisdiction of residence for each cancer case or is categorized as unknown. As a result, the totals shown in the count for number of cases may not equal the sum of cancer cases across the 24 jurisdictions in Maryland due to cases with unknown county.

Age-adjusted rates do not include cancer cases for which age has not been reported. Incidence rates were calculated using the 2000 US standard population.

Incidence data provided by the MCR include the race categories: white, black, other, and unknown, regardless of Hispanic ethnicity. The \"Other\" race category includes cases reported as American Indian or Alaskan Native, Asian or Pacific Islander, and any other race category, except cases with unknown or missing race.

The summary data provided on this website are downloadable. For more detailed data, refer to the data sources.Yes
Environmental Health Helpline1-866-703-3266
mdh.envhealth@maryland.gov
Last Updated6/14/2023
Data suppression rules

For county-level data: Rates are suppressed when counts of cases are between 1 and 15.

For census tract-level data: Rates are suppressed when counts of cases are between 1 and 15 and/or the total population size is less than 5,000.

`,\r\n countySuppressionRules: {\r\n range: '1 to 10',\r\n populationMin: '5,000',\r\n },\r\n omitNcdmData: true, // Prevents the Download All NCDM button from displaying and skips the call to get NCDM configs\r\n themes: {\r\n status: {\r\n defaultTabPath: 'kidney',\r\n themeTitle: 'Status',\r\n themePath: 'status',\r\n tabs: {\r\n kidney: {\r\n tabTitle: 'Map',\r\n tabPath: 'kidney',\r\n contentType: 'map',\r\n contentTitle:\r\n 'Age-Adjusted Incidence Rate of Kidney and Renal Pelvis Cancer',\r\n exportTitle:\r\n 'Age-Adjusted Incidence Rate of Kidney and Renal Pelvis Cancer',\r\n exportSubtitle:\r\n 'Age-adjusted incidence rate per 100k population (2016-2020) ',\r\n mapSets: [\r\n {\r\n set: 'primary',\r\n geometry: 'County',\r\n outFields: ['County', 'Rate'],\r\n columnHeaders: [\r\n {\r\n field: 'County',\r\n headerName: 'County',\r\n flex: 1,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'Rate',\r\n headerName: 'Rate',\r\n exportHeaderName: 'Rate',\r\n flex: 1, //\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Age-Adjusted Incidence Rate of Kidney and Renal Pelvis Cancer',\r\n popupContent: {\r\n title: {\r\n field: 'FullCounty',\r\n },\r\n health: {\r\n name:\r\n 'Kidney and Renal Pelvis Cancer rate per 100,000',\r\n field: 'Rate',\r\n unit: '',\r\n },\r\n },\r\n setLayers: [\r\n {\r\n id: 'county-kidney-cancer',\r\n zIndexPosition: 'back',\r\n title:\r\n 'Incidence Rate of Kidney and Renal Pelvis Cancer by County',\r\n yearKey: 'Period',\r\n subtitle:\r\n 'Age-adjusted rate per 100,000 population',\r\n defaultVisible: true,\r\n sourceLayer: true,\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/CancerCounty/MapServer/8`,\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n kidneyTrend: {\r\n tabTitle: 'Trend',\r\n tabPath: 'kidneyTrend',\r\n contentType: 'chart',\r\n // No contentTitle for charts, will be controlled in \"chartTitle\" property below //\r\n exportTitle:\r\n 'Age-Adjusted Incidence Rate of Kidney and Renal Pelvis Cancer',\r\n exportSubtitle:\r\n 'Age-adjusted incidence rate per 100k population',\r\n chartType: 'trendline',\r\n selectable: true,\r\n stratifiable: true,\r\n\r\n // The following array of stratifications will create a chart stratification button for each item:\r\n stratifications: [\r\n {\r\n title: 'Race', // Name that appears for button\r\n field: 'CancerRace', // Must match stratification key name in json response returned from endpoint\r\n },\r\n {\r\n title: 'Sex', // Name that appears for button\r\n field: 'sex', // Must match stratification key name in json response returned from endpoint\r\n },\r\n ],\r\n defaultSelection: '000', // 000 is the code used for statewide data at the DB\r\n defaultSetNames: ['stateRate'],\r\n baseline: '000',\r\n info: {\r\n title: 'Rate of Kidney and Renal Pelvis Cancer',\r\n id: 'chart-kidney-cancer-trend',\r\n subtitle: 'Age-adjusted rate per 100,000',\r\n },\r\n chartTitle: [\r\n 'Age-Adjusted Incidence Rate of Kidney and Renal Pelvis Cancer',\r\n ],\r\n chartSubtitle: '',\r\n displayChartTitle: true,\r\n displayChartSubtitle: false,\r\n displayYAxisLabel: true,\r\n displayXAxisLabel: true,\r\n displayChartDiscontinuityGraphic: false,\r\n yAxisLabel:\r\n 'Age-adjusted incidence rate per 100,000 population',\r\n xAxisLabel: 'Period',\r\n chartXAxisField: 'year', // should match field name used in incoming dataset\r\n chartDataSets: ['rate', 'stateRate'], // should match field names used in incoming dataset\r\n url: `${process.env.REACT_APP_EPHT_API}/Cancer/GetRate`,\r\n urlParams: [\r\n { param: 'jurisdiction', valueKey: 'code' },\r\n {\r\n param: 'type',\r\n value: 'Cancer_KidneyRenalPelvis_5yr',\r\n },\r\n ],\r\n chartConfig: {\r\n mainDatasets: [\r\n {\r\n label: 'County',\r\n setName: 'rate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n baseline: true,\r\n label: 'Statewide',\r\n setName: 'stateRate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n ],\r\n // Note: Baseline dataset should receive `baseline: true` property.\r\n // Additional note: The `order` property will dictate how lines stack on each other, in ascending order. Baseline should be given highest value to ensure it is colored correctly by Chart.js (gray)\r\n stratificationDatasets: [\r\n {\r\n label: 'White',\r\n setName: 'rateWhite',\r\n stratification: 'CancerRace',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: 'Black',\r\n setName: 'rateBlack',\r\n stratification: 'CancerRace',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: 'All',\r\n setName: 'rateTotal',\r\n baseline: true,\r\n stratification: 'CancerRace',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 5,\r\n data: [],\r\n },\r\n {\r\n label: 'Female',\r\n setName: 'rateFemale',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: 'Male',\r\n setName: 'rateMale',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: 'All',\r\n baseline: true,\r\n setName: 'rateTotal',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 3,\r\n data: [],\r\n },\r\n ],\r\n },\r\n columnHeaders: [\r\n {\r\n field: 'year',\r\n headerName: 'Year',\r\n width: 115,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate',\r\n headerName: 'County Rate',\r\n width: 134,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'stateRate',\r\n headerName: 'Statewide Rate',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateWhite',\r\n headerName: 'White',\r\n stratification: 'CancerRace',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateBlack',\r\n headerName: 'Black',\r\n stratification: 'CancerRace',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateMale',\r\n headerName: 'Male',\r\n stratification: 'sex',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateFemale',\r\n headerName: 'Female',\r\n stratification: 'sex',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Age-Adjusted Incidence Rate of Kidney and Renal Pelvis Cancer',\r\n },\r\n },\r\n about: ` `, // Fetched from the database\r\n resources: [\r\n 'External Link',\r\n 'Other Link',\r\n 'More Info',\r\n 'Downloadable PDF',\r\n 'Downloadable CSV',\r\n 'Link',\r\n ],\r\n },\r\n },\r\n },\r\n 'cancer-liver': {\r\n topicTitle: 'Liver and Intraheptic Bile Duct Cancer',\r\n topicPath: 'cancer-liver',\r\n parentTopic: 'cancer',\r\n category: 'health',\r\n defaultTabPath: 'liver',\r\n overview: [\r\n `

Cancer is a group of diseases in which cells of the body grow out of control. Each year, more than 31,000 Marylanders are diagnosed with invasive cancer, and more than 10,000 Marylanders die due to cancer.

The EPHT data portal contains information on some of the most common cancers and those about which the Department receives questions. For more information, please visit the Maryland Center for Cancer Prevention and Control.

`,\r\n ],\r\n themeOverviews: [\r\n {\r\n theme: 'Status',\r\n text:\r\n 'Provides a detailed view of different types of cancer over time throughout Maryland by area.',\r\n },\r\n ],\r\n aboutData: `
Data FactsCancer
Why these data are importantCancer continues to be the second leading cause of death in Maryland and nationally. The presence of certain contaminants in the environment has been found to be correlated with the incidence of some cancers. Tracking these cancers is important to better understand their distributions in the population, and how this may potentially be impacted by environmental exposures.
Data SourcesMaryland Cancer Registry
Years available2010 - most recent complete year available (generally 2 years prior to current year)
Data source descriptionAll new cases of reportable cancers (excluding non-genital squamous cell or basal cell skin cancer) that are diagnosed and/or treated in Maryland and reported to the MCR
What's reportedCancer Incidence
How it's reportedAge adjusted incidence rates
Level of geographic detail State, county, and census tract
Level of demographic detailRace/ethnicity and sex
Data disclaimers

Gender is reported to the MCR as male, female, hermaphrodite, transsexual, and unknown (not stated); but numbers and rates for only males and females are displayed here. As a result, the totals shown in the count for number of cancer cases may not equal the sum of males and females.

County is reported to the MCR as the jurisdiction of residence for each cancer case or is categorized as unknown. As a result, the totals shown in the count for number of cases may not equal the sum of cancer cases across the 24 jurisdictions in Maryland due to cases with unknown county.

Age-adjusted rates do not include cancer cases for which age has not been reported. Incidence rates were calculated using the 2000 US standard population.

Incidence data provided by the MCR include the race categories: white, black, other, and unknown, regardless of Hispanic ethnicity. The \"Other\" race category includes cases reported as American Indian or Alaskan Native, Asian or Pacific Islander, and any other race category, except cases with unknown or missing race.

The summary data provided on this website are downloadable. For more detailed data, refer to the data sources.Yes
Environmental Health Helpline1-866-703-3266
mdh.envhealth@maryland.gov
Last Updated6/14/2023
Data suppression rules

For county-level data: Rates are suppressed when counts of cases are between 1 and 15.

For census tract-level data: Rates are suppressed when counts of cases are between 1 and 15 and/or the total population size is less than 5,000.

`,\r\n countySuppressionRules: {\r\n range: '1 to 10',\r\n populationMin: '5,000',\r\n },\r\n omitNcdmData: true, // Prevents the Download All NCDM button from displaying and skips the call to get NCDM configs\r\n themes: {\r\n status: {\r\n defaultTabPath: 'liver',\r\n themeTitle: 'Status',\r\n themePath: 'status',\r\n tabs: {\r\n liver: {\r\n tabTitle: 'Map',\r\n tabPath: 'liver',\r\n contentType: 'map',\r\n contentTitle:\r\n 'Age-Adjusted Incidence Rate of Liver and Intraheptic Bile Duct Cancer',\r\n exportTitle:\r\n 'Age-Adjusted Incidence Rate of Liver and Intraheptic Bile Duct Cancer',\r\n exportSubtitle:\r\n 'Age-adjusted incidence rate per 100k population (2016-2020) ',\r\n mapSets: [\r\n {\r\n set: 'primary',\r\n geometry: 'County',\r\n outFields: ['County', 'Rate'],\r\n columnHeaders: [\r\n {\r\n field: 'County',\r\n headerName: 'County',\r\n flex: 1,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'Rate',\r\n headerName: 'Rate',\r\n exportHeaderName: 'Rate',\r\n flex: 1, //\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Age-Adjusted Incidence Rate of Liver and Intraheptic Bile Duct Cancer',\r\n popupContent: {\r\n title: {\r\n field: 'FullCounty',\r\n },\r\n health: {\r\n name:\r\n 'Liver and Intraheptic Bile Duct Cancer rate per 100,000',\r\n field: 'Rate',\r\n unit: '',\r\n },\r\n },\r\n setLayers: [\r\n {\r\n id: 'county-liver-cancer',\r\n zIndexPosition: 'back',\r\n title:\r\n 'Incidence Rate of Liver and Intraheptic Bile Duct Cancer by County',\r\n yearKey: 'Period',\r\n subtitle:\r\n 'Age-adjusted rate per 100,000 population',\r\n defaultVisible: true,\r\n sourceLayer: true,\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/CancerCounty/MapServer/12`,\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n liverTrend: {\r\n tabTitle: 'Trend',\r\n tabPath: 'liverTrend',\r\n contentType: 'chart',\r\n // No contentTitle for charts, will be controlled in \"chartTitle\" property below //\r\n exportTitle:\r\n 'Age-Adjusted Incidence Rate of Liver and Intraheptic Bile Duct Cancer',\r\n exportSubtitle:\r\n 'Age-adjusted incidence rate per 100k population',\r\n chartType: 'trendline',\r\n selectable: true,\r\n stratifiable: true,\r\n\r\n // The following array of stratifications will create a chart stratification button for each item:\r\n stratifications: [\r\n {\r\n title: 'Race', // Name that appears for button\r\n field: 'CancerRace', // Must match stratification key name in json response returned from endpoint\r\n },\r\n {\r\n title: 'Sex', // Name that appears for button\r\n field: 'sex', // Must match stratification key name in json response returned from endpoint\r\n },\r\n ],\r\n defaultSelection: '000', // 000 is the code used for statewide data at the DB\r\n defaultSetNames: ['stateRate'],\r\n baseline: '000',\r\n info: {\r\n title:\r\n 'Rate of Liver and Intraheptic Bile Duct Cancer',\r\n id: 'chart-liver-cancer-trend',\r\n subtitle: 'Age-adjusted rate per 100,000',\r\n },\r\n chartTitle: [\r\n 'Age-Adjusted Incidence Rate of Liver and Intraheptic Bile Duct Cancer',\r\n ],\r\n chartSubtitle: '',\r\n displayChartTitle: true,\r\n displayChartSubtitle: false,\r\n displayYAxisLabel: true,\r\n displayXAxisLabel: true,\r\n displayChartDiscontinuityGraphic: false,\r\n yAxisLabel:\r\n 'Age-adjusted incidence rate per 100,000 population',\r\n xAxisLabel: 'Period',\r\n chartXAxisField: 'year', // should match field name used in incoming dataset\r\n chartDataSets: ['rate', 'stateRate'], // should match field names used in incoming dataset\r\n url: `${process.env.REACT_APP_EPHT_API}/Cancer/GetRate`,\r\n urlParams: [\r\n { param: 'jurisdiction', valueKey: 'code' },\r\n {\r\n param: 'type',\r\n value: 'Cancer_LiverIntrahepaticBileDuct_5yr',\r\n },\r\n ],\r\n chartConfig: {\r\n mainDatasets: [\r\n {\r\n label: 'County',\r\n setName: 'rate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n baseline: true,\r\n label: 'Statewide',\r\n setName: 'stateRate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n ],\r\n // Note: Baseline dataset should receive `baseline: true` property.\r\n // Additional note: The `order` property will dictate how lines stack on each other, in ascending order. Baseline should be given highest value to ensure it is colored correctly by Chart.js (gray)\r\n stratificationDatasets: [\r\n {\r\n label: 'White',\r\n setName: 'rateWhite',\r\n stratification: 'CancerRace',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: 'Black',\r\n setName: 'rateBlack',\r\n stratification: 'CancerRace',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: 'All',\r\n setName: 'rateTotal',\r\n baseline: true,\r\n stratification: 'CancerRace',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 5,\r\n data: [],\r\n },\r\n {\r\n label: 'Female',\r\n setName: 'rateFemale',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: 'Male',\r\n setName: 'rateMale',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: 'All',\r\n baseline: true,\r\n setName: 'rateTotal',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 3,\r\n data: [],\r\n },\r\n ],\r\n },\r\n columnHeaders: [\r\n {\r\n field: 'year',\r\n headerName: 'Year',\r\n width: 115,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate',\r\n headerName: 'County Rate',\r\n width: 134,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'stateRate',\r\n headerName: 'Statewide Rate',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateWhite',\r\n headerName: 'White',\r\n stratification: 'CancerRace',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateBlack',\r\n headerName: 'Black',\r\n stratification: 'CancerRace',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateMale',\r\n headerName: 'Male',\r\n stratification: 'sex',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateFemale',\r\n headerName: 'Female',\r\n stratification: 'sex',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Age-Adjusted Incidence Rate of Liver and Intraheptic Bile Duct Cancer',\r\n },\r\n },\r\n about: ` `, // Fetched from the database\r\n resources: [\r\n 'External Link',\r\n 'Other Link',\r\n 'More Info',\r\n 'Downloadable PDF',\r\n 'Downloadable CSV',\r\n 'Link',\r\n ],\r\n },\r\n },\r\n },\r\n 'cancer-melanoma': {\r\n topicTitle: 'Melanoma of the Skin',\r\n topicPath: 'cancer-melanoma',\r\n parentTopic: 'cancer',\r\n category: 'health',\r\n defaultTabPath: 'melanoma',\r\n overview: [\r\n `

Cancer is a group of diseases in which cells of the body grow out of control. Each year, more than 31,000 Marylanders are diagnosed with invasive cancer, and more than 10,000 Marylanders die due to cancer.

The EPHT data portal contains information on some of the most common cancers and those about which the Department receives questions. For more information, please visit the Maryland Center for Cancer Prevention and Control.

`,\r\n ],\r\n themeOverviews: [\r\n {\r\n theme: 'Status',\r\n text:\r\n 'Provides a detailed view of different types of cancer over time throughout Maryland by area.',\r\n },\r\n ],\r\n aboutData: `
Data FactsCancer
Why these data are importantCancer continues to be the second leading cause of death in Maryland and nationally. The presence of certain contaminants in the environment has been found to be correlated with the incidence of some cancers. Tracking these cancers is important to better understand their distributions in the population, and how this may potentially be impacted by environmental exposures.
Data SourcesMaryland Cancer Registry
Years available2010 - most recent complete year available (generally 2 years prior to current year)
Data source descriptionAll new cases of reportable cancers (excluding non-genital squamous cell or basal cell skin cancer) that are diagnosed and/or treated in Maryland and reported to the MCR
What's reportedCancer Incidence
How it's reportedAge adjusted incidence rates
Level of geographic detail State, county, and census tract
Level of demographic detailRace/ethnicity and sex
Data disclaimers

Gender is reported to the MCR as male, female, hermaphrodite, transsexual, and unknown (not stated); but numbers and rates for only males and females are displayed here. As a result, the totals shown in the count for number of cancer cases may not equal the sum of males and females.

County is reported to the MCR as the jurisdiction of residence for each cancer case or is categorized as unknown. As a result, the totals shown in the count for number of cases may not equal the sum of cancer cases across the 24 jurisdictions in Maryland due to cases with unknown county.

Age-adjusted rates do not include cancer cases for which age has not been reported. Incidence rates were calculated using the 2000 US standard population.

Incidence data provided by the MCR include the race categories: white, black, other, and unknown, regardless of Hispanic ethnicity. The \"Other\" race category includes cases reported as American Indian or Alaskan Native, Asian or Pacific Islander, and any other race category, except cases with unknown or missing race.

The summary data provided on this website are downloadable. For more detailed data, refer to the data sources.Yes
Environmental Health Helpline1-866-703-3266
mdh.envhealth@maryland.gov
Last Updated6/14/2023
Data suppression rules

For county-level data: Rates are suppressed when counts of cases are between 1 and 15.

For census tract-level data: Rates are suppressed when counts of cases are between 1 and 15 and/or the total population size is less than 5,000.

`,\r\n countySuppressionRules: {\r\n range: '1 to 10',\r\n populationMin: '5,000',\r\n },\r\n omitNcdmData: true, // Prevents the Download All NCDM button from displaying and skips the call to get NCDM configs\r\n themes: {\r\n status: {\r\n defaultTabPath: 'melanoma',\r\n themeTitle: 'Status',\r\n themePath: 'status',\r\n tabs: {\r\n melanoma: {\r\n tabTitle: 'Map',\r\n tabPath: 'melanoma',\r\n contentType: 'map',\r\n contentTitle:\r\n 'Age-Adjusted Incidence Rate of Melanoma of the Skin',\r\n exportTitle:\r\n 'Age-Adjusted Incidence Rate of Melanoma of the Skin',\r\n exportSubtitle:\r\n 'Age-adjusted incidence rate per 100k population (2016-2020) ',\r\n mapSets: [\r\n {\r\n set: 'primary',\r\n geometry: 'County',\r\n outFields: ['County', 'Rate'],\r\n columnHeaders: [\r\n {\r\n field: 'County',\r\n headerName: 'County',\r\n flex: 1,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'Rate',\r\n headerName: 'Rate',\r\n exportHeaderName: 'Rate',\r\n flex: 1, //\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Age-Adjusted Incidence Rate of Melanoma of the Skin',\r\n popupContent: {\r\n title: {\r\n field: 'FullCounty',\r\n },\r\n health: {\r\n name:\r\n 'Melanoma of the Skin rate per 100,000',\r\n field: 'Rate',\r\n unit: '',\r\n },\r\n },\r\n setLayers: [\r\n {\r\n id: 'county-melanoma-cancer',\r\n zIndexPosition: 'back',\r\n title:\r\n 'Incidence Rate of Melanoma of the Skin by County',\r\n yearKey: 'Period',\r\n subtitle:\r\n 'Age-adjusted rate per 100,000 population',\r\n defaultVisible: true,\r\n sourceLayer: true,\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/CancerCounty/MapServer/15`,\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n melanomaTrend: {\r\n tabTitle: 'Trend',\r\n tabPath: 'melanomaTrend',\r\n contentType: 'chart',\r\n // No contentTitle for charts, will be controlled in \"chartTitle\" property below //\r\n exportTitle:\r\n 'Age-Adjusted Incidence Rate of Melanoma of the Skin',\r\n exportSubtitle:\r\n 'Age-adjusted incidence rate per 100k population',\r\n chartType: 'trendline',\r\n selectable: true,\r\n stratifiable: true,\r\n\r\n // The following array of stratifications will create a chart stratification button for each item:\r\n stratifications: [\r\n {\r\n title: 'Race', // Name that appears for button\r\n field: 'CancerRace', // Must match stratification key name in json response returned from endpoint\r\n },\r\n {\r\n title: 'Sex', // Name that appears for button\r\n field: 'sex', // Must match stratification key name in json response returned from endpoint\r\n },\r\n ],\r\n defaultSelection: '000', // 000 is the code used for statewide data at the DB\r\n defaultSetNames: ['stateRate'],\r\n baseline: '000',\r\n info: {\r\n title: 'Rate of Melanoma of the Skin',\r\n id: 'chart-melanoma-cancer-trend',\r\n subtitle: 'Age-adjusted rate per 100,000',\r\n },\r\n chartTitle: [\r\n 'Age-Adjusted Incidence Rate of Melanoma of the Skin',\r\n ],\r\n chartSubtitle: '',\r\n displayChartTitle: true,\r\n displayChartSubtitle: false,\r\n displayYAxisLabel: true,\r\n displayXAxisLabel: true,\r\n displayChartDiscontinuityGraphic: false,\r\n yAxisLabel:\r\n 'Age-adjusted incidence rate per 100,000 population',\r\n xAxisLabel: 'Period',\r\n chartXAxisField: 'year', // should match field name used in incoming dataset\r\n chartDataSets: ['rate', 'stateRate'], // should match field names used in incoming dataset\r\n url: `${process.env.REACT_APP_EPHT_API}/Cancer/GetRate`,\r\n urlParams: [\r\n { param: 'jurisdiction', valueKey: 'code' },\r\n {\r\n param: 'type',\r\n value: 'Cancer_Melanoma_5yr',\r\n },\r\n ],\r\n chartConfig: {\r\n mainDatasets: [\r\n {\r\n label: 'County',\r\n setName: 'rate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n baseline: true,\r\n label: 'Statewide',\r\n setName: 'stateRate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n ],\r\n // Note: Baseline dataset should receive `baseline: true` property.\r\n // Additional note: The `order` property will dictate how lines stack on each other, in ascending order. Baseline should be given highest value to ensure it is colored correctly by Chart.js (gray)\r\n stratificationDatasets: [\r\n {\r\n label: 'White',\r\n setName: 'rateWhite',\r\n stratification: 'CancerRace',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: 'Black',\r\n setName: 'rateBlack',\r\n stratification: 'CancerRace',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: 'All',\r\n setName: 'rateTotal',\r\n baseline: true,\r\n stratification: 'CancerRace',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 5,\r\n data: [],\r\n },\r\n {\r\n label: 'Female',\r\n setName: 'rateFemale',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: 'Male',\r\n setName: 'rateMale',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: 'All',\r\n baseline: true,\r\n setName: 'rateTotal',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 3,\r\n data: [],\r\n },\r\n ],\r\n },\r\n columnHeaders: [\r\n {\r\n field: 'year',\r\n headerName: 'Year',\r\n width: 115,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate',\r\n headerName: 'County Rate',\r\n width: 134,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'stateRate',\r\n headerName: 'Statewide Rate',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateWhite',\r\n headerName: 'White',\r\n stratification: 'CancerRace',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateBlack',\r\n headerName: 'Black',\r\n stratification: 'CancerRace',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateMale',\r\n headerName: 'Male',\r\n stratification: 'sex',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateFemale',\r\n headerName: 'Female',\r\n stratification: 'sex',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Age-Adjusted Incidence Rate of Melanoma of the Skin',\r\n },\r\n },\r\n about: ` `, // Fetched from the database\r\n resources: [\r\n 'External Link',\r\n 'Other Link',\r\n 'More Info',\r\n 'Downloadable PDF',\r\n 'Downloadable CSV',\r\n 'Link',\r\n ],\r\n },\r\n },\r\n },\r\n 'cancer-lymphoma': {\r\n topicTitle: 'Non-Hodgkin Lymphoma',\r\n topicPath: 'cancer-lymphoma',\r\n parentTopic: 'cancer',\r\n category: 'health',\r\n defaultTabPath: 'lymphoma',\r\n overview: [\r\n `

Cancer is a group of diseases in which cells of the body grow out of control. Each year, more than 31,000 Marylanders are diagnosed with invasive cancer, and more than 10,000 Marylanders die due to cancer.

The EPHT data portal contains information on some of the most common cancers and those about which the Department receives questions. For more information, please visit the Maryland Center for Cancer Prevention and Control.

`,\r\n ],\r\n themeOverviews: [\r\n {\r\n theme: 'Status',\r\n text:\r\n 'Provides a detailed view of different types of cancer over time throughout Maryland by area.',\r\n },\r\n ],\r\n aboutData: `
Data FactsCancer
Why these data are importantCancer continues to be the second leading cause of death in Maryland and nationally. The presence of certain contaminants in the environment has been found to be correlated with the incidence of some cancers. Tracking these cancers is important to better understand their distributions in the population, and how this may potentially be impacted by environmental exposures.
Data SourcesMaryland Cancer Registry
Years available2010 - most recent complete year available (generally 2 years prior to current year)
Data source descriptionAll new cases of reportable cancers (excluding non-genital squamous cell or basal cell skin cancer) that are diagnosed and/or treated in Maryland and reported to the MCR
What's reportedCancer Incidence
How it's reportedAge adjusted incidence rates
Level of geographic detail State, county, and census tract
Level of demographic detailRace/ethnicity and sex
Data disclaimers

Gender is reported to the MCR as male, female, hermaphrodite, transsexual, and unknown (not stated); but numbers and rates for only males and females are displayed here. As a result, the totals shown in the count for number of cancer cases may not equal the sum of males and females.

County is reported to the MCR as the jurisdiction of residence for each cancer case or is categorized as unknown. As a result, the totals shown in the count for number of cases may not equal the sum of cancer cases across the 24 jurisdictions in Maryland due to cases with unknown county.

Age-adjusted rates do not include cancer cases for which age has not been reported. Incidence rates were calculated using the 2000 US standard population.

Incidence data provided by the MCR include the race categories: white, black, other, and unknown, regardless of Hispanic ethnicity. The \"Other\" race category includes cases reported as American Indian or Alaskan Native, Asian or Pacific Islander, and any other race category, except cases with unknown or missing race.

The summary data provided on this website are downloadable. For more detailed data, refer to the data sources.Yes
Environmental Health Helpline1-866-703-3266
mdh.envhealth@maryland.gov
Last Updated6/14/2023
Data suppression rules

For county-level data: Rates are suppressed when counts of cases are between 1 and 15.

For census tract-level data: Rates are suppressed when counts of cases are between 1 and 15 and/or the total population size is less than 5,000.

`,\r\n countySuppressionRules: {\r\n range: '1 to 10',\r\n populationMin: '5,000',\r\n },\r\n omitNcdmData: true, // Prevents the Download All NCDM button from displaying and skips the call to get NCDM configs\r\n themes: {\r\n status: {\r\n defaultTabPath: 'lymphoma',\r\n themeTitle: 'Status',\r\n themePath: 'status',\r\n tabs: {\r\n lymphoma: {\r\n tabTitle: 'Map',\r\n tabPath: 'lymphoma',\r\n contentType: 'map',\r\n contentTitle:\r\n 'Age-Adjusted Incidence Rate of Non-Hodgkin Lymphoma',\r\n exportTitle:\r\n 'Age-Adjusted Incidence Rate of Non-Hodgkin Lymphoma',\r\n exportSubtitle:\r\n 'Age-adjusted incidence rate per 100k population (2016-2020) ',\r\n mapSets: [\r\n {\r\n set: 'primary',\r\n geometry: 'County',\r\n outFields: ['County', 'Rate'],\r\n columnHeaders: [\r\n {\r\n field: 'County',\r\n headerName: 'County',\r\n flex: 1,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'Rate',\r\n headerName: 'Rate',\r\n exportHeaderName: 'Rate',\r\n flex: 1, //\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Age-Adjusted Incidence Rate of Non-Hodgkin Lymphoma',\r\n popupContent: {\r\n title: {\r\n field: 'FullCounty',\r\n },\r\n health: {\r\n name:\r\n 'Non-Hodgkins Lymphoma rate per 100,000',\r\n field: 'Rate',\r\n unit: '',\r\n },\r\n },\r\n setLayers: [\r\n {\r\n id: 'county-lymphoma-cancer',\r\n zIndexPosition: 'back',\r\n title:\r\n 'Incidence Rate of Non-Hodgkin Lymphoma by County',\r\n yearKey: 'Period',\r\n subtitle:\r\n 'Age-adjusted rate per 100,000 population',\r\n defaultVisible: true,\r\n sourceLayer: true,\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/CancerCounty/MapServer/14`,\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n lymphomaTrend: {\r\n tabTitle: 'Trend',\r\n tabPath: 'lymphomaTrend',\r\n contentType: 'chart',\r\n // No contentTitle for charts, will be controlled in \"chartTitle\" property below //\r\n exportTitle:\r\n 'Age-Adjusted Incidence Rate of Non-Hodgkin Lymphoma',\r\n exportSubtitle:\r\n 'Age-adjusted incidence rate per 100k population',\r\n chartType: 'trendline',\r\n selectable: true,\r\n stratifiable: true,\r\n\r\n // The following array of stratifications will create a chart stratification button for each item:\r\n stratifications: [\r\n {\r\n title: 'Race', // Name that appears for button\r\n field: 'CancerRace', // Must match stratification key name in json response returned from endpoint\r\n },\r\n {\r\n title: 'Sex', // Name that appears for button\r\n field: 'sex', // Must match stratification key name in json response returned from endpoint\r\n },\r\n ],\r\n defaultSelection: '000', // 000 is the code used for statewide data at the DB\r\n defaultSetNames: ['stateRate'],\r\n baseline: '000',\r\n info: {\r\n title: 'Rate of Non-Hodgkin Lymphoma',\r\n id: 'chart-lymphoma-cancer-trend',\r\n subtitle: 'Age-adjusted rate per 100,000',\r\n },\r\n chartTitle: [\r\n 'Age-Adjusted Incidence Rate of Non-Hodgkin Lymphoma',\r\n ],\r\n chartSubtitle: '',\r\n displayChartTitle: true,\r\n displayChartSubtitle: false,\r\n displayYAxisLabel: true,\r\n displayXAxisLabel: true,\r\n displayChartDiscontinuityGraphic: false,\r\n yAxisLabel:\r\n 'Age-adjusted incidence rate per 100,000 population',\r\n xAxisLabel: 'Period',\r\n chartXAxisField: 'year', // should match field name used in incoming dataset\r\n chartDataSets: ['rate', 'stateRate'], // should match field names used in incoming dataset\r\n url: `${process.env.REACT_APP_EPHT_API}/Cancer/GetRate`,\r\n urlParams: [\r\n { param: 'jurisdiction', valueKey: 'code' },\r\n {\r\n param: 'type',\r\n value: 'Cancer_LymphomaNonHodgkins_5yr',\r\n },\r\n ],\r\n chartConfig: {\r\n mainDatasets: [\r\n {\r\n label: 'County',\r\n setName: 'rate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n baseline: true,\r\n label: 'Statewide',\r\n setName: 'stateRate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n ],\r\n // Note: Baseline dataset should receive `baseline: true` property.\r\n // Additional note: The `order` property will dictate how lines stack on each other, in ascending order. Baseline should be given highest value to ensure it is colored correctly by Chart.js (gray)\r\n stratificationDatasets: [\r\n {\r\n label: 'White',\r\n setName: 'rateWhite',\r\n stratification: 'CancerRace',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: 'Black',\r\n setName: 'rateBlack',\r\n stratification: 'CancerRace',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: 'All',\r\n setName: 'rateTotal',\r\n baseline: true,\r\n stratification: 'CancerRace',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 5,\r\n data: [],\r\n },\r\n {\r\n label: 'Female',\r\n setName: 'rateFemale',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: 'Male',\r\n setName: 'rateMale',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: 'All',\r\n baseline: true,\r\n setName: 'rateTotal',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 3,\r\n data: [],\r\n },\r\n ],\r\n },\r\n columnHeaders: [\r\n {\r\n field: 'year',\r\n headerName: 'Year',\r\n width: 115,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate',\r\n headerName: 'County Rate',\r\n width: 134,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'stateRate',\r\n headerName: 'Statewide Rate',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateWhite',\r\n headerName: 'White',\r\n stratification: 'CancerRace',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateBlack',\r\n headerName: 'Black',\r\n stratification: 'CancerRace',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateMale',\r\n headerName: 'Male',\r\n stratification: 'sex',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateFemale',\r\n headerName: 'Female',\r\n stratification: 'sex',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Age-Adjusted Incidence Rate of Non-Hodgkin Lymphoma',\r\n },\r\n },\r\n // This key value must not be of length 0 'About' tab to render:\r\n about: ` `,\r\n resources: [\r\n 'External Link',\r\n 'Other Link',\r\n 'More Info',\r\n 'Downloadable PDF',\r\n 'Downloadable CSV',\r\n 'Link',\r\n ],\r\n },\r\n },\r\n },\r\n 'cancer-thyroid': {\r\n topicTitle: 'Thyroid Cancer',\r\n topicPath: 'cancer-thyroid',\r\n parentTopic: 'cancer',\r\n category: 'health',\r\n defaultTabPath: 'thyroid',\r\n overview: [\r\n `

Cancer is a group of diseases in which cells of the body grow out of control. Each year, more than 31,000 Marylanders are diagnosed with invasive cancer, and more than 10,000 Marylanders die due to cancer.

The EPHT data portal contains information on some of the most common cancers and those about which the Department receives questions. For more information, please visit the Maryland Center for Cancer Prevention and Control.

`,\r\n ],\r\n themeOverviews: [\r\n {\r\n theme: 'Status',\r\n text:\r\n 'Provides a detailed view of different types of cancer over time throughout Maryland by area.',\r\n },\r\n ],\r\n aboutData: `
Data FactsCancer
Why these data are importantCancer continues to be the second leading cause of death in Maryland and nationally. The presence of certain contaminants in the environment has been found to be correlated with the incidence of some cancers. Tracking these cancers is important to better understand their distributions in the population, and how this may potentially be impacted by environmental exposures.
Data SourcesMaryland Cancer Registry
Years available2010 - most recent complete year available (generally 2 years prior to current year)
Data source descriptionAll new cases of reportable cancers (excluding non-genital squamous cell or basal cell skin cancer) that are diagnosed and/or treated in Maryland and reported to the MCR
What's reportedCancer Incidence
How it's reportedAge adjusted incidence rates
Level of geographic detail State, county, and census tract
Level of demographic detailRace/ethnicity and sex
Data disclaimers

Gender is reported to the MCR as male, female, hermaphrodite, transsexual, and unknown (not stated); but numbers and rates for only males and females are displayed here. As a result, the totals shown in the count for number of cancer cases may not equal the sum of males and females.

County is reported to the MCR as the jurisdiction of residence for each cancer case or is categorized as unknown. As a result, the totals shown in the count for number of cases may not equal the sum of cancer cases across the 24 jurisdictions in Maryland due to cases with unknown county.

Age-adjusted rates do not include cancer cases for which age has not been reported. Incidence rates were calculated using the 2000 US standard population.

Incidence data provided by the MCR include the race categories: white, black, other, and unknown, regardless of Hispanic ethnicity. The \"Other\" race category includes cases reported as American Indian or Alaskan Native, Asian or Pacific Islander, and any other race category, except cases with unknown or missing race.

The summary data provided on this website are downloadable. For more detailed data, refer to the data sources.Yes
Environmental Health Helpline1-866-703-3266
mdh.envhealth@maryland.gov
Last Updated6/14/2023
Data suppression rules

For county-level data: Rates are suppressed when counts of cases are between 1 and 15.

For census tract-level data: Rates are suppressed when counts of cases are between 1 and 15 and/or the total population size is less than 5,000.

`,\r\n countySuppressionRules: {\r\n range: '1 to 10',\r\n populationMin: '5,000',\r\n },\r\n omitNcdmData: true, // Prevents the Download All NCDM button from displaying and skips the call to get NCDM configs\r\n themes: {\r\n status: {\r\n defaultTabPath: 'thyroid',\r\n themeTitle: 'Status',\r\n themePath: 'status',\r\n tabs: {\r\n thyroid: {\r\n tabTitle: 'Map',\r\n tabPath: 'thyroid',\r\n contentType: 'map',\r\n contentTitle:\r\n 'Age-Adjusted Incidence Rate of Thyroid Cancer',\r\n exportTitle:\r\n 'Age-Adjusted Incidence Rate of Thyroid Cancer',\r\n exportSubtitle:\r\n 'Age-adjusted incidence rate per 100k population (2016-2020) ',\r\n mapSets: [\r\n {\r\n set: 'primary',\r\n geometry: 'County',\r\n outFields: ['County', 'Rate'],\r\n columnHeaders: [\r\n {\r\n field: 'County',\r\n headerName: 'County',\r\n flex: 1,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'Rate',\r\n headerName: 'Rate',\r\n exportHeaderName: 'Rate',\r\n flex: 1, //\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Age-Adjusted Incidence Rate of Thyroid Cancer',\r\n popupContent: {\r\n title: {\r\n field: 'FullCounty',\r\n },\r\n health: {\r\n name: 'Thyroid Cancer rate per 100,000',\r\n field: 'Rate',\r\n unit: '',\r\n },\r\n },\r\n setLayers: [\r\n {\r\n id: 'county-thyroid-cancer',\r\n zIndexPosition: 'back',\r\n title:\r\n 'Incidence Rate of Thyroid Cancer by County',\r\n yearKey: 'Period',\r\n subtitle:\r\n 'Age-adjusted rate per 100,000 population',\r\n defaultVisible: true,\r\n sourceLayer: true,\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/CancerCounty/MapServer/18`,\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n thyroidTrend: {\r\n tabTitle: 'Trend',\r\n tabPath: 'thyroidTrend',\r\n contentType: 'chart',\r\n // No contentTitle for charts, will be controlled in \"chartTitle\" property below //\r\n exportTitle:\r\n 'Age-Adjusted Incidence Rate of Thyroid Cancer',\r\n exportSubtitle:\r\n 'Age-adjusted incidence rate per 100k population',\r\n chartType: 'trendline',\r\n selectable: true,\r\n stratifiable: true,\r\n\r\n // The following array of stratifications will create a chart stratification button for each item:\r\n stratifications: [\r\n {\r\n title: 'Race', // Name that appears for button\r\n field: 'CancerRace', // Must match stratification key name in json response returned from endpoint\r\n },\r\n {\r\n title: 'Sex', // Name that appears for button\r\n field: 'sex', // Must match stratification key name in json response returned from endpoint\r\n },\r\n ],\r\n defaultSelection: '000', // 000 is the code used for statewide data at the DB\r\n defaultSetNames: ['stateRate'],\r\n baseline: '000',\r\n info: {\r\n title: 'Rate of Thyroid Cancer',\r\n id: 'chart-thyroid-cancer-trend',\r\n subtitle: 'Age-adjusted rate per 100,000',\r\n },\r\n chartTitle: [\r\n 'Age-Adjusted Incidence Rate of Thyroid Cancer',\r\n ],\r\n chartSubtitle: '',\r\n displayChartTitle: true,\r\n displayChartSubtitle: false,\r\n displayYAxisLabel: true,\r\n displayXAxisLabel: true,\r\n displayChartDiscontinuityGraphic: false,\r\n yAxisLabel:\r\n 'Age-adjusted incidence rate per 100,000 population',\r\n xAxisLabel: 'Period',\r\n chartXAxisField: 'year', // should match field name used in incoming dataset\r\n chartDataSets: ['rate', 'stateRate'], // should match field names used in incoming dataset\r\n url: `${process.env.REACT_APP_EPHT_API}/Cancer/GetRate`,\r\n urlParams: [\r\n { param: 'jurisdiction', valueKey: 'code' },\r\n {\r\n param: 'type',\r\n value: 'Cancer_Thyroid_5yr',\r\n },\r\n ],\r\n chartConfig: {\r\n mainDatasets: [\r\n {\r\n label: 'County',\r\n setName: 'rate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n baseline: true,\r\n label: 'Statewide',\r\n setName: 'stateRate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n ],\r\n // Note: Baseline dataset should receive `baseline: true` property.\r\n // Additional note: The `order` property will dictate how lines stack on each other, in ascending order. Baseline should be given highest value to ensure it is colored correctly by Chart.js (gray)\r\n stratificationDatasets: [\r\n {\r\n label: 'White',\r\n setName: 'rateWhite',\r\n stratification: 'CancerRace',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: 'Black',\r\n setName: 'rateBlack',\r\n stratification: 'CancerRace',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: 'All',\r\n setName: 'rateTotal',\r\n baseline: true,\r\n stratification: 'CancerRace',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 5,\r\n data: [],\r\n },\r\n {\r\n label: 'Female',\r\n setName: 'rateFemale',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: 'Male',\r\n setName: 'rateMale',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: 'All',\r\n baseline: true,\r\n setName: 'rateTotal',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 3,\r\n data: [],\r\n },\r\n ],\r\n },\r\n columnHeaders: [\r\n {\r\n field: 'year',\r\n headerName: 'Year',\r\n width: 115,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate',\r\n headerName: 'County Rate',\r\n width: 134,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'stateRate',\r\n headerName: 'Statewide Rate',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateWhite',\r\n headerName: 'White',\r\n stratification: 'CancerRace',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateBlack',\r\n headerName: 'Black',\r\n stratification: 'CancerRace',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateMale',\r\n headerName: 'Male',\r\n stratification: 'sex',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateFemale',\r\n headerName: 'Female',\r\n stratification: 'sex',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Age-Adjusted Incidence Rate of Thyroid Cancer',\r\n },\r\n },\r\n about: ` `, // Fetched from the database\r\n resources: [\r\n 'External Link',\r\n 'Other Link',\r\n 'More Info',\r\n 'Downloadable PDF',\r\n 'Downloadable CSV',\r\n 'Link',\r\n ],\r\n },\r\n },\r\n },\r\n 'cancer-mesothelioma': {\r\n topicTitle: 'Mesothelioma',\r\n topicPath: 'cancer-mesothelioma',\r\n parentTopic: 'cancer',\r\n category: 'health',\r\n defaultTabPath: 'mesothelioma',\r\n overview: [\r\n `

Cancer is a group of diseases in which cells of the body grow out of control. Each year, more than 31,000 Marylanders are diagnosed with invasive cancer, and more than 10,000 Marylanders die due to cancer.

The EPHT data portal contains information on some of the most common cancers and those about which the Department receives questions. For more information, please visit the Maryland Center for Cancer Prevention and Control.

`,\r\n ],\r\n themeOverviews: [\r\n {\r\n theme: 'Status',\r\n text:\r\n 'Provides a detailed view of different types of cancer over time throughout Maryland by area.',\r\n },\r\n ],\r\n aboutData: `
Data FactsCancer
Why these data are importantCancer continues to be the second leading cause of death in Maryland and nationally. The presence of certain contaminants in the environment has been found to be correlated with the incidence of some cancers. Tracking these cancers is important to better understand their distributions in the population, and how this may potentially be impacted by environmental exposures.
Data SourcesMaryland Cancer Registry
Years available2010 - most recent complete year available (generally 2 years prior to current year)
Data source descriptionAll new cases of reportable cancers (excluding non-genital squamous cell or basal cell skin cancer) that are diagnosed and/or treated in Maryland and reported to the MCR
What's reportedCancer Incidence
How it's reportedAge adjusted incidence rates
Level of geographic detail State, county, and census tract
Level of demographic detailRace/ethnicity and sex
Data disclaimers

Gender is reported to the MCR as male, female, hermaphrodite, transsexual, and unknown (not stated); but numbers and rates for only males and females are displayed here. As a result, the totals shown in the count for number of cancer cases may not equal the sum of males and females.

County is reported to the MCR as the jurisdiction of residence for each cancer case or is categorized as unknown. As a result, the totals shown in the count for number of cases may not equal the sum of cancer cases across the 24 jurisdictions in Maryland due to cases with unknown county.

Age-adjusted rates do not include cancer cases for which age has not been reported. Incidence rates were calculated using the 2000 US standard population.

Incidence data provided by the MCR include the race categories: white, black, other, and unknown, regardless of Hispanic ethnicity. The \"Other\" race category includes cases reported as American Indian or Alaskan Native, Asian or Pacific Islander, and any other race category, except cases with unknown or missing race.

The summary data provided on this website are downloadable. For more detailed data, refer to the data sources.Yes
Environmental Health Helpline1-866-703-3266
mdh.envhealth@maryland.gov
Last Updated6/14/2023
Data suppression rules

For county-level data: Rates are suppressed when counts of cases are between 1 and 15.

For census tract-level data: Rates are suppressed when counts of cases are between 1 and 15 and/or the total population size is less than 5,000.

`,\r\n countySuppressionRules: {\r\n range: '1 to 10',\r\n populationMin: '5,000',\r\n },\r\n omitNcdmData: true, // Prevents the Download All NCDM button from displaying and skips the call to get NCDM configs\r\n themes: {\r\n status: {\r\n defaultTabPath: 'mesothelioma',\r\n themeTitle: 'Status',\r\n themePath: 'status',\r\n tabs: {\r\n mesothelioma: {\r\n tabTitle: 'Map',\r\n tabPath: 'mesothelioma',\r\n contentType: 'map',\r\n contentTitle:\r\n 'Age-Adjusted Incidence Rate of Mesothelioma',\r\n exportTitle:\r\n 'Age-Adjusted Incidence Rate of Mesothelioma',\r\n exportSubtitle:\r\n 'Age-adjusted incidence rate per 100k population (2016-2020) ',\r\n mapSets: [\r\n {\r\n set: 'primary',\r\n geometry: 'County',\r\n outFields: ['County', 'Rate'],\r\n columnHeaders: [\r\n {\r\n field: 'County',\r\n headerName: 'County',\r\n flex: 1,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'Rate',\r\n headerName: 'Rate',\r\n exportHeaderName: 'Rate',\r\n flex: 1, //\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Age-Adjusted Incidence Rate of Mesothelioma',\r\n popupContent: {\r\n title: {\r\n field: 'FullCounty',\r\n },\r\n health: {\r\n name: 'Mesothelioma rate per 100,000',\r\n field: 'Rate',\r\n unit: '',\r\n },\r\n },\r\n setLayers: [\r\n {\r\n id: 'county-mesothelioma-cancer',\r\n zIndexPosition: 'back',\r\n title:\r\n 'Incidence Rate of Mesothelioma of the Skin by County',\r\n yearKey: 'Period',\r\n subtitle:\r\n 'Age-adjusted rate per 100,000 population',\r\n defaultVisible: true,\r\n sourceLayer: true,\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/CancerCounty/MapServer/16`,\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n mesotheliomaTrend: {\r\n tabTitle: 'Trend',\r\n tabPath: 'mesotheliomaTrend',\r\n contentType: 'chart',\r\n // No contentTitle for charts, will be controlled in \"chartTitle\" property below //\r\n exportTitle:\r\n 'Age-Adjusted Incidence Rate of Mesothelioma',\r\n exportSubtitle:\r\n 'Age-adjusted incidence rate per 100k population',\r\n chartType: 'trendline',\r\n selectable: true,\r\n stratifiable: true,\r\n\r\n // The following array of stratifications will create a chart stratification button for each item:\r\n stratifications: [\r\n {\r\n title: 'Race', // Name that appears for button\r\n field: 'CancerRace', // Must match stratification key name in json response returned from endpoint\r\n },\r\n {\r\n title: 'Sex', // Name that appears for button\r\n field: 'sex', // Must match stratification key name in json response returned from endpoint\r\n },\r\n ],\r\n defaultSelection: '000', // 000 is the code used for statewide data at the DB\r\n defaultSetNames: ['stateRate'],\r\n baseline: '000',\r\n info: {\r\n title: 'Rate of Mesothelioma',\r\n id: 'chart-mesothelioma-trend',\r\n subtitle: 'Age-adjusted rate per 100,000',\r\n },\r\n chartTitle: [\r\n 'Age-Adjusted Incidence Rate of Mesothelioma',\r\n ],\r\n chartSubtitle: '',\r\n displayChartTitle: true,\r\n displayChartSubtitle: false,\r\n displayYAxisLabel: true,\r\n displayXAxisLabel: true,\r\n displayChartDiscontinuityGraphic: false,\r\n yAxisLabel:\r\n 'Age-adjusted incidence rate per 100,000 population',\r\n xAxisLabel: 'Period',\r\n chartXAxisField: 'year', // should match field name used in incoming dataset\r\n chartDataSets: ['rate', 'stateRate'], // should match field names used in incoming dataset\r\n url: `${process.env.REACT_APP_EPHT_API}/Cancer/GetRate`,\r\n urlParams: [\r\n { param: 'jurisdiction', valueKey: 'code' },\r\n {\r\n param: 'type',\r\n value: 'Cancer_Mesothelioma_5yr',\r\n },\r\n ],\r\n chartConfig: {\r\n mainDatasets: [\r\n {\r\n label: 'County',\r\n setName: 'rate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n baseline: true,\r\n label: 'Statewide',\r\n setName: 'stateRate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n ],\r\n // Note: Baseline dataset should receive `baseline: true` property.\r\n // Additional note: The `order` property will dictate how lines stack on each other, in ascending order. Baseline should be given highest value to ensure it is colored correctly by Chart.js (gray)\r\n stratificationDatasets: [\r\n {\r\n label: 'White',\r\n setName: 'rateWhite',\r\n stratification: 'CancerRace',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: 'Black',\r\n setName: 'rateBlack',\r\n stratification: 'CancerRace',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: 'All',\r\n setName: 'rateTotal',\r\n baseline: true,\r\n stratification: 'CancerRace',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 5,\r\n data: [],\r\n },\r\n {\r\n label: 'Female',\r\n setName: 'rateFemale',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: 'Male',\r\n setName: 'rateMale',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: 'All',\r\n baseline: true,\r\n setName: 'rateTotal',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 3,\r\n data: [],\r\n },\r\n ],\r\n },\r\n columnHeaders: [\r\n {\r\n field: 'year',\r\n headerName: 'Year',\r\n width: 115,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate',\r\n headerName: 'County Rate',\r\n width: 134,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'stateRate',\r\n headerName: 'Statewide Rate',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateWhite',\r\n headerName: 'White',\r\n stratification: 'CancerRace',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateBlack',\r\n headerName: 'Black',\r\n stratification: 'CancerRace',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateMale',\r\n headerName: 'Male',\r\n stratification: 'sex',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateFemale',\r\n headerName: 'Female',\r\n stratification: 'sex',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Age-Adjusted Incidence Rate of Mesothelioma',\r\n },\r\n },\r\n about: ` `, // Fetched from the database\r\n resources: [\r\n 'External Link',\r\n 'Other Link',\r\n 'More Info',\r\n 'Downloadable PDF',\r\n 'Downloadable CSV',\r\n 'Link',\r\n ],\r\n },\r\n },\r\n },\r\n 'cancer-bladder': {\r\n topicTitle: 'Bladder Cancer',\r\n topicPath: 'cancer-bladder',\r\n parentTopic: 'cancer',\r\n category: 'health',\r\n defaultTabPath: 'acuteMyeloid',\r\n overview: [\r\n `

Cancer is a group of diseases in which cells of the body grow out of control. Each year, more than 31,000 Marylanders are diagnosed with invasive cancer, and more than 10,000 Marylanders die due to cancer.

The EPHT data portal contains information on some of the most common cancers and those about which the Department receives questions. For more information, please visit the Maryland Center for Cancer Prevention and Control.

`,\r\n ],\r\n themeOverviews: [\r\n {\r\n theme: 'Status',\r\n text:\r\n 'Provides a detailed view of different types of cancer over time throughout Maryland by area.',\r\n },\r\n ],\r\n aboutData: `
Data FactsCancer
Why these data are importantCancer continues to be the second leading cause of death in Maryland and nationally. The presence of certain contaminants in the environment has been found to be correlated with the incidence of some cancers. Tracking these cancers is important to better understand their distributions in the population, and how this may potentially be impacted by environmental exposures.
Data SourcesMaryland Cancer Registry
Years available2010 - most recent complete year available (generally 2 years prior to current year)
Data source descriptionAll new cases of reportable cancers (excluding non-genital squamous cell or basal cell skin cancer) that are diagnosed and/or treated in Maryland and reported to the MCR
What's reportedCancer Incidence
How it's reportedAge adjusted incidence rates
Level of geographic detail State, county, and census tract
Level of demographic detailRace/ethnicity and sex
Data disclaimers

Gender is reported to the MCR as male, female, hermaphrodite, transsexual, and unknown (not stated); but numbers and rates for only males and females are displayed here. As a result, the totals shown in the count for number of cancer cases may not equal the sum of males and females.

County is reported to the MCR as the jurisdiction of residence for each cancer case or is categorized as unknown. As a result, the totals shown in the count for number of cases may not equal the sum of cancer cases across the 24 jurisdictions in Maryland due to cases with unknown county.

Age-adjusted rates do not include cancer cases for which age has not been reported. Incidence rates were calculated using the 2000 US standard population.

Incidence data provided by the MCR include the race categories: white, black, other, and unknown, regardless of Hispanic ethnicity. The \"Other\" race category includes cases reported as American Indian or Alaskan Native, Asian or Pacific Islander, and any other race category, except cases with unknown or missing race.

The summary data provided on this website are downloadable. For more detailed data, refer to the data sources.Yes
Environmental Health Helpline1-866-703-3266
mdh.envhealth@maryland.gov
Last Updated6/14/2023
Data suppression rules

For county-level data: Rates are suppressed when counts of cases are between 1 and 15.

For census tract-level data: Rates are suppressed when counts of cases are between 1 and 15 and/or the total population size is less than 5,000.

`,\r\n countySuppressionRules: {\r\n range: '1 to 10',\r\n populationMin: '5,000',\r\n },\r\n omitNcdmData: true, // Prevents the Download All NCDM button from displaying and skips the call to get NCDM configs\r\n themes: {\r\n status: {\r\n defaultTabPath: 'bladder',\r\n themeTitle: 'Status',\r\n themePath: 'status',\r\n tabs: {\r\n bladder: {\r\n tabTitle: 'Map',\r\n tabPath: 'bladder',\r\n contentType: 'map',\r\n contentTitle:\r\n 'Age-Adjusted Incidence Rate of Bladder Cancer',\r\n exportTitle: 'Age-Adjusted Incidence Bladder Cancer',\r\n exportSubtitle:\r\n 'Age-adjusted incidence rate per 100k population (2016-2020)',\r\n mapSets: [\r\n {\r\n set: 'primary',\r\n geometry: 'County',\r\n outFields: ['County', 'Rate'],\r\n columnHeaders: [\r\n {\r\n field: 'County',\r\n headerName: 'County',\r\n flex: 1,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'Rate',\r\n headerName: 'Rate',\r\n exportHeaderName: 'Rate',\r\n flex: 1, //\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Age-Adjusted Incidence Rate of Bladder Cancer',\r\n popupContent: {\r\n title: {\r\n field: 'FullCounty',\r\n },\r\n health: {\r\n name: 'Bladder Cancer rate per 100,000',\r\n field: 'Rate',\r\n unit: '',\r\n },\r\n },\r\n setLayers: [\r\n {\r\n id: 'county-bladder-cancer',\r\n zIndexPosition: 'back',\r\n title:\r\n 'Incidence Rate of Bladder Cancer by County',\r\n yearKey: 'Period',\r\n subtitle:\r\n 'Age-adjusted rate per 100,000 population',\r\n defaultVisible: true,\r\n sourceLayer: true,\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/CancerCounty/MapServer/5`,\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n bladderTrend: {\r\n tabTitle: 'Trend',\r\n tabPath: 'bladderTrend',\r\n contentType: 'chart',\r\n // No contentTitle for charts, will be controlled in \"chartTitle\" property below //\r\n exportTitle:\r\n 'Age-Adjusted Incidence Rate of Bladder Cancer',\r\n exportSubtitle:\r\n 'Age-adjusted incidence rate per 100k population',\r\n chartType: 'trendline',\r\n selectable: true,\r\n stratifiable: true,\r\n\r\n // The following array of stratifications will create a chart stratification button for each item:\r\n stratifications: [\r\n {\r\n title: 'Race', // Name that appears for button\r\n field: 'CancerRace', // Must match stratification key name in json response returned from endpoint\r\n },\r\n {\r\n title: 'Sex', // Name that appears for button\r\n field: 'sex', // Must match stratification key name in json response returned from endpoint\r\n },\r\n ],\r\n defaultSelection: '000', // 000 is the code used for statewide data at the DB\r\n defaultSetNames: ['stateRate'],\r\n baseline: '000',\r\n info: {\r\n title: 'Rate of CML Leukemia',\r\n id: 'chart-bladder-cancer-trend',\r\n subtitle: 'Age-adjusted rate per 100,000',\r\n },\r\n chartTitle: [\r\n 'Age-Adjusted Incidence Rate of Bladder Cancer',\r\n ],\r\n chartSubtitle: '',\r\n displayChartTitle: true,\r\n displayChartSubtitle: false,\r\n displayYAxisLabel: true,\r\n displayXAxisLabel: true,\r\n displayChartDiscontinuityGraphic: false,\r\n yAxisLabel:\r\n 'Age-adjusted incidence rate per 100,000 population',\r\n xAxisLabel: 'Period',\r\n chartXAxisField: 'year', // should match field name used in incoming dataset\r\n chartDataSets: ['rate', 'stateRate'], // should match field names used in incoming dataset\r\n url: `${process.env.REACT_APP_EPHT_API}/Cancer/GetRate`,\r\n urlParams: [\r\n { param: 'jurisdiction', valueKey: 'code' },\r\n {\r\n param: 'type',\r\n value: 'Cancer_Bladder_5yr',\r\n },\r\n ],\r\n chartConfig: {\r\n mainDatasets: [\r\n {\r\n label: 'County',\r\n setName: 'rate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n baseline: true,\r\n label: 'Statewide',\r\n setName: 'stateRate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n ],\r\n // Note: Baseline dataset should receive `baseline: true` property.\r\n // Additional note: The `order` property will dictate how lines stack on each other, in ascending order. Baseline should be given highest value to ensure it is colored correctly by Chart.js (gray)\r\n stratificationDatasets: [\r\n {\r\n label: 'White',\r\n setName: 'rateWhite',\r\n stratification: 'CancerRace',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: 'Black',\r\n setName: 'rateBlack',\r\n stratification: 'CancerRace',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: 'All',\r\n setName: 'rateTotal',\r\n baseline: true,\r\n stratification: 'CancerRace',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 5,\r\n data: [],\r\n },\r\n {\r\n label: 'Female',\r\n setName: 'rateFemale',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: 'Male',\r\n setName: 'rateMale',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: 'All',\r\n baseline: true,\r\n setName: 'rateTotal',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 3,\r\n data: [],\r\n },\r\n ],\r\n },\r\n columnHeaders: [\r\n {\r\n field: 'year',\r\n headerName: 'Year',\r\n width: 115,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate',\r\n headerName: 'County Rate',\r\n width: 134,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'stateRate',\r\n headerName: 'Statewide Rate',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateWhite',\r\n headerName: 'White',\r\n stratification: 'CancerRace',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateBlack',\r\n headerName: 'Black',\r\n stratification: 'CancerRace',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateMale',\r\n headerName: 'Male',\r\n stratification: 'sex',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rateFemale',\r\n headerName: 'Female',\r\n stratification: 'sex',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Age-Adjusted Incidence Rate of Bladder Cancer',\r\n },\r\n },\r\n about: ` `, // Fetched from the database\r\n resources: [\r\n 'External Link',\r\n 'Other Link',\r\n 'More Info',\r\n 'Downloadable PDF',\r\n 'Downloadable CSV',\r\n 'Link',\r\n ],\r\n },\r\n },\r\n },\r\n 'cancer-prostate': {\r\n topicTitle: 'Prostate Cancer',\r\n topicPath: 'cancer-prostate',\r\n parentTopic: 'cancer',\r\n category: 'health',\r\n defaultTabPath: 'prostate',\r\n overview: [\r\n `

Cancer is a group of diseases in which cells of the body grow out of control. Each year, more than 31,000 Marylanders are diagnosed with invasive cancer, and more than 10,000 Marylanders die due to cancer.

The EPHT data portal contains information on some of the most common cancers and those about which the Department receives questions. For more information, please visit the Maryland Center for Cancer Prevention and Control.

`,\r\n ],\r\n themeOverviews: [\r\n {\r\n theme: 'Status',\r\n text:\r\n 'Provides a detailed view of different types of cancer over time throughout Maryland by area.',\r\n },\r\n ],\r\n aboutData: `
Data FactsCancer
Why these data are importantCancer continues to be the second leading cause of death in Maryland and nationally. The presence of certain contaminants in the environment has been found to be correlated with the incidence of some cancers. Tracking these cancers is important to better understand their distributions in the population, and how this may potentially be impacted by environmental exposures.
Data SourcesMaryland Cancer Registry
Years available2010 - most recent complete year available (generally 2 years prior to current year)
Data source descriptionAll new cases of reportable cancers (excluding non-genital squamous cell or basal cell skin cancer) that are diagnosed and/or treated in Maryland and reported to the MCR
What's reportedCancer Incidence
How it's reportedAge adjusted incidence rates
Level of geographic detail State, county, and census tract
Level of demographic detailRace/ethnicity and sex
Data disclaimers

Gender is reported to the MCR as male, female, hermaphrodite, transsexual, and unknown (not stated); but numbers and rates for only males and females are displayed here. As a result, the totals shown in the count for number of cancer cases may not equal the sum of males and females.

County is reported to the MCR as the jurisdiction of residence for each cancer case or is categorized as unknown. As a result, the totals shown in the count for number of cases may not equal the sum of cancer cases across the 24 jurisdictions in Maryland due to cases with unknown county.

Age-adjusted rates do not include cancer cases for which age has not been reported. Incidence rates were calculated using the 2000 US standard population.

Incidence data provided by the MCR include the race categories: white, black, other, and unknown, regardless of Hispanic ethnicity. The \"Other\" race category includes cases reported as American Indian or Alaskan Native, Asian or Pacific Islander, and any other race category, except cases with unknown or missing race.

The summary data provided on this website are downloadable. For more detailed data, refer to the data sources.Yes
Environmental Health Helpline1-866-703-3266
mdh.envhealth@maryland.gov
Last Updated6/14/2023
Data suppression rules

For county-level data: Rates are suppressed when counts of cases are between 1 and 15.

For census tract-level data: Rates are suppressed when counts of cases are between 1 and 15 and/or the total population size is less than 5,000.

`,\r\n countySuppressionRules: {\r\n range: '1 to 10',\r\n populationMin: '5,000',\r\n },\r\n omitNcdmData: true, // Prevents the Download All NCDM button from displaying and skips the call to get NCDM configs\r\n themes: {\r\n status: {\r\n defaultTabPath: 'prostate',\r\n themeTitle: 'Status',\r\n themePath: 'status',\r\n tabs: {\r\n prostate: {\r\n tabTitle: 'Map',\r\n tabPath: 'prostate',\r\n contentType: 'map',\r\n contentTitle:\r\n 'Age-Adjusted Incidence Rate of Prostate Cancer',\r\n exportTitle:\r\n 'Age-Adjusted Incidence Rate of Prostate Cancer',\r\n exportSubtitle:\r\n 'Age-adjusted incidence rate per 100k population (County: 2016-2020, Tract: 2015-2019)',\r\n mapSets: [\r\n {\r\n set: 'primary',\r\n geometry: 'County',\r\n outFields: ['County', 'Rate'],\r\n columnHeaders: [\r\n {\r\n field: 'County',\r\n headerName: 'County',\r\n flex: 1,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'Rate',\r\n headerName: 'Rate',\r\n exportHeaderName: 'Rate',\r\n flex: 1, //\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Age-Adjusted Incidence Rate of Prostate Cancer',\r\n popupContent: {\r\n title: {\r\n field: 'FullCounty',\r\n },\r\n health: {\r\n name:\r\n 'Prostate Cancer rate per 100,000',\r\n field: 'Rate',\r\n unit: '',\r\n },\r\n },\r\n setLayers: [\r\n {\r\n id: 'county-prostate-cancer',\r\n zIndexPosition: 'back',\r\n title:\r\n 'Incidence Rate of Prostate Cancer by County',\r\n yearKey: 'Period',\r\n subtitle:\r\n 'Age-adjusted rate per 100,000 population',\r\n defaultVisible: true,\r\n sourceLayer: true,\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/CancerCounty/MapServer/17`,\r\n },\r\n ],\r\n },\r\n {\r\n set: 'secondary',\r\n geometry: 'Tract',\r\n outFields: [\r\n 'GEOID',\r\n 'TractCode',\r\n 'TractName',\r\n 'FullCounty',\r\n 'Rate',\r\n ],\r\n columnHeaders: [\r\n {\r\n field: 'FullCounty',\r\n headerName: 'County',\r\n flex: 1,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'TractName',\r\n headerName: 'Tract Name',\r\n flex: 1,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'Rate',\r\n headerName: 'Rate',\r\n exportHeaderName: 'Rate',\r\n flex: 1, //\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Age-Adjusted Incidence Rate of Prostate Cancer',\r\n popupContent: {\r\n title: {\r\n field: 'PopupTitle',\r\n },\r\n health: {\r\n name:\r\n 'Prostate Cancer rate per 100,000',\r\n field: 'Rate',\r\n unit: '',\r\n },\r\n },\r\n setLayers: [\r\n {\r\n id: 'census-tract-lung-cancer',\r\n zIndexPosition: 'back',\r\n title:\r\n 'Incidence Rate of Prostate Cancer by Census Tract',\r\n yearKey: 'Year',\r\n subtitle:\r\n 'Age-adjusted rate per 100,000 population (2015-2019)',\r\n defaultVisible: true,\r\n sourceLayer: true,\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/CancerCensusTract/MapServer/3`,\r\n },\r\n {\r\n id: 'county-outline-prostate-cancer',\r\n zIndexPosition: 'front',\r\n title: '',\r\n yearKey: 'Year',\r\n subtitle: '',\r\n defaultVisible: true,\r\n sourceLayer: false,\r\n url: `${process.env.REACT_APP_MAP_SERVICE}/CountyBoundaries/MapServer/0`,\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n prostateTrend: {\r\n tabTitle: 'Trend',\r\n tabPath: 'prostateTrend',\r\n contentType: 'chart',\r\n // No contentTitle for charts, will be controlled in \"chartTitle\" property below //\r\n exportTitle:\r\n 'Age-Adjusted Incidence Rate of Prostate Cancer',\r\n exportSubtitle:\r\n 'Age-adjusted incidence rate per 100k population',\r\n chartType: 'trendline',\r\n selectable: true,\r\n stratifiable: false,\r\n\r\n // The following array of stratifications will create a chart stratification button for each item:\r\n stratifications: [\r\n {\r\n title: 'Race', // Name that appears for button\r\n field: 'CancerRace', // Must match stratification key name in json response returned from endpoint\r\n },\r\n {\r\n title: 'Sex', // Name that appears for button\r\n field: 'sex', // Must match stratification key name in json response returned from endpoint\r\n },\r\n ],\r\n defaultSelection: '000', // 000 is the code used for statewide data at the DB\r\n defaultSetNames: ['stateRate'],\r\n baseline: '000',\r\n info: {\r\n title: 'Rate of Prostate Cancer',\r\n id: 'chart-prostate-cancer-trend',\r\n subtitle: 'Age-adjusted rate per 100,000',\r\n },\r\n chartTitle: [\r\n 'Age-Adjusted Incidence Rate of Prostate Cancer',\r\n ],\r\n chartSubtitle: '',\r\n displayChartTitle: true,\r\n displayChartSubtitle: false,\r\n displayYAxisLabel: true,\r\n displayXAxisLabel: true,\r\n displayChartDiscontinuityGraphic: false,\r\n yAxisLabel:\r\n 'Age-adjusted incidence rate per 100,000 population',\r\n xAxisLabel: 'Period',\r\n chartXAxisField: 'year', // should match field name used in incoming dataset\r\n chartDataSets: ['rate', 'stateRate'], // should match field names used in incoming dataset\r\n url: `${process.env.REACT_APP_EPHT_API}/Cancer/GetRate`,\r\n urlParams: [\r\n { param: 'jurisdiction', valueKey: 'code' },\r\n { param: 'type', value: 'Cancer_Prostate_5yr' },\r\n ],\r\n chartConfig: {\r\n mainDatasets: [\r\n {\r\n label: 'County',\r\n setName: 'rate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n baseline: true,\r\n label: 'Statewide',\r\n setName: 'stateRate',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n ],\r\n // Note: Baseline dataset should receive `baseline: true` property.\r\n // Additional note: The `order` property will dictate how lines stack on each other, in ascending order. Baseline should be given highest value to ensure it is colored correctly by Chart.js (gray)\r\n stratificationDatasets: [\r\n {\r\n label: 'White',\r\n setName: 'rateWhite',\r\n stratification: 'CancerRace',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: 'Black',\r\n setName: 'rateBlack',\r\n stratification: 'CancerRace',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: 'All',\r\n setName: 'rateTotal',\r\n baseline: true,\r\n stratification: 'CancerRace',\r\n title: 'Race',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 5,\r\n data: [],\r\n },\r\n {\r\n label: 'Female',\r\n setName: 'rateFemale',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 1,\r\n data: [],\r\n },\r\n {\r\n label: 'Male',\r\n setName: 'rateMale',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 2,\r\n data: [],\r\n },\r\n {\r\n label: 'All',\r\n baseline: true,\r\n setName: 'rateTotal',\r\n stratification: 'sex',\r\n title: 'Sex',\r\n fill: false,\r\n pointRadius: 3,\r\n pointBorderWidth: 3,\r\n pointHoverRadius: 8,\r\n lineTension: 0,\r\n order: 3,\r\n data: [],\r\n },\r\n ],\r\n },\r\n columnHeaders: [\r\n {\r\n field: 'year',\r\n headerName: 'Year',\r\n width: 115,\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'rate',\r\n headerName: 'County Rate',\r\n width: 134,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n {\r\n field: 'stateRate',\r\n headerName: 'Statewide Rate',\r\n width: 160,\r\n customFormat: 2, // will add .0 to the end of whole numbers. Should only be used for rates.\r\n align: 'left',\r\n headerAlign: 'left',\r\n },\r\n ],\r\n tableTitle:\r\n 'Age-Adjusted Incidence Rate of Prostate Cancer',\r\n },\r\n },\r\n about: ` `, // Fetched from the database\r\n resources: [\r\n 'External Link',\r\n 'Other Link',\r\n 'More Info',\r\n 'Downloadable PDF',\r\n 'Downloadable CSV',\r\n 'Link',\r\n ],\r\n },\r\n },\r\n },\r\n};\r\n\r\nexport default topics;\r\n","import React from 'react';\r\nimport { Link } from 'react-router-dom';\r\n\r\nconst GeometryToggleCard = ({ currentTab, queryStringParse }) => {\r\n const { jurisdiction } = queryStringParse();\r\n const selectedGeometry = jurisdiction || 'primary';\r\n\r\n return (\r\n
\r\n {currentTab.mapSets.map((layerSet) => {\r\n const { geometry } = layerSet;\r\n const { set } = layerSet;\r\n return (\r\n \r\n \r\n \r\n\r\n {geometry}\r\n \r\n
\r\n );\r\n })}\r\n \r\n );\r\n};\r\n\r\nexport default GeometryToggleCard;\r\n","import React, { useEffect, useRef } from 'react';\r\nimport { renderToString } from 'react-dom/server';\r\nimport { useMap } from 'react-leaflet';\r\nimport Typography from '@mui/material/Typography';\r\nimport KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown';\r\nimport { formatNumber } from 'utilities/utils';\r\n\r\nimport config from 'config/config';\r\n\r\nconst CustomReactPopup = ({ feature, selectedLayerSet, layer }) => {\r\n const { popupContent } = selectedLayerSet;\r\n const {\r\n title,\r\n health,\r\n environment,\r\n secondary,\r\n additional,\r\n link,\r\n } = popupContent;\r\n\r\n const checkAvailability = (value, unit = '', field = null) => {\r\n if (value === 0) {\r\n return '0.0';\r\n }\r\n if (!value) {\r\n return '';\r\n }\r\n if (value === config.missing) {\r\n return 'Missing';\r\n }\r\n if (value === config.suppressed) {\r\n return 'Suppressed';\r\n }\r\n // Add .0 to whole numbers if it's a percentage rate\r\n if (unit === '%' || field.toLowerCase().includes('rate')) {\r\n return `${formatNumber(value)}${unit}`;\r\n }\r\n return `${value.toLocaleString()}${unit}`;\r\n };\r\n\r\n // Popup for non-reference layers:\r\n if (!layer.referenceLayer) {\r\n return (\r\n <>\r\n \r\n
\r\n {feature[title.field]?.toLowerCase()}{' '}\r\n
\r\n
\r\n {health ? (\r\n \r\n
\r\n
{health.name}:
{' '}\r\n
\r\n {checkAvailability(\r\n feature[health.field],\r\n health.unit,\r\n health.field || ''\r\n )}\r\n
\r\n
\r\n
\r\n ) : null}\r\n {environment ? (\r\n \r\n
\r\n
\r\n {environment.name}:\r\n
{' '}\r\n
\r\n {checkAvailability(\r\n feature[environment.field],\r\n environment.unit,\r\n environment.field || ''\r\n )}\r\n
\r\n
\r\n
\r\n ) : null}\r\n {secondary ? (\r\n \r\n
\r\n
\r\n {secondary.name}:\r\n
{' '}\r\n
\r\n
    \r\n {checkAvailability(\r\n feature[secondary.field],\r\n secondary.unit,\r\n secondary.field || ''\r\n )\r\n .split(',')\r\n .map((item) => (\r\n \r\n {item}\r\n \r\n ))}\r\n
\r\n
\r\n
\r\n
\r\n ) : null}\r\n {additional ? (\r\n \r\n
\r\n
\r\n {additional.name}\r\n
{' '}\r\n
\r\n {checkAvailability(\r\n feature[additional.field],\r\n additional.unit,\r\n additional.field || ''\r\n )}\r\n
\r\n
\r\n
\r\n ) : null}\r\n {link ? (\r\n \r\n
\r\n
\r\n \r\n Consumer Confidence Report\r\n \r\n
\r\n
\r\n
\r\n ) : null}\r\n {!layer.omitCommunityProfile ? (\r\n
\r\n \r\n See demographic data\r\n \r\n \r\n
\r\n ) : null}\r\n \r\n );\r\n }\r\n\r\n const {\r\n title: referenceTitle,\r\n customTitle,\r\n line1,\r\n line2A,\r\n line2B,\r\n line3,\r\n } = layer.content;\r\n\r\n // Popup for reference layers:\r\n return (\r\n
\r\n \r\n
\r\n {customTitle || feature[referenceTitle]}\r\n
\r\n
\r\n \r\n
\r\n {feature[line1] || line1}\r\n
\r\n
\r\n {formatNumber(feature[line2A])}\r\n {line2B}\r\n
\r\n {feature[line3]}\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nconst LayerComp = ({\r\n layer,\r\n selectedLayerSet,\r\n sourceDataRef,\r\n mapZoom,\r\n setMapLayers,\r\n setLayerExtent,\r\n setLayersLoading,\r\n setMapDemographicContent,\r\n currentTab,\r\n}) => {\r\n // // Leaflet Hook // //\r\n const map = useMap();\r\n\r\n const isCancelled = useRef();\r\n const layerExists = useRef(false);\r\n\r\n // // Methods // //\r\n\r\n // // Effects // //\r\n\r\n // Note: linter wants unchanging useState setter functions setLayerExtent, setLayersLoading, and setMapDemographicContent (passed as props to this component) to be included in the dependency array -- will disable warning in line before deps array below\r\n useEffect(() => {\r\n // This method removes previous feature layers before rendering a new one, needed for changing layers via time slider.\r\n const clearFeatureLayers = () => {\r\n map.eachLayer((mapLayer) => {\r\n // eslint-disable-next-line no-underscore-dangle\r\n if (!mapLayer._tiles) {\r\n // This prevents the base maps from being removed when clearing old maps during timeslider change event. Only basemaps contain the _tiles key.\r\n map.removeLayer(mapLayer);\r\n }\r\n });\r\n };\r\n\r\n const setLayer = () => {\r\n // Set isCancelled to false when this component \"mounts\"\r\n isCancelled.current = false;\r\n\r\n layer.esriLayer.on({\r\n loading: () => {\r\n // When first adding the layer to the map, layerExists.current should be false (initialized false in useRef hook). But should this layer attempt to load again, after it has loaded once before (as it does when panning/zooming), then this will *reset* the ref to false when the load begins but before it is complete.\r\n layerExists.current = false;\r\n\r\n // Add this layer to the layersLoading array in HealthTopic.js state.\r\n // (NOTE: Must use callback to get the most up-to-date state variable. Accessing layersLoading from anywhere outside of that callback will return a stale value)\r\n setLayersLoading((layersLoading) => [\r\n ...layersLoading,\r\n layer.id,\r\n ]);\r\n },\r\n load: (e) => {\r\n // Remove this layer from the layersLoading array in HealthTopic.js state.\r\n setLayersLoading((layersLoading) =>\r\n layersLoading.filter((id) => id !== layer.id)\r\n );\r\n\r\n // Grab an arbitrary feature to set \"layerYear\" field in topics.js config file for current loaded layer:\r\n const sampleFeatureProperties = Object.values(\r\n // eslint-disable-next-line no-underscore-dangle\r\n e.target._layers\r\n )[0]?.feature?.properties; // Verifying that all properties exist before continuing.\r\n\r\n const [\r\n currentLayerMetaData,\r\n ] = selectedLayerSet.setLayers.filter(\r\n (set) => set.id === e.target.options.id\r\n );\r\n const { yearKey } = currentLayerMetaData;\r\n\r\n const layerYear = sampleFeatureProperties\r\n ? sampleFeatureProperties[yearKey]\r\n : null;\r\n\r\n currentLayerMetaData.layerYear = layerYear; // Note: this will mutate the topics.js object\r\n\r\n // Set this ref to true so we can identify that the layer exists in the map later during cleanup:\r\n layerExists.current = true;\r\n\r\n if (isCancelled.current) {\r\n // If this on load event handler runs after this component is destroyed, will remove layer here instead of in effect's cleanup function. (Running layer.remove() too early, e.g. after the layer begins loading but before the layer has fully loaded, will not successfully remove the layer).\r\n layer.esriLayer.remove();\r\n } else {\r\n // Stack layers according to zIndex set in topics.js\r\n const { zIndexPosition } = e.target.options;\r\n if (zIndexPosition === 'back') {\r\n layer.esriLayer.bringToBack();\r\n }\r\n if (zIndexPosition === 'front') {\r\n layer.esriLayer.bringToFront();\r\n }\r\n\r\n // Set table data if layer is our \"sourceLayer\", the layer set up in the ArcGIS service that joins all relevant layers\r\n // Also check if the layer fetch has been cancelled\r\n if (\r\n currentTab.timeSlider ||\r\n (e.target.options.sourceLayer &&\r\n !isCancelled.current)\r\n ) {\r\n sourceDataRef.current = e.target;\r\n setLayerExtent();\r\n }\r\n\r\n // Bind popup if not already bound:\r\n // eslint-disable-next-line no-underscore-dangle\r\n if (!e.target._popup) {\r\n layer.esriLayer\r\n .bindPopup(\r\n ({ feature }) =>\r\n renderToString(\r\n \r\n ),\r\n { maxWidth: 'auto' }\r\n )\r\n .on('popupopen', ({ layer: { feature } }) =>\r\n layer.esriLayer.options.omitCommunityProfile\r\n ? null\r\n : setMapDemographicContent(feature)\r\n )\r\n .on('popupclose', () => {\r\n setMapDemographicContent(null);\r\n });\r\n }\r\n }\r\n },\r\n });\r\n\r\n if (currentTab.timeSlider) {\r\n layer.esriLayer.setStyle(() => ({\r\n smoothFactor: 0,\r\n }));\r\n }\r\n\r\n // Only add layer here if layer is not scale dependent,\r\n // (if it is, will be added by zoomCheck effect).\r\n if (!layer.esriLayer.options.minScale) {\r\n map.whenReady(() => {\r\n map.addLayer(layer.esriLayer);\r\n });\r\n }\r\n };\r\n if (currentTab.timeSlider) {\r\n clearFeatureLayers();\r\n }\r\n setLayer();\r\n return function cleanup() {\r\n // Set isCancelled to true to signal that this component has been destroyed and we should cancel any pending on load handlers\r\n isCancelled.current = true;\r\n\r\n // Remove layer only if it successfully loaded before this cleanup was run.\r\n // (If layer does not yet exist, removal will take place within on load handler for this layer)\r\n if (layerExists.current) {\r\n layer.esriLayer.remove();\r\n }\r\n };\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [layer.esriLayer.options.id, layer, sourceDataRef, map]);\r\n\r\n // Effect to update this layer if zoom changes\r\n useEffect(() => {\r\n const zoomCheck = () => {\r\n if (layer.esriLayer.options.scaleDependent) {\r\n if (\r\n mapZoom < layer.esriLayer.options.minScale &&\r\n map.hasLayer(layer.esriLayer)\r\n ) {\r\n setMapLayers((prevMapLayers) => {\r\n prevMapLayers.find(\r\n (mapLayer) => mapLayer.id === layer.id\r\n ).outOfRange = true;\r\n return prevMapLayers;\r\n });\r\n layer.esriLayer.remove();\r\n } else if (\r\n mapZoom >= layer.esriLayer.options.minScale &&\r\n !map.hasLayer(layer.esriLayer)\r\n ) {\r\n setMapLayers((prevMapLayers) => {\r\n prevMapLayers.find(\r\n (mapLayer) => mapLayer.id === layer.id\r\n ).outOfRange = false;\r\n return prevMapLayers;\r\n });\r\n layer.esriLayer.addTo(map);\r\n }\r\n }\r\n };\r\n zoomCheck();\r\n }, [layer.esriLayer, layer.id, map, mapZoom, setMapLayers]);\r\n\r\n // // Render // //\r\n return null;\r\n};\r\n\r\nexport default LayerComp;\r\n","// Modules:\r\nimport React from 'react';\r\nimport { useTheme } from '@mui/material/styles';\r\n\r\n// Style:\r\nimport Typography from '@mui/material/Typography';\r\nimport InfoOutlinedIcon from '@mui/icons-material/InfoOutlined';\r\n\r\n// Utils:\r\nimport { customLegendStyleNames } from 'utilities/utils';\r\n\r\nconst PointMarker = ({\r\n breakInfo,\r\n layerOn,\r\n theme,\r\n labelText,\r\n missingSuppressed,\r\n setMissingSuppressedModalOpen,\r\n opacity = 1,\r\n customStyleTitle,\r\n}) => {\r\n const [r, g, b] = breakInfo.color;\r\n const label = breakInfo.label || labelText;\r\n\r\n return (\r\n setMissingSuppressedModalOpen(true)\r\n : null\r\n }\r\n onKeyDown={\r\n missingSuppressed\r\n ? (e) => {\r\n if (e.key === 'Enter') {\r\n e.preventDefault();\r\n setMissingSuppressedModalOpen(true);\r\n }\r\n }\r\n : null\r\n }\r\n role={missingSuppressed ? 'button' : null}\r\n tabIndex={missingSuppressed ? 0 : null}\r\n >\r\n \r\n
\r\n {label}\r\n {missingSuppressed ? (\r\n \r\n \r\n \r\n ) : null}\r\n
\r\n \r\n );\r\n};\r\n\r\nconst ChoroplethSymbol = ({\r\n breakInfo,\r\n layerOn,\r\n theme,\r\n addMargin,\r\n labelText,\r\n missingSuppressed,\r\n setMissingSuppressedModalOpen,\r\n opacity = 1,\r\n}) => {\r\n const [r, g, b] = breakInfo.color;\r\n const label = breakInfo.label || labelText;\r\n const determineBgColor = (active, content) => {\r\n if (content !== 'Missing' && active) {\r\n return opacity\r\n ? `rgba(${r},${g},${b},${opacity})`\r\n : `rgb(${r},${g},${b})`;\r\n }\r\n if (content !== 'Missing' && !active) {\r\n return theme.palette.grey[300];\r\n }\r\n\r\n return 'rgb(255, 255, 255)';\r\n };\r\n\r\n return (\r\n setMissingSuppressedModalOpen(true)\r\n : null\r\n }\r\n onKeyDown={\r\n missingSuppressed\r\n ? (e) => {\r\n if (e.key === 'Enter') {\r\n e.preventDefault();\r\n setMissingSuppressedModalOpen(true);\r\n }\r\n }\r\n : null\r\n }\r\n role={missingSuppressed ? 'button' : null}\r\n tabIndex={missingSuppressed ? 0 : null}\r\n >\r\n \r\n \r\n {label}\r\n {missingSuppressed ? (\r\n \r\n \r\n \r\n ) : null}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst LegendItems = ({ layer, layerOn, setMissingSuppressedModalOpen }) => {\r\n // Hooks\r\n const theme = useTheme();\r\n\r\n // If unable to load legend data for some reason, immediately return error message:\r\n if (layer.renderInfo.error) {\r\n return (\r\n
Unable to load legend data
\r\n );\r\n }\r\n // Use image data stored in config file, if custom point symbol\r\n if (layer.custom) {\r\n const src = `data:${layer.drawingInfo.renderer.symbol.contentType};base64,${layer.drawingInfo.renderer.symbol.imageData}`;\r\n return (\r\n \r\n );\r\n }\r\n\r\n // Use image data coming from service to inherit symbol\r\n if (layer.renderInfo.type === 'simple') {\r\n if (layer.renderInfo.symbol.contentType === 'image/png') {\r\n const src = `data:${layer.renderInfo.symbol.contentType};base64,${layer.renderInfo.symbol.imageData}`;\r\n return (\r\n \r\n );\r\n }\r\n if (layer.renderInfo.symbol.style === 'esriSMSCircle') {\r\n return (\r\n \r\n );\r\n }\r\n }\r\n\r\n // Determine symbol style and layer type:\r\n const itemStyle = layer.renderInfo.classBreakInfos\r\n ? layer.renderInfo.classBreakInfos[0].symbol.style\r\n : null;\r\n const customBreaks = !layer.renderInfo.visualVariables;\r\n\r\n if (customBreaks && itemStyle) {\r\n const nonMissingSuppressedSymbols = layer.renderInfo.classBreakInfos\r\n .filter(\r\n (breakPoint) =>\r\n breakPoint.label !== 'Missing' &&\r\n breakPoint.label !== 'Suppressed'\r\n )\r\n .map((breakInfo) => {\r\n const data = {\r\n style: itemStyle,\r\n color: breakInfo.symbol.color,\r\n size: breakInfo.symbol.size,\r\n label: breakInfo.label,\r\n };\r\n\r\n if (itemStyle === 'esriSMSCircle') {\r\n return (\r\n \r\n );\r\n }\r\n if (itemStyle === 'esriSFSSolid') {\r\n return (\r\n \r\n );\r\n }\r\n // TODO: fallback symbology?\r\n return null;\r\n });\r\n\r\n const missingSuppressedSymbols = layer.renderInfo.classBreakInfos\r\n .filter(\r\n (breakPoint) =>\r\n breakPoint.label === 'Missing' ||\r\n breakPoint.label === 'Suppressed'\r\n )\r\n .map((breakInfo, index) => {\r\n const data = {\r\n style: itemStyle,\r\n color: breakInfo.symbol.color,\r\n size: breakInfo.symbol.size,\r\n label: breakInfo.label,\r\n };\r\n\r\n if (itemStyle === 'esriSMSCircle') {\r\n return (\r\n \r\n );\r\n }\r\n if (itemStyle === 'esriSFSSolid') {\r\n return (\r\n \r\n );\r\n }\r\n // TODO: fallback symbology?\r\n return null;\r\n });\r\n\r\n return [nonMissingSuppressedSymbols, missingSuppressedSymbols];\r\n }\r\n\r\n if (layer.renderInfo.type === 'simple') {\r\n return (\r\n \r\n );\r\n }\r\n\r\n if (layer.renderInfo.type === 'uniqueValue') {\r\n if (layer.type === 'uniquePoint') {\r\n return layer.renderInfo.uniqueValueInfos.map((info) => (\r\n \r\n ));\r\n }\r\n if (layer.type === 'uniqueChoropleth') {\r\n return layer.renderInfo.uniqueValueInfos.map((info) => (\r\n \r\n ));\r\n }\r\n }\r\n\r\n return layer.renderInfo.visualVariables\r\n ?.find((visualVariable) => visualVariable.stops)\r\n .stops.map((breakInfo) => {\r\n const data = {\r\n style: itemStyle,\r\n color: breakInfo.color,\r\n size: breakInfo.value,\r\n value: breakInfo.value,\r\n label: breakInfo.label,\r\n };\r\n if (itemStyle === 'esriSMSCircle') {\r\n return (\r\n \r\n );\r\n }\r\n if (itemStyle === 'esriSFSSolid') {\r\n return (\r\n \r\n );\r\n }\r\n\r\n // TODO: fallback symbology?\r\n return null;\r\n });\r\n};\r\n\r\nexport default LegendItems;\r\n","// Modules:\r\nimport React from 'react';\r\nimport Drawer from '@mui/material/Drawer';\r\nimport VisibilityIcon from '@mui/icons-material/Visibility';\r\nimport VisibilityOffIcon from '@mui/icons-material/VisibilityOff';\r\nimport CloseIcon from '@mui/icons-material/Close';\r\nimport { Link } from 'react-router-dom';\r\n\r\n// Components:\r\nimport LegendItems from '../Map/LegendItems';\r\n\r\nconst LAYER_TITLE_LENGTH_LIMIT = 30; // Around 30 chars is when there are overflow issues for a layer title.\r\n\r\nconst MobileDrawer = ({\r\n showDrawer,\r\n handleDrawerClose,\r\n layers,\r\n activeLayers,\r\n pathname,\r\n determineClassName,\r\n determineParams,\r\n routeToLayers,\r\n}) => (\r\n \r\n
\r\n
\r\n
\r\n Manage Additional Layers\r\n \r\n
\r\n
\r\n
\r\n {layers\r\n .filter(\r\n (layer) =>\r\n layer.toggleable &&\r\n layer.renderInfo?.type !== 'simple'\r\n )\r\n .map((layer) => {\r\n const layerOn = activeLayers.includes(layer.id);\r\n return (\r\n \r\n \r\n \r\n
\r\n
\r\n {activeLayers.includes(\r\n layer.id\r\n ) ? (\r\n \r\n ) : (\r\n \r\n )}\r\n
\r\n =\r\n LAYER_TITLE_LENGTH_LIMIT\r\n ? '-compress'\r\n : ''\r\n }`}\r\n >\r\n {layer.title}\r\n
\r\n
\r\n
\r\n {layer.renderInfo ? (\r\n \r\n ) : null}\r\n
\r\n
\r\n \r\n \r\n );\r\n })}\r\n \r\n {layers\r\n .filter(\r\n (layer) =>\r\n layer.toggleable &&\r\n layer.renderInfo?.type !== 'classBreaks'\r\n )\r\n .map((layer) => {\r\n const layerOn = activeLayers.includes(layer.id);\r\n return (\r\n \r\n \r\n \r\n
\r\n {layer.renderInfo ? (\r\n \r\n ) : null}\r\n
\r\n
\r\n
\r\n {activeLayers.includes(layer.id) ? (\r\n \r\n ) : (\r\n \r\n )}\r\n
\r\n
\r\n {layer.title}\r\n
\r\n
\r\n {`${layer.subtitle} ${\r\n layer.layerYear\r\n ? ` (${layer.layerYear})`\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\nexport default MobileDrawer;\r\n","// Modules:\r\nimport React, { useState, useEffect, useCallback } from 'react';\r\nimport Button from '@mui/material/Button';\r\nimport { Link } from 'react-router-dom';\r\n\r\n// Style:\r\nimport Accordion from '@mui/material/Accordion';\r\nimport AccordionDetails from '@mui/material/AccordionDetails';\r\nimport AccordionSummary from '@mui/material/AccordionSummary';\r\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\r\nimport Typography from '@mui/material/Typography';\r\nimport InfoOutlinedIcon from '@mui/icons-material/InfoOutlined';\r\nimport VisibilityIcon from '@mui/icons-material/Visibility';\r\nimport VisibilityOffIcon from '@mui/icons-material/VisibilityOff';\r\n\r\n// Components:\r\nimport MobileDrawer from 'components/UI/MobileDrawer';\r\nimport LegendItems from './LegendItems';\r\n\r\nconst LegendList = ({\r\n layers,\r\n activeLayers,\r\n mapZoom,\r\n pathname,\r\n queryStringParse,\r\n routeToLayers,\r\n setMissingSuppressedModalOpen,\r\n styles,\r\n timeSliderMarks,\r\n setTimeSliderMarks,\r\n currentTab,\r\n}) => {\r\n // // State // //\r\n const [expanded, setExpanded] = useState('tableData');\r\n const [showDrawer, setShowDrawer] = useState(false);\r\n const [windowSize, setWindowSize] = useState(window.innerWidth);\r\n\r\n // // Methods // //\r\n const handleChange = (panel) => (event, isExpanded) => {\r\n setExpanded(isExpanded ? panel : false);\r\n };\r\n\r\n const determineParams = () => {\r\n const paramsObject = queryStringParse();\r\n\r\n const { jurisdiction } = paramsObject;\r\n\r\n if (jurisdiction) {\r\n return `?jurisdiction=${jurisdiction}&`;\r\n }\r\n return `?`;\r\n };\r\n\r\n const determineClassName = (isFixed, layerIsOn, type) => {\r\n if (isFixed) {\r\n return 'fixed-layer-plate';\r\n }\r\n if (layerIsOn) {\r\n return type === 'classBreaks'\r\n ? 'layer-plate selected-layer-plate'\r\n : 'min-content-layer-plate min-content-selected-layer-plate';\r\n }\r\n return type === 'classBreaks'\r\n ? 'layer-plate unselected-layer-plate'\r\n : 'min-content-layer-plate min-content-unselected-layer-plate';\r\n };\r\n\r\n // Conditionally display the container div for the simple legend items. Could be refactored/reused for other conditional displays like 'missing surpressed' or 'zoom info'.\r\n // const determineDisplay = (possibleLayers) => {\r\n // if (\r\n // !possibleLayers.filter(\r\n // (layer) =>\r\n // layer.toggleable && layer.renderInfo?.type === 'classBreaks'\r\n // ).length\r\n // ) {\r\n // return '-no-display';\r\n // }\r\n // return '';\r\n // };\r\n\r\n const handleShowDrawer = () => {\r\n setShowDrawer(true);\r\n };\r\n\r\n const handleDrawerClose = () => {\r\n setShowDrawer(false);\r\n };\r\n\r\n const handleWindowResize = useCallback(() => {\r\n setWindowSize(window.innerWidth);\r\n }, []);\r\n\r\n // // Effects // //\r\n // Grabs layerYear and creates timeSlider marks array of objects.\r\n useEffect(() => {\r\n if (timeSliderMarks === null && layers[0].layerYear !== undefined) {\r\n const marks = layers\r\n .map((layer) => ({\r\n value: layer.layerYear,\r\n label: layer.layerYear?.toString(),\r\n }))\r\n .sort((layerA, layerB) => layerA.value - layerB.value);\r\n\r\n setTimeSliderMarks([...marks]);\r\n }\r\n }, [layers, activeLayers, timeSliderMarks, setTimeSliderMarks]);\r\n\r\n // Handles window resizing conditionals and keeps current window width in state. Info on this method here: https://stackoverflow.com/questions/60911209/how-to-detect-the-window-width-change\r\n useEffect(() => {\r\n window.addEventListener('resize', handleWindowResize);\r\n\r\n return () => {\r\n window.removeEventListener('resize', handleWindowResize);\r\n };\r\n }, [handleWindowResize]);\r\n\r\n // // Render // //\r\n return layers.length ? (\r\n \r\n
\r\n }\r\n aria-controls=\"tableData-content\"\r\n id=\"tableData-header\"\r\n sx={styles}\r\n >\r\n \r\n {expanded ? 'Hide legend' : 'Show legend'}\r\n \r\n \r\n
\r\n \r\n
\r\n {layers\r\n .filter((layer) => !layer.toggleable)\r\n .map((layer) => (\r\n
\r\n
\r\n
\r\n
\r\n {layer.title}\r\n
\r\n \r\n {`${layer.subtitle} ${\r\n layer.layerYear &&\r\n !currentTab.timeSlider\r\n ? ` (${layer.layerYear})`\r\n : ''\r\n }`}\r\n {layer.scaleDependent &&\r\n mapZoom < layer.minScale ? (\r\n \r\n (Zoom in to view)\r\n \r\n ) : null}\r\n \r\n
\r\n {layer.renderInfo ? (\r\n \r\n ) : null}\r\n
\r\n
\r\n
\r\n
\r\n ))}\r\n
\r\n {layers.filter((layer) => layer.toggleable).length ? (\r\n
\r\n {/* Filtering for legend items with greater amounts of detail, usually with the type description: 'classBreaks' */}\r\n
\r\n {/* Adjust style for mobile. Move less detailed legend items into collapsible drawer 'layer manager' */}\r\n {windowSize <= 600 ? (\r\n <>\r\n
\r\n \r\n Manage Additional Layers\r\n \r\n
\r\n \r\n \r\n ) : (\r\n <>\r\n
\r\n {/* Filter for reference layers with greater detail, such as multiple symbols, by renderInfo type */}\r\n {layers\r\n .filter(\r\n (layer) =>\r\n layer.toggleable &&\r\n layer.renderInfo?.type ===\r\n 'classBreaks'\r\n )\r\n .map((layer) => {\r\n const layerOn = activeLayers.includes(\r\n layer.id\r\n );\r\n return (\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n {activeLayers.includes(\r\n layer.id\r\n ) ? (\r\n \r\n ) : (\r\n \r\n )}\r\n
\r\n
\r\n {\r\n layer.title\r\n }\r\n
\r\n
\r\n \r\n {`${\r\n layer.subtitle\r\n } ${\r\n layer.layerYear\r\n ? ` (${layer.layerYear})`\r\n : ''\r\n }`}\r\n \r\n
\r\n
\r\n {layer.renderInfo ? (\r\n \r\n ) : null}\r\n
\r\n
\r\n \r\n
\r\n );\r\n })}\r\n
\r\n\r\n
\r\n {layers\r\n .filter(\r\n (layer) =>\r\n layer.toggleable &&\r\n layer.renderInfo?.type !==\r\n 'classBreaks'\r\n )\r\n .map((layer) => {\r\n const layerOn = activeLayers.includes(\r\n layer.id\r\n );\r\n return (\r\n \r\n \r\n \r\n
\r\n
\r\n {layer.renderInfo ? (\r\n \r\n ) : null}\r\n
\r\n
\r\n
\r\n {\r\n layer.title\r\n }\r\n
\r\n
\r\n {`${\r\n layer.subtitle\r\n } ${\r\n layer.layerYear\r\n ? ` (${layer.layerYear})`\r\n : ''\r\n }`}\r\n
\r\n
\r\n
\r\n
\r\n {activeLayers.includes(\r\n layer.id\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 ) : null}\r\n {/* TODO: Should the missing/suppressed legend footer note be dynamic and only appear when legend contains missing/suppressed data? */}\r\n
\r\n setMissingSuppressedModalOpen(true)}\r\n onKeyDown={(e) => {\r\n if (e.key === 'Enter') {\r\n e.preventDefault();\r\n setMissingSuppressedModalOpen(true);\r\n }\r\n }}\r\n role=\"button\"\r\n tabIndex={0}\r\n >\r\n

*Missing or suppressed data?

\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n \r\n ) : null;\r\n};\r\n\r\nexport default LegendList;\r\n","// Modules\r\nimport { useState, useEffect } from 'react';\r\nimport L from 'leaflet';\r\nimport { useMap } from 'react-leaflet';\r\n\r\n// Leaflet plugin for address search\r\nimport 'leaflet-control-geocoder';\r\nimport 'leaflet-control-geocoder/dist/Control.Geocoder.css';\r\n\r\n// Config:\r\nimport config from 'config/config';\r\n\r\nfunction LeafletControlGeocoder({ currentTab, stateBounds, defaultMapZoom }) {\r\n const [mapGeoControl, setMapGeoControl] = useState(null);\r\n const [mapZoomControl, setMapZoomControl] = useState(null);\r\n\r\n const map = useMap();\r\n\r\n // // Effects // //\r\n useEffect(() => {\r\n // We are using Nominatim for geocoding which is the default with leaflet-control-geocoder\r\n const geocoder = L.Control.Geocoder.nominatim({\r\n // Params for Nominatim to limit results to two and only search within the US\r\n geocodingQueryParams: {\r\n limit: 2,\r\n countrycodes: 'us',\r\n },\r\n });\r\n\r\n const geocoderControl = L.Control.geocoder({\r\n query: '',\r\n placeholder: 'Search here...',\r\n defaultMarkGeocode: false,\r\n iconLabel: 'address-search',\r\n geocoder,\r\n collapsed: false,\r\n }).on('markgeocode', (e) => {\r\n const latlng = e.geocode.center;\r\n const marker = L.marker(latlng);\r\n\r\n // Create the button to delete the marker\r\n const btn = document.createElement('button');\r\n btn.innerText = 'Delete Marker';\r\n btn.className = 'address-search-popup-btn';\r\n btn.onclick = () => map.removeLayer(marker);\r\n\r\n // Create elements for popup content\r\n const contentDiv = document.createElement('div');\r\n contentDiv.className = 'address-search-popup';\r\n const buttonDiv = document.createElement('div');\r\n const content = document.createTextNode(e.geocode.name);\r\n buttonDiv.appendChild(btn);\r\n contentDiv.appendChild(content);\r\n contentDiv.appendChild(buttonDiv);\r\n const popup = L.popup().setContent(contentDiv);\r\n\r\n marker.addTo(map).bindPopup(popup);\r\n map.fitBounds(e.geocode.bbox);\r\n });\r\n\r\n const zoomControl = new L.Control.Zoom({ position: 'topleft' });\r\n\r\n if (!currentTab.timeSlider) {\r\n map.addControl(geocoderControl);\r\n map.addControl(zoomControl);\r\n\r\n // Setting in state because Leaflet Map Controls must be in a variable defined outside the\r\n // scope of this useEffect to be removed in following useEffect:\r\n setMapGeoControl(geocoderControl);\r\n setMapZoomControl(zoomControl);\r\n }\r\n }, [currentTab.timeSlider, map]);\r\n\r\n // Handles populating and clearing the map of control widgets and functionality.\r\n // Used when changing from a non-timeslider map to a timesldier map.\r\n // Timeslider maps sould only pan, no other functionality should be\r\n // allowed.\r\n //\r\n // Also handles resetting the zoom and position of the map when switching\r\n // from a non-time slider map (which has no zoom restrictions) to a time slider\r\n // map that has zoom restrictions. Without the reset, the time slider map would be\r\n // locked in at whichever zoom level the previous map was at:\r\n useEffect(() => {\r\n const emptyMapControls = () => {\r\n if (mapGeoControl && mapZoomControl) {\r\n map.removeControl(mapGeoControl);\r\n map.removeControl(mapZoomControl);\r\n }\r\n\r\n // Disable all possible zoom options for desktop and mobile:\r\n map.doubleClickZoom.disable();\r\n map.scrollWheelZoom.disable();\r\n map.touchZoom.disable();\r\n map.keyboard.disable();\r\n\r\n map.whenReady(() => {\r\n // If we have zoomed in/out on a non-timeslider map and then switch over\r\n // to a time slider map while the map itself is still zoomed,\r\n // setting the map back to its original position with 'fitBounds' is\r\n // the best method to do a clean reset.\r\n //\r\n // Setting a range of `defaultMapZoom` and `defaultMapZoom - 1`\r\n // acts as a buffer that accounts for the potential\r\n // half values that are thrown during map animation events on varying\r\n // more compressed screen sizes:\r\n if (\r\n map.getZoom() > defaultMapZoom ||\r\n map.getZoom() < defaultMapZoom - 1\r\n ) {\r\n map.fitBounds(stateBounds);\r\n } else {\r\n // If we are only panning and the map is not zoomed in/out past the time slider zoom limitations,\r\n // the flyTo method works better as it does not rely on map state unlike the fitBounds method:\r\n const { lat, lng } = config.timeSliderMapCenter;\r\n\r\n // This check is in place to limit the amount of times we call the flyTo method when switching\r\n // between maps. If the map has not moved far off of its center point, there is no need to\r\n // call the 'flyTo' method:\r\n if (\r\n Math.round(map.getCenter().lng) !== Math.round(lng) ||\r\n Math.round(map.getCenter().lat) !== Math.round(lat)\r\n ) {\r\n map.flyTo(new L.LatLng(lat, lng));\r\n }\r\n }\r\n });\r\n };\r\n\r\n const setMapControls = () => {\r\n map.doubleClickZoom.enable();\r\n map.scrollWheelZoom.enable();\r\n map.touchZoom.enable();\r\n map.keyboard.enable();\r\n };\r\n\r\n if (currentTab.timeSlider) {\r\n emptyMapControls();\r\n } else {\r\n setMapControls();\r\n }\r\n }, [\r\n currentTab,\r\n currentTab.timeSlider,\r\n defaultMapZoom,\r\n map,\r\n mapGeoControl,\r\n mapZoomControl,\r\n stateBounds,\r\n ]);\r\n\r\n return null;\r\n}\r\n\r\nexport default LeafletControlGeocoder;\r\n","// Modules:\r\nimport React, { useState, useRef, useEffect, useCallback } from 'react';\r\nimport { MapContainer } from 'react-leaflet';\r\nimport * as esri from 'esri-leaflet';\r\nimport L from 'leaflet';\r\n\r\n// Components:\r\nimport Grid from '@mui/material/Grid';\r\nimport Slider from '@mui/material/Slider';\r\nimport GeometryToggleCard from '../Map/GeometryToggleCard';\r\nimport LayerComp from '../Map/LayerComp';\r\nimport LegendList from '../Map/LegendList';\r\nimport LeafletControlGeocoder from '../Map/LeafletControlGeocoder';\r\n\r\nconst MapContent = ({\r\n mapRef,\r\n currentTab,\r\n mapLayers,\r\n mapZoom,\r\n defaultMapZoom,\r\n stateBounds,\r\n selectedLayerSet,\r\n topic,\r\n theme,\r\n tab,\r\n search,\r\n pathname,\r\n routeToLayers,\r\n queryStringParse,\r\n setMapLayers,\r\n setMapZoom,\r\n setTableData,\r\n setLayersLoading,\r\n setMapDemographicContent,\r\n setChartDemographicContent,\r\n setMissingSuppressedModalOpen,\r\n styles,\r\n}) => {\r\n // // State // //\r\n const [timeSliderMarks, setTimeSliderMarks] = useState(null);\r\n const [timeSliderMinMax, setTimeSliderMinMax] = useState({\r\n min: null,\r\n max: null,\r\n });\r\n // Setting the slider value to 0 for use within the 'value' prop of the time slider.\r\n // The 'Value' prop requires a number and 0 sets it to the left most value of the slider.\r\n const [sliderValue, setSliderValue] = useState(0);\r\n\r\n // // Refs // //\r\n // Need to use refs for the loadLayers function, otherwise react will lose reference to the data on update\r\n const sourceDataRef = useRef(null);\r\n const selectedLayerRef = useRef(selectedLayerSet);\r\n const currentTabRef = useRef(currentTab.tabPath);\r\n const timeSliderActiveLayerRef = useRef(null);\r\n\r\n // // Methods // //\r\n\r\n // Custom hook to debounce slider onchange method:\r\n const useDebounce = (value, milliSeconds) => {\r\n const [debouncedValue, setDebouncedValue] = useState(value);\r\n\r\n useEffect(() => {\r\n const handler = setTimeout(() => {\r\n setDebouncedValue(value);\r\n }, milliSeconds || 450); // If no milliSeconds provided default to 450.\r\n\r\n return () => {\r\n clearTimeout(handler);\r\n };\r\n }, [value, milliSeconds]);\r\n\r\n return debouncedValue;\r\n };\r\n\r\n // Debouncing the slider events to prevent rapid slider updates breaking the leaflet map:\r\n // 450 ms delay is enough time for the map to complete its updates before allowing another slider change\r\n const debouncedSliderValue = useDebounce(sliderValue, 450);\r\n\r\n const getUpdatedMapLayers = (existingLayers, visibleLayers) =>\r\n // If layer that should be visible is already in state variable \"mapLayers\", grab it and return it. If not, return a new visibleLayer.\r\n // NOTE: This function prevents unnecessary reloading of layers that are already active\r\n visibleLayers.map(\r\n (visibleLayer) =>\r\n existingLayers.find(\r\n (existingLayer) => existingLayer.id === visibleLayer.id\r\n ) || visibleLayer\r\n );\r\n\r\n // Set the features within the extent format to match what the attribute table expects\r\n const formatTableLayer = (extent) => {\r\n const { options, featuresWithinExtent } = extent;\r\n const {\r\n tableTitle,\r\n outFields,\r\n columnHeaders,\r\n } = selectedLayerRef.current;\r\n const id = options;\r\n\r\n const features = Object.values(featuresWithinExtent).map((item) => {\r\n // Filter the raw data for our desired fields, defined in \"outFields\" in topics.js:\r\n const filteredFields = outFields?.reduce(\r\n (obj, key) => ({\r\n ...obj,\r\n [key]: item.feature.properties[key],\r\n }),\r\n {}\r\n );\r\n return filteredFields;\r\n });\r\n\r\n const formattedTableData = {\r\n id,\r\n info: {\r\n ...options,\r\n tableTitle,\r\n columnHeaders,\r\n },\r\n features: [...features],\r\n };\r\n\r\n setTableData([formattedTableData]);\r\n };\r\n\r\n // Set what features in a map layer are within the active extent\r\n const setLayerExtent = () => {\r\n const featuresWithinExtent = [];\r\n\r\n if (sourceDataRef.current) {\r\n // eslint-disable-next-line no-underscore-dangle\r\n Object.values(sourceDataRef.current._layers).forEach((layer) => {\r\n // For point layer. TODO: this may be deleted if not needed, unsure if we'll have point layer data\r\n if (layer.feature.geometry.type.toLowerCase() === 'point') {\r\n if (\r\n mapRef.current\r\n .getBounds()\r\n .contains(\r\n L.GeoJSON.coordsToLatLng(\r\n layer.feature.geometry.coordinates\r\n )\r\n )\r\n ) {\r\n featuresWithinExtent.push(layer);\r\n }\r\n } else if (\r\n layer.feature.geometry.type.toLowerCase() === 'polygon' ||\r\n layer.feature.geometry.type.toLowerCase() === 'multipolygon'\r\n ) {\r\n // Set depth for latlng conversion. Multipolygons should be 2.\r\n const layerDepth =\r\n layer.feature.geometry.type.toLowerCase() === 'polygon'\r\n ? 1\r\n : 2;\r\n\r\n try {\r\n const bounds = L.latLngBounds(\r\n L.GeoJSON.coordsToLatLngs(\r\n layer.feature.geometry.coordinates,\r\n layerDepth\r\n )\r\n );\r\n\r\n if (mapRef.current.getBounds().intersects(bounds)) {\r\n featuresWithinExtent.push(layer);\r\n }\r\n } catch (e) {\r\n console.error(\r\n 'Unable to determine feature bounds: ',\r\n e.message\r\n );\r\n }\r\n }\r\n });\r\n\r\n formatTableLayer({\r\n featuresWithinExtent,\r\n options: sourceDataRef.current.options,\r\n });\r\n }\r\n };\r\n\r\n const setMapRef = (map) => {\r\n mapRef.current = map.target;\r\n\r\n const worldTopo = L.tileLayer(\r\n 'https://services.arcgisonline.com/arcgis/rest/services/World_Topo_Map/MapServer/tile/{z}/{y}/{x}',\r\n {\r\n attribution:\r\n '© OpenStreetMap contributors',\r\n }\r\n ).addTo(mapRef.current); // Adding this layer to the map here sets it to be on by defualt in the layerControl.\r\n\r\n const lightGray = L.tileLayer(\r\n 'https://services.arcgisonline.com/arcgis/rest/services/Canvas/World_Light_Gray_Base/MapServer/tile/{z}/{y}/{x}',\r\n {\r\n attribution:\r\n '© OpenStreetMap contributors',\r\n }\r\n );\r\n\r\n const baseMaps = {\r\n 'World Topo': worldTopo,\r\n 'Light Gray': lightGray,\r\n };\r\n\r\n const layerControl = L.control.layers(baseMaps, null, {\r\n position: 'bottomright',\r\n });\r\n\r\n layerControl.addTo(mapRef.current);\r\n\r\n mapRef.current.on('zoomend moveend', () => {\r\n setLayerExtent();\r\n setMapZoom(map.target.getZoom());\r\n });\r\n };\r\n\r\n // Cleanup function, memoized through useCallback in order to avoid infinite re-renders when passed into useEffect dependency array:\r\n const cleanupLeaflet = useCallback(() => {\r\n if (mapRef.current) {\r\n mapRef.current.off();\r\n setMapLayers([]);\r\n }\r\n setMapZoom(defaultMapZoom);\r\n setTableData([]);\r\n }, [mapRef, defaultMapZoom, setMapZoom, setMapLayers, setTableData]);\r\n\r\n const cleanupTimeSlider = useCallback(() => {\r\n setSliderValue(0);\r\n setTimeSliderMarks(null);\r\n }, []);\r\n\r\n // // Effects // //\r\n\r\n // If layer set changes, reset table data to empty array (should repopulate with new selectedLayerSet's source layer data when loadLayers fires)\r\n useEffect(() => setTableData([]), [selectedLayerSet, setTableData]);\r\n\r\n // Clean up map content when switching between time slider maps beneath the same tab:\r\n useEffect(() => cleanupTimeSlider(), [cleanupTimeSlider, currentTab]);\r\n\r\n // Cleanup open demographics content when switching over from a chart component for both the chart and map popup state:\r\n useEffect(() => {\r\n setMapDemographicContent(null);\r\n setChartDemographicContent(null);\r\n }, [setChartDemographicContent, setMapDemographicContent]);\r\n\r\n // Load a new set of layers if any part of the url changes:\r\n // linter wants unchanging useState setter functions (passed as a prop to this comp) to be included in the deps array, will disable warning here:\r\n useEffect(() => {\r\n const loadLayers = () => {\r\n // Reset layers loading to an empty array:\r\n setLayersLoading([]);\r\n\r\n // Updates this component's ref to keep in line with prop\r\n selectedLayerRef.current = selectedLayerSet;\r\n\r\n const determineVisibility = (layer) => {\r\n // if layer is fixed, turn it on:\r\n if (layer.fixed) {\r\n return true;\r\n }\r\n\r\n // If layer is toggleable, checking if search param for layers has been passed in and switching to that layer\r\n if (search.match('layers')) {\r\n const { layers } = queryStringParse();\r\n return layers.match(layer.id);\r\n }\r\n // If no params, will follow default setting (all tabs must have at least one \"defaultVisible\" layer per \"setLayers\" array in the config/topics.js file)\r\n return layer.defaultVisible;\r\n };\r\n\r\n const visibleLayers = selectedLayerSet.setLayers\r\n .filter(determineVisibility)\r\n .map((setLayer) => {\r\n // Create esri layer and add event listeners for each layer that should be visible:\r\n const esriLayer = esri.featureLayer({\r\n ...setLayer,\r\n });\r\n return {\r\n id: setLayer.id,\r\n esriLayer,\r\n };\r\n });\r\n\r\n // Construct marks object and min max for time slider:\r\n if (currentTab.timeSlider) {\r\n if (timeSliderMarks === null) {\r\n const marks = selectedLayerSet.setLayers.map((layer) => {\r\n // layer year is the last param in the url\r\n const markYear = layer.url.substr(\r\n layer.url.lastIndexOf('/') + 1\r\n );\r\n\r\n return {\r\n value: Number(markYear),\r\n label: markYear,\r\n };\r\n });\r\n\r\n // Min, max values are the first and last items of our marks object\r\n // as those should correspond to the lowest and highest years of our time slider span.\r\n const minYear = marks[0].value;\r\n const maxYear = marks[marks.length - 1].value;\r\n\r\n // Grabbing the first map layer becuase we only want to display a single\r\n // layer at a time, and on page render that should be the layer with the lowest year:\r\n const firstMapLayer = visibleLayers[0];\r\n\r\n setMapLayers([firstMapLayer]);\r\n timeSliderActiveLayerRef.current = firstMapLayer;\r\n\r\n setTimeSliderMarks([...marks]);\r\n setTimeSliderMinMax((previousMinMax) => ({\r\n ...previousMinMax,\r\n min: minYear,\r\n max: maxYear,\r\n }));\r\n }\r\n } else {\r\n // Set active layers in HealthTopic state:\r\n setMapLayers((prevMapLayers) =>\r\n // Determine which layers are already loaded and which layers are already visible:\r\n getUpdatedMapLayers(prevMapLayers, visibleLayers)\r\n );\r\n }\r\n };\r\n loadLayers();\r\n }, [\r\n topic,\r\n theme,\r\n tab,\r\n search,\r\n queryStringParse,\r\n selectedLayerSet,\r\n selectedLayerRef,\r\n sourceDataRef,\r\n setLayersLoading,\r\n setMapLayers,\r\n currentTab.timeSlider,\r\n timeSliderMarks,\r\n ]);\r\n\r\n // Effect for watching slider value change and respective debouncing method:\r\n useEffect(() => {\r\n // Check if there has been a change in slider value:\r\n if (\r\n debouncedSliderValue &&\r\n currentTabRef.current === currentTab.tabPath\r\n ) {\r\n // The ref here avoids extraneous fetches if the slider is moved but then returned to its original\r\n // starting value before an event triggers.\r\n if (\r\n timeSliderActiveLayerRef.current.esriLayer.options\r\n .sliderMarkValue !== debouncedSliderValue\r\n ) {\r\n const foundMapLayer = currentTab.mapSets[0].setLayers.find(\r\n (mapSet) => {\r\n const mapUrl = mapSet.url;\r\n const layerYear = Number(\r\n mapUrl.substr(mapUrl.lastIndexOf('/') + 1)\r\n );\r\n\r\n return layerYear === debouncedSliderValue;\r\n }\r\n );\r\n\r\n if (foundMapLayer) {\r\n const esriLayer = {\r\n id: foundMapLayer.id,\r\n esriLayer: esri.featureLayer({\r\n ...foundMapLayer,\r\n }),\r\n };\r\n\r\n setMapLayers([esriLayer]);\r\n timeSliderActiveLayerRef.current = esriLayer;\r\n }\r\n }\r\n }\r\n currentTabRef.current = currentTab.tabPath;\r\n }, [\r\n currentTab.mapSets,\r\n currentTab.tabPath,\r\n debouncedSliderValue,\r\n setMapLayers,\r\n ]);\r\n\r\n // Define cleanup effect used only for unmount:\r\n // linter wants unchanging useState setter functions (passed as a prop to this comp) to be included in the deps array, will disable warning here:\r\n useEffect(() => cleanupLeaflet, [cleanupLeaflet]);\r\n\r\n // // Render // //\r\n return (\r\n <>\r\n \r\n \r\n \r\n {currentTab.mapSets.length > 1 ? (\r\n \r\n ) : null}\r\n {mapLayers.map((layer) => (\r\n \r\n ))}\r\n \r\n {currentTab.timeSlider && (\r\n
\r\n setSliderValue(e.target.value)}\r\n />\r\n
\r\n )}\r\n
\r\n \r\n layer.id)}\r\n mapZoom={mapZoom}\r\n pathname={pathname}\r\n topic={topic}\r\n queryStringParse={queryStringParse}\r\n routeToLayers={routeToLayers}\r\n setMissingSuppressedModalOpen={\r\n setMissingSuppressedModalOpen\r\n }\r\n styles={styles}\r\n currentTab={currentTab}\r\n />\r\n \r\n \r\n );\r\n};\r\n\r\nexport default MapContent;\r\n","// Modules:\r\nimport React, { useRef, useState, useEffect, useCallback } from 'react';\r\n\r\n// Config:\r\nimport config from 'config/config';\r\n\r\n// Utilities\r\nimport { generateAnnotations, formatNumber } from 'utilities/utils';\r\n\r\n// Material UI:\r\nimport Grid from '@mui/material/Grid';\r\nimport FormControl from '@mui/material/FormControl';\r\nimport Select from '@mui/material/Select';\r\nimport MenuItem from '@mui/material/MenuItem';\r\nimport FormHelperText from '@mui/material/FormHelperText';\r\nimport Alert from '@mui/material/Alert';\r\nimport ButtonGroup from '@mui/material/ButtonGroup';\r\nimport Button from '@mui/material/Button';\r\nimport InfoOutlinedIcon from '@mui/icons-material/InfoOutlined';\r\n\r\n// Chart.js:\r\nimport { Chart } from 'chart.js';\r\nimport { Line } from 'react-chartjs-2';\r\nimport annotationPlugin from 'chartjs-plugin-annotation';\r\nimport muiTheme from '../../theme';\r\n\r\n// Annotation plugin must be registered per https://www.chartjs.org/chartjs-plugin-annotation/latest/guide/.\r\nChart.register(annotationPlugin);\r\n\r\nconst TrendLine = ({\r\n currentTab,\r\n counties,\r\n json,\r\n selection,\r\n stratification,\r\n setStratification,\r\n dataUnavailable,\r\n setDataUnavailable,\r\n styles,\r\n handleDropdownSelect,\r\n checkIfNull,\r\n setMissingSuppressedModalOpen,\r\n setChartInfoModalOpen,\r\n}) => {\r\n // // State // //\r\n const [chartData, setChartData] = useState({});\r\n const [windowSize, setWindowSize] = useState(window.innerWidth);\r\n\r\n // // Variables // //\r\n const MAX_MOBILE_VIEW_WIDTH = 500;\r\n\r\n // This is reliant on all percent-based displays including the word \"percent\" somewhere in\r\n // their y-axis label field. If this convention is not followed, the conditional logic\r\n // will not work.\r\n const PERCENT_DISPLAY = currentTab.yAxisLabel\r\n .toLowerCase()\r\n .includes('percent');\r\n\r\n // // Refs // //\r\n const chartRef = useRef();\r\n\r\n // // Methods // //\r\n const handleMissingSuppressed = (data) =>\r\n data === config.missing || data === config.suppressed ? null : data;\r\n\r\n const handleClick = (value) => {\r\n if (stratification !== value) {\r\n setStratification(value);\r\n }\r\n };\r\n\r\n const handleWindowResize = useCallback(() => {\r\n setWindowSize(window.innerWidth);\r\n }, []);\r\n\r\n // // Effects // //\r\n\r\n // Load chart if component gets new data\r\n useEffect(() => {\r\n const loadChart = () => {\r\n // Reset defaults if chart loads for new data:\r\n setChartData({});\r\n setDataUnavailable(false);\r\n if (!json || !selection) {\r\n return;\r\n }\r\n\r\n const { defaultSelection, baseline, chartConfig } = currentTab;\r\n\r\n const getChartData = () => {\r\n const data = {}; // The object chart.js will be passed\r\n const xAxisField = currentTab.chartXAxisField; // x-axis labels are typically the time intervals for the graph\r\n const dataSetNames = currentTab.chartDataSets;\r\n\r\n // Extract labels for chart from data:\r\n data.labels = json.map((item) => item[xAxisField]);\r\n\r\n let datasetArray = [];\r\n\r\n if (\r\n stratification &&\r\n // Check the set stratification exits for the current chart\r\n json[0][stratification] &&\r\n currentTab.stratifications.some(\r\n (strat) => strat.field === stratification\r\n )\r\n ) {\r\n const sampleObject = json[0];\r\n const [stratifications] = sampleObject[stratification];\r\n Object.keys(stratifications).forEach((stratGroup) => {\r\n const dataset = chartConfig.stratificationDatasets\r\n .filter(\r\n (stratificationDataset) =>\r\n stratificationDataset.stratification ===\r\n stratification\r\n )\r\n .find((x) => x.setName === stratGroup);\r\n\r\n if (dataset) {\r\n dataset.data = json.map((x) =>\r\n handleMissingSuppressed(\r\n x[stratification][0][stratGroup]\r\n )\r\n );\r\n datasetArray.push(dataset);\r\n }\r\n });\r\n\r\n datasetArray\r\n .sort((a, b) => {\r\n if (a.order < b.order) return 1;\r\n if (a.order >= b.order) return -1;\r\n return 0;\r\n })\r\n .forEach((dataset, index) => {\r\n dataset.backgroundColor =\r\n muiTheme.chartPalette.stratified[index];\r\n dataset.borderColor =\r\n muiTheme.chartPalette.stratified[index];\r\n });\r\n\r\n // Second arg of `checkIfNull` is a filter key.\r\n // If all values are null for the non-baseline datasets, the following method will change `dataUnavailable` to true (which will trigger the \"No Data\" message to display in the chart):\r\n const mainDatasetsNull = checkIfNull(\r\n datasetArray,\r\n 'baseline'\r\n );\r\n if (mainDatasetsNull) {\r\n setDataUnavailable(true);\r\n }\r\n } else if (!baseline) {\r\n chartConfig.mainDatasets.forEach((dataset) => {\r\n dataset.data = json.map((x) =>\r\n handleMissingSuppressed(x[dataset.setName])\r\n );\r\n datasetArray.push(dataset);\r\n });\r\n\r\n datasetArray.forEach((dataset, index) => {\r\n dataset.backgroundColor =\r\n muiTheme.chartPalette.default[index];\r\n dataset.borderColor =\r\n muiTheme.chartPalette.default[index];\r\n });\r\n } else if (\r\n selection === defaultSelection ||\r\n !currentTab.selectable\r\n ) {\r\n const [baselineDataset] = chartConfig.mainDatasets.filter(\r\n (dataset) => dataset.baseline\r\n );\r\n baselineDataset.data = json.map((x) =>\r\n handleMissingSuppressed(x[baselineDataset.setName])\r\n );\r\n\r\n // Check if all data are missing/suppressed\r\n const noData = baselineDataset.data.every(\r\n (dataPoint) => dataPoint === null\r\n );\r\n\r\n // if no data, EXIT function here:\r\n if (noData) {\r\n return setDataUnavailable(true);\r\n }\r\n\r\n baselineDataset.backgroundColor =\r\n muiTheme.palette.lineChartPrimary.light;\r\n\r\n baselineDataset.borderColor =\r\n muiTheme.palette.lineChartPrimary.light;\r\n\r\n datasetArray = [baselineDataset];\r\n } else {\r\n dataSetNames.forEach((setName) => {\r\n const dataset = chartConfig.mainDatasets.find(\r\n (x) => x.setName === setName\r\n );\r\n dataset.data = json.map((x) =>\r\n handleMissingSuppressed(x[setName])\r\n );\r\n\r\n if (dataset.baseline) {\r\n // if dataset is baseline, set color to gray defined in theme palette, otherwise use color designated for county\r\n dataset.backgroundColor =\r\n muiTheme.palette.chartBaseline.light;\r\n\r\n dataset.borderColor =\r\n muiTheme.palette.chartBaseline.light;\r\n } else {\r\n dataset.backgroundColor =\r\n muiTheme.palette.lineChartSecondary.light;\r\n dataset.borderColor =\r\n muiTheme.palette.lineChartSecondary.light;\r\n }\r\n\r\n datasetArray.push(dataset);\r\n });\r\n\r\n // Second arg of `checkIfNull` is a filter key.\r\n // If all values are null for the non-baseline datasets, the following method will change `dataUnavailable` to true (which will trigger the \"No Data\" message to display in the chart):\r\n const mainDatasetsNull = checkIfNull(\r\n datasetArray,\r\n 'baseline'\r\n );\r\n if (mainDatasetsNull) {\r\n setDataUnavailable(true);\r\n }\r\n }\r\n\r\n // If all values are null, the following method will change `dataUnavailable` to true (which will trigger the \"No Data\" message to display in the chart):\r\n const allNull = checkIfNull(datasetArray);\r\n if (allNull) {\r\n setDataUnavailable(true);\r\n }\r\n\r\n data.datasets = datasetArray;\r\n return setChartData(data);\r\n };\r\n\r\n getChartData();\r\n };\r\n\r\n loadChart();\r\n }, [\r\n selection,\r\n json,\r\n currentTab,\r\n checkIfNull,\r\n setDataUnavailable,\r\n stratification,\r\n ]);\r\n\r\n // Sets window width in state. Used to set chart x-axis label rotation degree in chart.js ticks object.\r\n useEffect(() => {\r\n window.addEventListener('resize', handleWindowResize);\r\n\r\n return () => {\r\n window.removeEventListener('resize', handleWindowResize);\r\n };\r\n }, [handleWindowResize]);\r\n\r\n return (\r\n <>\r\n \r\n {currentTab.selectable ? (\r\n \r\n {counties.length ? (\r\n \r\n {counties.map((county) => (\r\n \r\n {county.county}\r\n \r\n ))}\r\n \r\n ) : null}\r\n \r\n Select County\r\n \r\n \r\n ) : null}\r\n \r\n {dataUnavailable ? (\r\n \r\n
\r\n setMissingSuppressedModalOpen(true)}\r\n >\r\n Data are not available to display for{' '}\r\n {counties && counties.length\r\n ? counties.find(\r\n (county) => county.code === selection\r\n ).county\r\n : 'selection.'}\r\n .\r\n \r\n
\r\n
\r\n ) : (\r\n \r\n
\r\n {Object.keys(chartData).length ? (\r\n {\r\n // This solution is to differentiate between rate and non-rate data sets, as rate data sets need a trailing .0 for whole values (9 => 9.0).\r\n // This is reliant on the 'setName' key including the word 'rate' in some capacity, but may need to be reworked to have a more consistent condition.\r\n const isRate = dataset.setName.match(\r\n /rate/gi\r\n );\r\n\r\n const value =\r\n dataset.data[dataIndex];\r\n\r\n return isRate\r\n ? formatNumber(value)\r\n : value.toLocaleString();\r\n },\r\n },\r\n },\r\n },\r\n scales: {\r\n y: {\r\n grace: '20%',\r\n beginAtZero: true,\r\n ticks: {\r\n callback: (value) =>\r\n PERCENT_DISPLAY\r\n ? `${value}%` &&\r\n `${value.toLocaleString()}%`\r\n : value &&\r\n value.toLocaleString(),\r\n\r\n // For charts that use a percentage, \"hides\" anything greater than 100\r\n // by matching text color to white background. This is a work around\r\n // that allows for headroom between the data values that are the max percentage\r\n // value (100%) and the top of the chart. See README for more detail.\r\n color: (context) =>\r\n PERCENT_DISPLAY &&\r\n context.tick.value > 100\r\n ? 'white'\r\n : 'gray', // Otherwise return values with normal color.\r\n },\r\n title: {\r\n display:\r\n currentTab.displayYAxisLabel,\r\n text: currentTab.yAxisLabel,\r\n },\r\n },\r\n x: {\r\n ticks: {\r\n minRotation:\r\n // Adds a 60 degree rotation for x-axis labels. 0 means labels lay flat.\r\n windowSize <=\r\n MAX_MOBILE_VIEW_WIDTH\r\n ? 60\r\n : 0,\r\n },\r\n title: {\r\n display:\r\n currentTab.displayXAxisLabel,\r\n text: currentTab.xAxisLabel,\r\n },\r\n },\r\n },\r\n }}\r\n />\r\n ) : null}\r\n
\r\n
\r\n )}\r\n {Object.keys(chartData).length ? (\r\n
\r\n setChartInfoModalOpen(true)}\r\n >\r\n \r\n \r\n
\r\n ) : null}\r\n {currentTab.stratifiable && (\r\n \r\n
\r\n \r\n {[\r\n handleClick()}\r\n sx={styles}\r\n variant={\r\n !stratification\r\n ? 'contained'\r\n : 'outlined'\r\n }\r\n >\r\n All\r\n ,\r\n currentTab.stratifications.map((strata) => (\r\n \r\n handleClick(strata.field)\r\n }\r\n variant={\r\n stratification === strata.field\r\n ? 'contained'\r\n : 'outlined'\r\n }\r\n sx={styles}\r\n >\r\n {strata.title}\r\n \r\n )),\r\n ]}\r\n \r\n
\r\n
\r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default TrendLine;\r\n","// Modules:\r\nimport React, { useRef, useState, useEffect } from 'react';\r\n\r\n// Material UI:\r\nimport Grid from '@mui/material/Grid';\r\nimport FormControl from '@mui/material/FormControl';\r\nimport Select from '@mui/material/Select';\r\nimport MenuItem from '@mui/material/MenuItem';\r\nimport FormHelperText from '@mui/material/FormHelperText';\r\nimport Alert from '@mui/material/Alert';\r\nimport Button from '@mui/material/Button';\r\nimport InfoOutlinedIcon from '@mui/icons-material/InfoOutlined';\r\n\r\n// Chart.js:\r\nimport { Bar } from 'react-chartjs-2';\r\n\r\n// Utilities\r\nimport { formatNumber } from 'utilities/utils';\r\n\r\n// Styles:\r\nimport muiTheme from '../../theme';\r\n\r\nconst HorizontalBar = ({\r\n currentTab,\r\n json,\r\n selection,\r\n sortByAxis,\r\n dataUnavailable,\r\n setDataUnavailable,\r\n handleDropdownSelect,\r\n checkIfNull,\r\n styles,\r\n setMissingSuppressedModalOpen,\r\n setChartInfoModalOpen,\r\n}) => {\r\n // // State // //\r\n const [chartData, setChartData] = useState({});\r\n\r\n // // Refs // //\r\n const chartRef = useRef();\r\n\r\n // This is a temporary solution to add a year selector to this horizontal bar chart that is currently only\r\n // in use by the Birth Defects topic. Work is being done to refactor how topic metadata is retrieved.\r\n // TODO: Remove this once the config/metadata endpoints are in place.\r\n const BIRTH_DEFECTS_DATA_YEARS = ['2016-2020', '2017-2021'];\r\n\r\n // // Effects // //\r\n\r\n // Load chart if component gets new data\r\n useEffect(() => {\r\n const loadChart = () => {\r\n // Reset defaults if chart loads for new data:\r\n setChartData({});\r\n setDataUnavailable(false);\r\n\r\n if (!json || !selection) {\r\n return;\r\n }\r\n\r\n const { baseline, chartConfig } = currentTab;\r\n\r\n const getChartData = () => {\r\n const data = {}; // The object chart.js will be passed\r\n const yAxisField = currentTab.chartYAxisField; // y-axis labels are are type names for this graph.\r\n const dataSetNames = currentTab.chartDataSets;\r\n\r\n const datasetArray = [];\r\n\r\n // Sort labels alphabetically, always leaving baseline measure as first:\r\n const sortedData = sortByAxis(json, yAxisField, baseline);\r\n\r\n // Extract labels for chart from data:\r\n data.labels = sortedData.map((item) => item[yAxisField]);\r\n\r\n /* The following logic is specific for the Birth Defects health topic. MDH wants the ability to toggle the \r\n 'All Birth Defects' data and to accomplish this that data must exist as its own data set within the chart. \r\n This means that for the 'All Birth Defects' data set, the returned 'rate' value is maintained only for the \r\n 'All Birth Defects' line, and the rest of the lines are set 'null'. This ensures that item count in each \r\n data set matches (required for this chart), the two data sets can be toggled on and off individually, \r\n and there are no duplicate values for any of the bars within the chart. */\r\n\r\n dataSetNames.forEach((setName) => {\r\n const dataset = chartConfig.find(\r\n (x) => x.setName === setName\r\n );\r\n\r\n dataset.backgroundColor = [];\r\n dataset.hoverBackgroundColor = [];\r\n\r\n // The setName 'rate' relates to 'All Birth Defects'.\r\n // 'All Birth Defects' is the baseline dataset for the 'Birth Defects' topic:\r\n if (setName === 'rate') {\r\n // Nullify all values EXCEPT 'All Birth Defects':\r\n dataset.data = json.map((x) => {\r\n if (x.chartLabel === 'All birth defects') {\r\n return x[setName];\r\n }\r\n return null;\r\n });\r\n\r\n // Add primary colors to baseline dataset:\r\n dataset.backgroundColor.push(\r\n muiTheme.palette.lineChartPrimary.light\r\n );\r\n dataset.hoverBackgroundColor.push(\r\n muiTheme.palette.lineChartPrimary.dark\r\n );\r\n }\r\n if (setName === 'individualRate') {\r\n // Nullify 'All Birth Defects' rate only:\r\n dataset.data = json.map((x) => {\r\n if (x.chartLabel !== 'All birth defects') {\r\n return x[setName];\r\n }\r\n return null;\r\n });\r\n\r\n // Add secondary colors to non-primary dataset:\r\n dataset.backgroundColor.push(\r\n muiTheme.palette.lineChartSecondary.light\r\n );\r\n dataset.hoverBackgroundColor.push(\r\n muiTheme.palette.lineChartSecondary.dark\r\n );\r\n }\r\n\r\n datasetArray.push(dataset);\r\n });\r\n\r\n // If all values are null, the following method will change `dataUnavailable` to true:\r\n const allNull = checkIfNull(datasetArray);\r\n if (allNull) {\r\n setDataUnavailable(true);\r\n }\r\n\r\n data.datasets = datasetArray;\r\n\r\n return setChartData(data);\r\n };\r\n\r\n getChartData();\r\n };\r\n loadChart();\r\n }, [\r\n json,\r\n selection,\r\n checkIfNull,\r\n sortByAxis,\r\n currentTab,\r\n setDataUnavailable,\r\n ]);\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n {BIRTH_DEFECTS_DATA_YEARS.map((year) => (\r\n \r\n {year}\r\n \r\n ))}\r\n \r\n \r\n Select Period\r\n \r\n \r\n \r\n {dataUnavailable ? (\r\n \r\n
\r\n setMissingSuppressedModalOpen(true)}\r\n >\r\n {/* TODO: add year dynamically if this component is used by MDH */}\r\n Data are not available to display for (year).\r\n \r\n
\r\n
\r\n ) : (\r\n \r\n
\r\n {Object.keys(chartData).length ? (\r\n \r\n // Removes non intersecting bar values from tooltip:\r\n tooltipItem.raw !== null,\r\n callbacks: {\r\n label: (tooltipItem) =>\r\n formatNumber(\r\n tooltipItem.raw\r\n ),\r\n },\r\n },\r\n legend: {\r\n position: 'bottom',\r\n },\r\n },\r\n scales: {\r\n x: {\r\n title: {\r\n display:\r\n currentTab.displayXAxisLabel,\r\n text: currentTab.xAxisLabel,\r\n },\r\n },\r\n },\r\n }}\r\n />\r\n ) : null}\r\n
\r\n {Object.keys(chartData).length ? (\r\n
\r\n setChartInfoModalOpen(true)}\r\n >\r\n \r\n \r\n
\r\n ) : null}\r\n
\r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default HorizontalBar;\r\n","// Modules:\r\nimport React, { useState, useRef, useEffect } from 'react';\r\n\r\n// Material UI:\r\nimport Grid from '@mui/material/Grid';\r\nimport FormControl from '@mui/material/FormControl';\r\nimport Select from '@mui/material/Select';\r\nimport MenuItem from '@mui/material/MenuItem';\r\nimport FormHelperText from '@mui/material/FormHelperText';\r\nimport Alert from '@mui/material/Alert';\r\n\r\n// Chart.js:\r\nimport { Bar } from 'react-chartjs-2';\r\n\r\n// Utils:\r\nimport { formatNumber, generateAnnotations } from 'utilities/utils';\r\nimport muiTheme from '../../theme';\r\n\r\nconst BarLineMix = ({\r\n currentTab,\r\n counties,\r\n json,\r\n sortByAxis,\r\n selection,\r\n handleDropdownSelect,\r\n dataUnavailable,\r\n setDataUnavailable,\r\n checkIfNull,\r\n styles,\r\n setMissingSuppressedModalOpen,\r\n}) => {\r\n // State:\r\n const [chartData, setChartData] = useState({});\r\n\r\n // // Refs // //\r\n const chartRef = useRef();\r\n\r\n // // Effects: // //\r\n useEffect(() => {\r\n const loadChart = () => {\r\n // Reset defaults if chart loads for new data:\r\n setChartData({});\r\n setDataUnavailable(false);\r\n if (!json || !selection) {\r\n return;\r\n }\r\n\r\n const { chartConfig } = currentTab;\r\n\r\n const getChartData = () => {\r\n const data = {}; // The object chart.js will be passed\r\n const xAxisField = currentTab.chartXAxisField; // x-axis labels are typically the time intervals for the graph\r\n const dataSetNames = currentTab.chartDataSets;\r\n\r\n // Sort labels by year:\r\n const sortedData = sortByAxis(json, xAxisField);\r\n // Extract labels for chart from data:\r\n data.labels = sortedData.map((item) => item[xAxisField]);\r\n\r\n const datasetArray = [];\r\n\r\n dataSetNames.forEach((setName) => {\r\n const dataset = chartConfig.find(\r\n (x) => x.setName === setName\r\n );\r\n dataset.data = json.map((x) => x[setName]);\r\n datasetArray.push(dataset);\r\n });\r\n\r\n // If all values are null, the following method will change `dataUnavailable` to true:\r\n const allNull = checkIfNull(datasetArray);\r\n if (allNull) {\r\n setDataUnavailable(true);\r\n }\r\n\r\n // if data available, set color palette and put chart data into state\r\n datasetArray.forEach((dataset, index) => {\r\n if (dataset.type === 'line') {\r\n dataset.backgroundColor = 'transparent';\r\n dataset.borderColor = currentTab.highContrastPalette\r\n ? muiTheme.chartPalette.highContrast[index]\r\n : muiTheme.chartPalette.default[index];\r\n } else {\r\n dataset.backgroundColor = currentTab.highContrastPalette\r\n ? muiTheme.chartPalette.highContrast[index]\r\n : muiTheme.chartPalette.default[index];\r\n dataset.borderColor =\r\n muiTheme.chartPalette.default[index];\r\n }\r\n });\r\n\r\n data.datasets = datasetArray;\r\n\r\n setChartData(data);\r\n };\r\n\r\n getChartData();\r\n };\r\n loadChart();\r\n }, [\r\n selection,\r\n json,\r\n checkIfNull,\r\n sortByAxis,\r\n currentTab,\r\n setDataUnavailable,\r\n ]);\r\n\r\n return (\r\n <>\r\n \r\n {currentTab.selectable ? (\r\n \r\n {counties.length ? (\r\n \r\n {counties.map((county) => (\r\n \r\n {county.county}\r\n \r\n ))}\r\n \r\n ) : null}\r\n \r\n Select County\r\n \r\n \r\n ) : null}\r\n \r\n {dataUnavailable ? (\r\n \r\n
\r\n setMissingSuppressedModalOpen(true)}\r\n >\r\n Data are not available to display for{' '}\r\n {counties && counties.length\r\n ? counties.find(\r\n (county) => county.code === selection\r\n ).county\r\n : 'selection.'}\r\n .\r\n \r\n
\r\n
\r\n ) : (\r\n \r\n
\r\n {Object.keys(chartData).length ? (\r\n ({\r\n borderColor: currentTab.highContrastPalette\r\n ? muiTheme.chartPalette\r\n .highContrast[\r\n context\r\n .datasetIndex\r\n ]\r\n : muiTheme.chartPalette\r\n .default[\r\n context\r\n .datasetIndex\r\n ],\r\n backgroundColor: currentTab.highContrastPalette\r\n ? muiTheme.chartPalette\r\n .highContrast[\r\n context\r\n .datasetIndex\r\n ]\r\n : muiTheme.chartPalette\r\n .default[\r\n context\r\n .datasetIndex\r\n ],\r\n }),\r\n label: ({\r\n dataIndex,\r\n dataset,\r\n }) => {\r\n // This solution is to differentiate between rate and non-rate data sets, as rate data sets need a trailing .0 for whole values (9 => 9.0).\r\n // This is reliant on the 'setName' key including the word 'rate' in some capacity, but may need to be reworked to have a more consistent condition.\r\n const isRate = dataset.setName.match(\r\n /rate/gi\r\n );\r\n\r\n const value =\r\n dataset.data[dataIndex];\r\n\r\n return isRate\r\n ? formatNumber(value)\r\n : value.toLocaleString();\r\n },\r\n },\r\n },\r\n },\r\n\r\n maintainAspectRatio: false,\r\n\r\n scales: {\r\n [currentTab.yAxisIdLeft]: {\r\n type: 'linear',\r\n grace: '20%',\r\n beginAtZero: true,\r\n ticks: {\r\n userCallback: (value) =>\r\n value &&\r\n value.toLocaleString(),\r\n },\r\n position: 'left',\r\n display: true,\r\n title: {\r\n display:\r\n currentTab.displayYAxisLabel,\r\n text: currentTab.yAxisLabelLeft,\r\n },\r\n },\r\n [currentTab.yAxisIdRight]: {\r\n type: 'linear',\r\n grace: '20%',\r\n beginAtZero: true,\r\n ticks: {\r\n userCallback: (value) =>\r\n value &&\r\n value.toLocaleString(),\r\n },\r\n position: 'right',\r\n title: {\r\n display:\r\n currentTab.displayYAxisLabel,\r\n text:\r\n currentTab.yAxisLabelRight,\r\n },\r\n },\r\n x: {\r\n title: {\r\n display:\r\n currentTab.displayXAxisLabel,\r\n text: currentTab.xAxisLabel,\r\n },\r\n },\r\n },\r\n }}\r\n />\r\n ) : null}\r\n
\r\n
\r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default BarLineMix;\r\n","// Modules:\r\nimport React, { useState, useEffect } from 'react';\r\n\r\n// Config:\r\nimport config from 'config/config';\r\n\r\n// Components:\r\nimport { useErrorHandler } from 'react-error-boundary';\r\nimport { handleFetchError } from 'utilities/utils';\r\nimport TrendLine from '../Charts/TrendLine';\r\nimport HorizontalBar from '../Charts/HorizontalBar';\r\nimport BarLineMix from '../Charts/BarLineMix';\r\n\r\n// Styles:\r\nimport muiTheme from '../../theme';\r\n\r\n// Style:\r\nconst styles = {\r\n '&.MuiFormControl-root': {\r\n margin: '0 auto',\r\n },\r\n '&.MuiAlert-root': {\r\n '&:hover': {\r\n cursor: 'pointer',\r\n },\r\n },\r\n '& .MuiMenuItem-root': {\r\n color: 'red',\r\n },\r\n '&.MuiButton-root': {\r\n borderRight: '1px solid rgb(99, 167, 220) !important',\r\n minHeight: 'fit-content',\r\n margin: '0.5em 0',\r\n width: 'fit-content',\r\n },\r\n '&.MuiIconButton-root': {\r\n margin: 0,\r\n },\r\n '&.MuiButtonGroup-root': {\r\n margin: '0.7rem',\r\n maxWidth: '85%',\r\n },\r\n '&.MuiButton-contained': {\r\n background: muiTheme.palette.lightBlue.main,\r\n color: 'white',\r\n '&:hover': {\r\n background: muiTheme.palette.secondary.dark,\r\n },\r\n },\r\n '&.MuiButton-outlined': {\r\n color: muiTheme.palette.lightBlue.main,\r\n '&:hover': {\r\n background: muiTheme.palette.lightGray.main,\r\n },\r\n },\r\n};\r\n\r\n// Functions (do not use props or state):\r\n\r\n// Sorts fetched data alphabetically or numerically by axis specified\r\nconst sortByAxis = (items, axis, baseline) => {\r\n // Copy items to avoid mutating state:\r\n const sortedItems = items.sort((item, nextItem) => {\r\n if (item[axis] !== baseline && nextItem[axis] === baseline) {\r\n return 1;\r\n }\r\n if (item[axis] === baseline && nextItem[axis] !== baseline) {\r\n return -1;\r\n }\r\n if (item[axis] === nextItem[axis]) {\r\n return 0;\r\n }\r\n return item[axis] > nextItem[axis] ? 1 : -1;\r\n });\r\n return sortedItems;\r\n};\r\n\r\nconst checkIfNull = (datasetArray, filterKey) =>\r\n datasetArray\r\n .filter((dataset) => !dataset[filterKey])\r\n .map((dataset) => dataset.data)\r\n .flat()\r\n .every((dataPoint) => dataPoint === null);\r\n\r\nconst ChartContent = ({\r\n currentTab,\r\n counties,\r\n setChartDemographicContent,\r\n setTableData,\r\n setMissingSuppressedModalOpen,\r\n topicDataYears,\r\n stratification,\r\n setStratification,\r\n currentData,\r\n setCurrentData,\r\n selection,\r\n setSelection,\r\n setChartInfoModalOpen,\r\n}) => {\r\n // // State // //\r\n\r\n const [dataUnavailable, setDataUnavailable] = useState(false);\r\n\r\n // // Hooks // //\r\n\r\n const handleError = useErrorHandler();\r\n\r\n // // Methods // //\r\n const sanitizeData = (rawJson) =>\r\n [...rawJson].map((dataPoint) => {\r\n const copy = { ...dataPoint };\r\n Object.keys(copy).forEach((key) => {\r\n if (\r\n copy[key] === config.suppressed ||\r\n copy[key] === config.missing\r\n ) {\r\n copy[key] = null;\r\n }\r\n });\r\n return copy;\r\n });\r\n\r\n const handleDropdownSelect = (e) => {\r\n // Constructing this object for the Chart with the key 'MDCode' to mirror how data is passed to the 'CommunityProfile' component from the Map.\r\n const popupFeature = {\r\n properties: {\r\n MDCode: e.target.value,\r\n },\r\n };\r\n setChartDemographicContent(popupFeature);\r\n setSelection(e.target.value);\r\n };\r\n\r\n // // Effects // //\r\n\r\n // Main use: fetching data when selection changes\r\n useEffect(() => {\r\n const formatTableData = (json) => {\r\n const {\r\n defaultSetNames,\r\n chartXAxisField,\r\n tableTitle,\r\n baseline,\r\n info,\r\n } = currentTab;\r\n const { id, title, subtitle } = info;\r\n\r\n const layerInfo = {\r\n title,\r\n subtitle,\r\n };\r\n\r\n const data = { ...layerInfo };\r\n\r\n let columnHeaders = [...currentTab.columnHeaders];\r\n\r\n // Limit column headers if chart both has a baseline and user has selected it:\r\n if (baseline && selection === baseline) {\r\n columnHeaders = columnHeaders.filter(\r\n (header) =>\r\n defaultSetNames.includes(header.field) || // Keep baseline header and the x axis, removing comparison column\r\n header.field === chartXAxisField\r\n );\r\n }\r\n // Adds in only county column, stratification columns are handled individually:\r\n else {\r\n columnHeaders = columnHeaders.filter(\r\n (header) => !header.stratification\r\n );\r\n }\r\n\r\n // Appending stratification columns, logic below is to add them between county and statewide columns for more relevant grouping:\r\n if (stratification) {\r\n const stratificationColumns = currentTab.columnHeaders.filter(\r\n (header) => stratification === header.stratification\r\n );\r\n\r\n const stateColumnIndex = columnHeaders.findIndex(\r\n (item) => item.field === 'stateRate'\r\n );\r\n\r\n columnHeaders.splice(\r\n stateColumnIndex,\r\n 0,\r\n ...stratificationColumns\r\n );\r\n }\r\n\r\n const sortedFeatures = sortByAxis(\r\n [...json],\r\n chartXAxisField,\r\n baseline\r\n );\r\n\r\n const formattedTableData = {\r\n ...data,\r\n id,\r\n info: {\r\n title,\r\n columnHeaders,\r\n tableTitle,\r\n },\r\n selection,\r\n features: sortedFeatures,\r\n };\r\n\r\n setTableData([formattedTableData]);\r\n };\r\n\r\n const getQueryString = (selected) => {\r\n const queryString = currentTab.urlParams.reduce(\r\n (\r\n urlParamString,\r\n currentParamObject,\r\n currentIndex,\r\n paramsArr\r\n ) => {\r\n const { param } = currentParamObject;\r\n\r\n // If there is no 'value' key present in\r\n // the object, it is the 'jurisdiction' which\r\n // updates dynamically by the selector.\r\n const value = currentParamObject.value\r\n ? currentParamObject.value\r\n : selected;\r\n\r\n const additionalParams =\r\n currentIndex + 1 !== paramsArr.length ? '&' : '';\r\n\r\n return `${urlParamString}${param}=${value}${additionalParams}`;\r\n },\r\n ''\r\n );\r\n\r\n return queryString ? `?${queryString}` : '';\r\n };\r\n\r\n if (selection) {\r\n setChartDemographicContent({ properties: { MDCode: selection } });\r\n let baseURL = currentTab.url;\r\n const fetchData = (url) => {\r\n fetch(url)\r\n .then(handleFetchError)\r\n .then((res) => res.json())\r\n .then((resJson) => {\r\n const sanitizedData = sanitizeData([...resJson]);\r\n setCurrentData(sanitizedData);\r\n formatTableData(resJson);\r\n })\r\n .catch(handleError);\r\n };\r\n\r\n baseURL = `${baseURL}${getQueryString(selection)}`;\r\n\r\n setDataUnavailable(false);\r\n fetchData(baseURL);\r\n }\r\n }, [\r\n selection,\r\n currentTab.url,\r\n currentTab,\r\n handleError,\r\n setTableData,\r\n stratification,\r\n setStratification,\r\n setCurrentData,\r\n setChartDemographicContent,\r\n ]);\r\n\r\n // Cleans up stratification when moving away from Chart content type inside useEffect return block:\r\n useEffect(\r\n () => () => {\r\n setStratification();\r\n },\r\n [currentTab.contentType, setStratification]\r\n );\r\n\r\n // // Render // //\r\n // eslint-disable-next-line no-nested-ternary\r\n return currentTab.chartType === 'trendline' ? (\r\n \r\n ) : // eslint-disable-next-line no-nested-ternary\r\n currentTab.chartType === 'horizontalBar' ? (\r\n \r\n ) : // eslint-disable-next-line no-nested-ternary\r\n currentTab.chartType === 'mixed' ? (\r\n \r\n ) : null;\r\n};\r\n\r\nexport default ChartContent;\r\n","import React, { useEffect } from 'react';\r\n\r\n// Utils:\r\nimport { handleFetchError } from 'utilities/utils';\r\nimport { useErrorHandler } from 'react-error-boundary';\r\n\r\nconst TextContent = ({ currentTab, setTableData }) => {\r\n // // Hooks // //\r\n const handleError = useErrorHandler();\r\n\r\n // // Effects // //\r\n useEffect(() => {\r\n // Set table layers when this component mounts\r\n fetch(currentTab.url)\r\n .then(handleFetchError)\r\n .then((res) => res.json())\r\n .then(setTableData)\r\n .catch(handleError);\r\n }, [currentTab.url, setTableData, handleError]);\r\n\r\n // // Render // //\r\n return (\r\n
\r\n

{currentTab.textHeader}

\r\n
\r\n
\r\n {currentTab.textSubheading}\r\n
\r\n

{currentTab.textBody}

\r\n
\r\n );\r\n};\r\n\r\nexport default TextContent;\r\n","/* eslint-disable */\r\n// Modules\r\nimport Papa from 'papaparse';\r\nimport JSZip from 'jszip';\r\n\r\n// Config\r\nimport topics from 'config/topics';\r\nimport config from 'config/config';\r\n\r\n// Print single year NCDM table as displayed on page\r\nexport const printNcdm = () => {\r\n window.print();\r\n};\r\n\r\n// Function to return string without commas\r\n// (Note: if str is null for some reason, will return empty string (logic in place to prevent attempting a `.replace` on null value)\r\nconst sanitizeString = (str) => (str || '') && str.replace(/\\,/g, '');\r\n\r\n// TODO: We don't have a way to print all years due to paging. Either wait for material-ui to implement or we'll need to\r\n// devise a way to work around paging. Need to reconcile this approach with what is happening on the map/chart pages.\r\n\r\n// CSV Exports from XGrid:\r\nexport const exportAsCsv = ({\r\n uiCsv,\r\n title,\r\n subtitle,\r\n columnHeaders,\r\n yearDetails,\r\n}) => {\r\n let exportCsv = uiCsv;\r\n const { data } = Papa.parse(uiCsv);\r\n\r\n const sanitizedTitle = sanitizeString(title);\r\n const sanitizedSubtitle = sanitizeString(subtitle);\r\n const sanitizedYearDetails = sanitizeString(yearDetails);\r\n\r\n // Sanitize column headers for unlikely event that comma is present:\r\n // columnHeaders\r\n\r\n // Replacing missing and suppressed values with corresponding text values\r\n const formattedData = [...data].map((row) => {\r\n for (let i = 0; i < row.length; i++) {\r\n // Note: The Papa.parse() method run on this data converts the values into strings. The missing/suppressed codes are integers in the config file. They are converted into strings for the comparison here:\r\n if (row[i] === config.missing.toString()) {\r\n row[i] = config.missingText;\r\n }\r\n if (row[i] === config.suppressed.toString()) {\r\n row[i] = config.suppressedText;\r\n }\r\n }\r\n return row;\r\n });\r\n\r\n // Column data is stored as first item in array by Papa.parse\r\n const [columns] = formattedData;\r\n\r\n // Replacing UI column headers with custom export column headers, if any:\r\n formattedData[0] = columns.map((column) => {\r\n const { exportHeaderName } = columnHeaders.find(\r\n (header) => header.headerName === column\r\n );\r\n if (exportHeaderName) {\r\n return sanitizeString(exportHeaderName);\r\n }\r\n return sanitizeString(column);\r\n });\r\n\r\n exportCsv = Papa.unparse(formattedData);\r\n\r\n const BOM = '\\uFEFF';\r\n const finalizedCsv = `${BOM} ${sanitizedTitle}\\n\\n ${\r\n sanitizedSubtitle || ''\r\n } \\n\\n ${sanitizedYearDetails || ''} \\n\\n ${exportCsv} \\n\\n ${\r\n config.mdhAttribution\r\n }`;\r\n\r\n const blob = new Blob([finalizedCsv]);\r\n\r\n download('text/csv;charset=utf-8', blob, sanitizedTitle);\r\n};\r\n\r\n// Download NCDM data based off of the user's NCDM selections.\r\n// Note this may be a single year or all years for that selection and this only appears on the More Data page.\r\nexport const downloadNcdm = (topicNcdms, ncdmSelections, ncdmContent) => {\r\n const { csvData } = formatDownload(topicNcdms, ncdmSelections, ncdmContent);\r\n downloadCsv(csvData, ncdmSelections, topicNcdms);\r\n};\r\n\r\n// Download all NCDMs for a given topic as a zip file. Note: not based off of the user's NCDM selections and can happen on any topic page.\r\nexport async function downloadAllTopicNcdms(topicNcdms) {\r\n const topic = window.location.pathname.split('/')[2];\r\n\r\n const json = await fetchAllNcdms(topic);\r\n if (json) {\r\n const filesToZip = [];\r\n // Create an array of unique indicators\r\n const indicators = Array.from(new Set(json.map((x) => x.indicator)));\r\n\r\n indicators.forEach((indicator) => {\r\n const measures = json.filter((x) => x.indicator === indicator);\r\n measures.forEach(({ measure, data }) => {\r\n filesToZip.push(\r\n formatDownload(\r\n topicNcdms,\r\n {\r\n indicator,\r\n measure,\r\n year: '0', // 0 indicates all years\r\n },\r\n data\r\n )\r\n );\r\n });\r\n });\r\n\r\n downloadZip(filesToZip, topic);\r\n } else {\r\n console.error(`Error fetching all topic data.`);\r\n }\r\n}\r\n\r\n// Fetch all NCDMs for a topic\r\nasync function fetchAllNcdms(topic) {\r\n const { topicTitle } = topics[topic];\r\n try {\r\n const response = await fetch(\r\n `${config.getAllNcdmDataEndpoint}?topic=${topicTitle}`\r\n );\r\n\r\n if (response.ok) {\r\n const json = await response.json();\r\n return json;\r\n }\r\n\r\n // Throw error if response not ok\r\n throw Error(\r\n `Fetch error status: ${response.status}; statusText: ${response.statusText}`\r\n );\r\n } catch (err) {\r\n throw Error('Error fetching all NCDMs');\r\n }\r\n}\r\n\r\n// Format the tabular data for csv\r\nexport const formatDownload = (topicNcdms, ncdmSelections, ncdmContent) => {\r\n // ncdmSelections for a single download will reflect what has been selected in the UI\r\n // For Download All ncdmSelections reflects the current NCDM in the list to download\r\n const { columns, downloadName } = topicNcdms\r\n .find((ncdm) => ncdm.indicator === ncdmSelections.indicator)\r\n .measures.find((item) => item.measure === ncdmSelections.measure);\r\n const headers = [...columns.map((x) => x.headerName.toUpperCase())];\r\n const fields = columns.map((x) => x.field);\r\n const csvFormat = setCsvFormat(formatNcdmContent(ncdmContent));\r\n const sortedNcdmContent = sortNcdmsStatewideFirst(csvFormat);\r\n\r\n // Convert the json data to csv\r\n const data = Papa.unparse(sortedNcdmContent, {\r\n header: false,\r\n columns: fields,\r\n });\r\n\r\n // BOM = Byte Order Mark encoding. Set as the first char in the file to force Excel to use UTF-8 to avoid encoding issues.\r\n const BOM = '\\uFEFF';\r\n const reportDateTime = new Date().toLocaleString('en-US').split(',');\r\n\r\n // Format the csv output\r\n const csvData =\r\n `${BOM}SOURCE: Maryland Department of Health Environmental Public Health Tracking \\n\\n` +\r\n `DATE:\\n${reportDateTime[0].trim()}\\n\\n` +\r\n `TIME:\\n${reportDateTime[1].trim()}\\n\\n` +\r\n `NCDM SELECTION:\\n${sanitizeString(\r\n ncdmSelections.indicator\r\n )}: ${sanitizeString(ncdmSelections.measure)} for ${\r\n ncdmSelections.year === '0' ? 'all years' : ncdmSelections.year\r\n }\\n\\n` +\r\n `RESULTS TABLE:\\n${headers}\\n${data}`;\r\n\r\n return { csvData, ncdmSelections, downloadName };\r\n};\r\n\r\nconst setCsvFormat = (data) => {\r\n // Deep clone of the data and remove the id field and any commas within fields\r\n const clonedData = JSON.parse(JSON.stringify(data)).map((obj) => {\r\n delete obj.id;\r\n Object.entries(obj).map(([key, value]) => {\r\n if (value) {\r\n obj[key] = value.toString().replace(',', '');\r\n }\r\n return obj;\r\n });\r\n return obj;\r\n });\r\n\r\n return clonedData;\r\n};\r\n\r\n// Generate the zip file blob\r\nconst downloadZip = (files, topic) => {\r\n const { topicTitle } = topics[topic];\r\n const zip = new JSZip();\r\n const zipFolder = zip.folder(`EPHT-${topicTitle} All Data`);\r\n\r\n // Add the files to zip\r\n files.forEach((file) => {\r\n const { downloadName } = file;\r\n\r\n zipFolder.file(\r\n `${file.ncdmSelections.indicator}-${downloadName}.csv`,\r\n file.csvData\r\n );\r\n });\r\n\r\n zip.generateAsync({ type: 'blob' }).then((blob) => {\r\n download('application/zip', blob, topicTitle);\r\n });\r\n};\r\n\r\n// Generate the csv file blob for single file download\r\nconst downloadCsv = (data, ncdmSelections, topicNcdms) => {\r\n const { downloadName } = topicNcdms\r\n .find((ncdm) => ncdm.indicator === ncdmSelections.indicator)\r\n .measures.find((item) => item.measure === ncdmSelections.measure);\r\n const name = `${ncdmSelections.indicator}-${downloadName}`;\r\n\r\n const blob = new Blob([data]);\r\n download('text/csv;charset=utf-8', blob, name);\r\n};\r\n\r\n// Initiate download of file\r\nconst download = (type, blob, name) => {\r\n const a = window.document.createElement('a');\r\n a.href = window.URL.createObjectURL(blob, {\r\n type,\r\n });\r\n a.download =\r\n type === 'application/zip' ? `EPHT ${name}.zip` : `EPHT ${name}.csv`;\r\n\r\n // Windows has filepath length limits which we may likely exceed if the filename exceeds 150 characters\r\n if (a.download.length > 150) {\r\n console.warn('Filename length exceeds recommended length');\r\n }\r\n\r\n document.body.appendChild(a);\r\n a.click();\r\n document.body.removeChild(a);\r\n};\r\n\r\n// Sort NCDMs alphabetically by jurisdiction with statewide first and by year ascending within a jurisdiction.\r\nexport const sortNcdmsStatewideFirst = (ncdmContent) => {\r\n // Need to copy the array before sorting since arrays are frozen in strict mode\r\n const sorted = [...ncdmContent].sort((a, b) => {\r\n if (a.jurisdiction !== 'Statewide' && b.jurisdiction === 'Statewide') {\r\n return 1;\r\n }\r\n if (a.jurisdiction === 'Statewide' && b.jurisdiction !== 'Statewide') {\r\n return -1;\r\n }\r\n if (a.jurisdiction === b.jurisdiction) {\r\n return a.yearsend - b.yearsend;\r\n }\r\n\r\n return a.jurisdiction > b.jurisdiction ? 1 : -1;\r\n });\r\n return sorted;\r\n};\r\n\r\n// Format NCDM data to replace -999 and -777 with missing and suppressed text and format numbers\r\nexport const formatNcdmContent = (ncdmContent) => {\r\n const formattedContent = ncdmContent.map((entry) => {\r\n Object.entries(entry).map(([key, value]) => {\r\n if (value === config.missing) {\r\n entry[key] = config.missingText;\r\n } else if (value === config.suppressed) {\r\n entry[key] = config.suppressedText;\r\n } else if (key !== 'yearsend' && typeof value === 'number') {\r\n entry[key] = value.toLocaleString();\r\n }\r\n return entry;\r\n });\r\n return entry;\r\n });\r\n return formattedContent;\r\n};\r\n","// Modules:\r\nimport React from 'react';\r\n\r\n// Style:\r\nimport { GridFooter } from '@mui/x-data-grid-pro';\r\nimport Typography from '@mui/material/Typography';\r\nimport InfoOutlinedIcon from '@mui/icons-material/InfoOutlined';\r\n\r\nfunction CustomDataGridProFooter({ setMissingSuppressedModalOpen }) {\r\n return (\r\n
\r\n setMissingSuppressedModalOpen(true)}\r\n onKeyDown={(e) => {\r\n if (e.key === 'Enter') {\r\n e.preventDefault();\r\n setMissingSuppressedModalOpen(true);\r\n }\r\n }}\r\n role=\"button\"\r\n tabIndex={0}\r\n >\r\n

*Missing or suppressed data?

\r\n \r\n \r\n \r\n
\r\n \r\n \r\n );\r\n}\r\n\r\nexport default CustomDataGridProFooter;\r\n","// Modules:\r\nimport React, { useState } from 'react';\r\n\r\n// Style:\r\nimport AppBar from '@mui/material/AppBar';\r\nimport {\r\n DataGridPro,\r\n GridToolbarContainer,\r\n GridToolbarColumnsButton,\r\n useGridApiRef,\r\n GridToolbarFilterButton,\r\n} from '@mui/x-data-grid-pro';\r\nimport Tab from '@mui/material/Tab';\r\nimport Tabs from '@mui/material/Tabs';\r\nimport Accordion from '@mui/material/Accordion';\r\nimport AccordionDetails from '@mui/material/AccordionDetails';\r\nimport AccordionSummary from '@mui/material/AccordionSummary';\r\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\r\nimport Typography from '@mui/material/Typography';\r\nimport Button from '@mui/material/Button';\r\nimport PlayForWorkIcon from '@mui/icons-material/PlayForWork';\r\n\r\n// Styles\r\nimport muiTheme from 'theme';\r\n\r\n// Config\r\nimport config from 'config/config';\r\nimport { formatRows } from 'utilities/utils';\r\nimport { exportAsCsv } from '../../utilities/ncdmUtils';\r\n\r\n// Components:\r\nimport CustomDataGridProFooter from '../UI/CustomDataGridProFooter';\r\n\r\n// Styles:\r\nconst styles = {\r\n '&.MuiAccordionDetails-root': {\r\n flexDirection: 'column',\r\n padding: 0,\r\n },\r\n '&.MuiDataGrid-root': {\r\n fontSize: '0.8rem',\r\n },\r\n '&.MuiAppBar-root': {\r\n backgroundColor: muiTheme.palette.darkGray.main,\r\n },\r\n '&.MuiTab-root': {\r\n maxWidth: '350px',\r\n padding: '0.688rem',\r\n },\r\n '&.Mui-selected': {\r\n color: 'white',\r\n },\r\n '&.MuiTypography-root': {\r\n fontSize: '1em',\r\n color: muiTheme.palette.text.secondary,\r\n marginRight: '0.625rem',\r\n },\r\n '&.MuiButton-root': {\r\n color: 'black',\r\n },\r\n};\r\n\r\n// Add accessibility content\r\nfunction a11yProps(index) {\r\n return {\r\n id: `table-tab-${index}`,\r\n 'aria-controls': `table-tabpanel-${index}`,\r\n };\r\n}\r\n\r\nconst CustomToolbar = ({\r\n apiRef,\r\n currentTab,\r\n selection,\r\n columnHeaders,\r\n selectedLayerSet,\r\n}) => {\r\n // Methods:\r\n const handleClick = () => {\r\n const uiCsv = apiRef.current.getDataAsCsv();\r\n\r\n // Building string for year data. Only applicable to maps (charts are trends over time)\r\n let yearDetails;\r\n if (currentTab.contentType === 'map') {\r\n const layersWithYearData = selectedLayerSet.setLayers.filter(\r\n (layer) => layer.layerYear\r\n );\r\n yearDetails = layersWithYearData\r\n .map((layer) => `${layer.title} (${layer.layerYear})`)\r\n .join(' and ');\r\n }\r\n\r\n const title = `${currentTab.exportTitle}${\r\n selection ? ` - ${selection}` : ''\r\n }`;\r\n\r\n exportAsCsv({\r\n uiCsv,\r\n title,\r\n subtitle: currentTab.exportSubtitle,\r\n yearDetails,\r\n columnHeaders,\r\n });\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\n// Set the tabs panel XGrid contents\r\nfunction TabPanel({\r\n counties,\r\n tabNumber,\r\n layer,\r\n index,\r\n loading,\r\n mapRef,\r\n tableData,\r\n currentTab,\r\n formatColumns,\r\n selectedLayerSet,\r\n setMissingSuppressedModalOpen,\r\n stratification,\r\n}) {\r\n // State\r\n const [highlightedPolygon, setHighlightedPolygon] = useState(null);\r\n\r\n // Hooks:\r\n const apiRef = useGridApiRef();\r\n\r\n const handleClick = (e) => {\r\n // Use the layer info to determine what type of geography is displayed and what field name we need to filter with\r\n const geography =\r\n tableData[0].info.id.split('-')[0] === 'county'\r\n ? 'County'\r\n : 'TractName';\r\n\r\n // Clear highlighting if there is a previously selection layer and reset to original styling\r\n if (highlightedPolygon) {\r\n const { color, weight, opacity } = highlightedPolygon;\r\n highlightedPolygon.selection.setStyle({ color, weight, opacity });\r\n }\r\n\r\n // Find selection from map that matches the clicked row\r\n // eslint-disable-next-line no-underscore-dangle\r\n const layers = Object.values(mapRef.current._layers);\r\n\r\n if (layers) {\r\n const [selection] = layers\r\n .filter((allLayers) => allLayers.feature)\r\n .filter(\r\n (featureLayer) =>\r\n featureLayer.feature.geometry.type !== 'Point'\r\n )\r\n .filter(\r\n geography === 'County'\r\n ? (polygonFeature) =>\r\n polygonFeature.feature.properties[geography] ===\r\n e.row[geography]\r\n : (polygonFeature) =>\r\n polygonFeature.feature.properties.TractCode ===\r\n e.row.TractCode\r\n );\r\n\r\n if (selection) {\r\n // Copy the selection into state for later reference when reverting styles\r\n const { color, weight, opacity } = selection.options;\r\n // Set state\r\n setHighlightedPolygon({ color, weight, opacity, selection });\r\n\r\n // Check if the current selection matches the previous selection\r\n if (\r\n highlightedPolygon &&\r\n highlightedPolygon.selection.feature.properties[\r\n geography\r\n ] === selection.feature.properties[geography]\r\n ) {\r\n // Set state. If here we are deselecting the area\r\n setHighlightedPolygon(null);\r\n } else {\r\n // If here we are highlighting a new selection\r\n selection.setStyle({\r\n color: muiTheme.palette.mapHighlight.main,\r\n weight: 5,\r\n });\r\n }\r\n }\r\n }\r\n };\r\n\r\n const determineSelection = () => {\r\n const { selection } = tableData[0];\r\n if (!selection) {\r\n return null;\r\n }\r\n\r\n let selectionName;\r\n if (counties.length) {\r\n // This ternary is to account for selections that relate to years instead of counties.\r\n // This supplies the selection to the .csv export title:\r\n selectionName = counties.find((county) => county.code === selection)\r\n ? counties.find((county) => county.code === selection).county\r\n : selection;\r\n }\r\n return selectionName;\r\n };\r\n\r\n return (\r\n tabNumber === index && (\r\n
\r\n handleClick(e) : null}\r\n components={{\r\n Toolbar: CustomToolbar,\r\n Footer: CustomDataGridProFooter,\r\n }}\r\n componentsProps={{\r\n footer: { setMissingSuppressedModalOpen },\r\n toolbar: {\r\n apiRef,\r\n currentTab,\r\n columnHeaders: layer.info.columnHeaders,\r\n selection: determineSelection(),\r\n selectedLayerSet,\r\n },\r\n }}\r\n // Note: the following forces the \"tabIndex\" property of the cells to remain \"-1\" which disables the focus event from occuring. An undesired focus caused the page to jump from map to table when entries were filtered from the table by extent. Leaving the \"tabIndex\" attribute on each cell at -1 allows them to be keyboard selectable (complying with 508/ADA) but still non-focusable.\r\n state={{\r\n keyboard: {\r\n cell: null,\r\n },\r\n }}\r\n />\r\n
\r\n )\r\n );\r\n}\r\n\r\nconst AttributeTable = ({\r\n topic,\r\n counties,\r\n tableData,\r\n isLoading,\r\n mapRef,\r\n currentTab,\r\n formatColumns,\r\n selectedLayerSet,\r\n setMissingSuppressedModalOpen,\r\n stratification,\r\n}) => {\r\n // // State // //\r\n const [tabNumber, setTabNumber] = useState(0);\r\n const [expanded, setExpanded] = useState('tableData');\r\n\r\n // // Methods // //\r\n const handleChange = (panel) => (event, isExpanded) => {\r\n setExpanded(isExpanded ? panel : false);\r\n };\r\n\r\n const handleTabChange = (event, newValue) => {\r\n setTabNumber(newValue);\r\n };\r\n\r\n // // Render // //\r\n return (\r\n <>\r\n {currentTab.contentType === 'table' ? (\r\n tableData.map((layer, index) => (\r\n \r\n ))\r\n ) : (\r\n \r\n
\r\n }\r\n aria-controls=\"tableData-content\"\r\n id=\"tableData-header\"\r\n >\r\n \r\n {expanded ? 'Show less' : 'Show more'}\r\n \r\n \r\n
\r\n \r\n \r\n \r\n {tableData.map((layer, index) => (\r\n \r\n ))}\r\n \r\n \r\n {tableData.map((layer, index) => (\r\n \r\n ))}\r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default AttributeTable;\r\n","// Modules:\r\nimport React, { useState, useEffect } from 'react';\r\n\r\n// Style:\r\nimport Grid from '@mui/material/Grid';\r\nimport Typography from '@mui/material/Typography';\r\n\r\n// Utils:\r\nimport { handleFetchError, formatColumns } from 'utilities/utils';\r\nimport { sortNcdmsStatewideFirst } from 'utilities/ncdmUtils';\r\nimport { useErrorHandler } from 'react-error-boundary';\r\n\r\n// Components:\r\nimport AttributeTable from './AttributeTable';\r\n\r\nconst styles = {\r\n '&.MuiTypography-root': {\r\n fontSize: '1em',\r\n color: 'black',\r\n marginRight: '0.625rem',\r\n },\r\n};\r\n\r\nconst TableContent = ({\r\n currentTab,\r\n topic,\r\n setMissingSuppressedModalOpen,\r\n stratification,\r\n}) => {\r\n // // State // //\r\n const [data, setData] = useState([]);\r\n\r\n // // Hooks // //\r\n const handleError = useErrorHandler();\r\n\r\n // // Effects // //\r\n useEffect(() => {\r\n // Set table layers when this component mounts\r\n fetch(currentTab.url)\r\n .then(handleFetchError)\r\n .then((res) => res.json())\r\n .then((json) => {\r\n const { tableTitle, info } = currentTab;\r\n\r\n const { id, title, subtitle } = info;\r\n const layerInfo = {\r\n title,\r\n subtitle,\r\n };\r\n\r\n const columnHeaders = [...currentTab.columnHeaders];\r\n\r\n const tableTitleAndSubtitle = { ...layerInfo };\r\n\r\n const sortedJson = sortNcdmsStatewideFirst(json);\r\n\r\n const formattedTableData = {\r\n ...tableTitleAndSubtitle,\r\n id,\r\n info: {\r\n title,\r\n columnHeaders,\r\n tableTitle,\r\n },\r\n features: sortedJson,\r\n };\r\n\r\n setData([formattedTableData]);\r\n })\r\n .catch(handleError);\r\n }, [currentTab.url, setData, handleError, currentTab]);\r\n\r\n return data ? (\r\n <>\r\n
\r\n {currentTab.tableTitle}\r\n {currentTab?.tableSubtitle}\r\n
\r\n \r\n \r\n \r\n \r\n ) : null;\r\n};\r\n\r\nexport default TableContent;\r\n","// Modules\r\nimport React from 'react';\r\nimport { sortNcdmsStatewideFirst } from 'utilities/ncdmUtils';\r\nimport { useErrorHandler } from 'react-error-boundary';\r\nimport { handleFetchError } from 'utilities/utils';\r\n\r\nimport Grid from '@mui/material/Grid';\r\nimport Typography from '@mui/material/Typography';\r\nimport Select from '@mui/material/Select';\r\nimport FormControl from '@mui/material/FormControl';\r\nimport InputLabel from '@mui/material/InputLabel';\r\nimport MenuItem from '@mui/material/MenuItem';\r\nimport PlayForWorkIcon from '@mui/icons-material/PlayForWork';\r\nimport Button from '@mui/material/Button';\r\nimport {\r\n DataGridPro,\r\n GridToolbarContainer,\r\n GridToolbarColumnsButton,\r\n GridToolbarFilterButton,\r\n useGridApiRef,\r\n} from '@mui/x-data-grid-pro';\r\n\r\n// Config:\r\nimport config from 'config/config';\r\nimport { exportAsCsv } from '../../utilities/ncdmUtils';\r\n\r\n// Components:\r\nimport CustomDataGridProFooter from '../UI/CustomDataGridProFooter';\r\n\r\n// Styles:\r\nconst styles = {\r\n '&.MuiGrid-root': {\r\n paddingBottom: '1rem',\r\n },\r\n '&.MuiDataGrid-root': {\r\n fontSize: '0.8rem',\r\n },\r\n '&.MuiDataGridPro-footerContainer': {\r\n borderTop: 'none',\r\n },\r\n '&.MuiTypography-body1': {\r\n margin: 1,\r\n },\r\n '&.MuiFormControl-root': {\r\n margin: 1,\r\n minWidth: 300,\r\n },\r\n '&.MuiTypography-subtitle2': {\r\n margin: '0 1rem',\r\n width: '95%',\r\n },\r\n '&.MuiButton-root': {\r\n color: 'black',\r\n },\r\n};\r\n\r\nconst CustomToolbar = ({ apiRef, ncdmSelections, columnHeaders }) => {\r\n // Methods:\r\n const handleClick = () => {\r\n const uiCsv = apiRef.current.getDataAsCsv();\r\n\r\n const year =\r\n ncdmSelections.year === '0' ? 'All years' : ncdmSelections.year;\r\n\r\n const title = `${ncdmSelections.indicator} (${year})`;\r\n\r\n exportAsCsv({\r\n uiCsv,\r\n title,\r\n subtitle: ncdmSelections.measure,\r\n columnHeaders,\r\n });\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {' '}\r\n \r\n EXPORT\r\n \r\n \r\n );\r\n};\r\n\r\n// Main export component:\r\n\r\nconst NCDMContent = ({\r\n currentTab,\r\n ncdmContent,\r\n setNCDMContent,\r\n ncdmSelections,\r\n topicNcdms,\r\n topicDataYears,\r\n setNCDMSelections,\r\n formatColumns,\r\n setMissingSuppressedModalOpen,\r\n}) => {\r\n // Hooks:\r\n const handleError = useErrorHandler();\r\n const apiRef = useGridApiRef();\r\n\r\n // Methods:\r\n const fetchContent = (year) => {\r\n const apiNcdmDataEndpoint = `${config.getNcdmDataEndpoint}?id=${ncdmSelections.id}&year=${year}`;\r\n fetch(apiNcdmDataEndpoint)\r\n .then(handleFetchError)\r\n .then((res) => res.json())\r\n .then((json) => {\r\n const { data } = json[0];\r\n setNCDMContent(data);\r\n })\r\n .catch(handleError);\r\n };\r\n\r\n const indicators = topicNcdms.map((ncdm) => ncdm.indicator);\r\n const currentIndicator = topicNcdms.find(\r\n (ncdm) => ncdm.indicator === ncdmSelections.indicator\r\n );\r\n const currentMeasure = currentIndicator\r\n ? currentIndicator.measures.find(\r\n (measure) => measure.measure === ncdmSelections.measure\r\n )\r\n : null;\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n {currentTab.textBody}\r\n \r\n \r\n \r\n \r\n Select an indicator, measure, and year to view\r\n Nationally Consistent Data and Measures (NCDM) for this\r\n topic:\r\n \r\n \r\n \r\n \r\n \r\n Indicator\r\n \r\n {\r\n setNCDMContent(null);\r\n setNCDMSelections({\r\n indicator: e.target.value,\r\n });\r\n }}\r\n label=\"Indicator\"\r\n inputProps={{\r\n name: 'indicator',\r\n id: 'ncdm-select-indicator',\r\n }}\r\n >\r\n \r\n ))}\r\n \r\n \r\n \r\n {ncdmSelections.indicator ? (\r\n \r\n \r\n \r\n Measure\r\n \r\n {\r\n setNCDMContent(null);\r\n setNCDMSelections({\r\n indicator: ncdmSelections.indicator,\r\n measure: e.target.value,\r\n id: props.props['data-id'],\r\n });\r\n }}\r\n label=\"Measure\"\r\n inputProps={{\r\n name: 'measure',\r\n id: 'ncdm-select-measure',\r\n }}\r\n >\r\n \r\n\r\n {topicNcdms\r\n .find(\r\n (indicator) =>\r\n indicator.indicator ===\r\n ncdmSelections.indicator\r\n )\r\n .measures.map((measure) => (\r\n \r\n {measure.measure}\r\n \r\n ))}\r\n \r\n \r\n \r\n ) : null}\r\n {ncdmSelections.measure ? (\r\n \r\n \r\n \r\n Year\r\n \r\n {\r\n // Check if attempting to fetch an empty string and return\r\n if (e.target.value === '') {\r\n return;\r\n }\r\n fetchContent(e.target.value);\r\n setNCDMSelections((prevSelections) => ({\r\n ...prevSelections,\r\n year: e.target.value,\r\n }));\r\n }}\r\n sx={styles}\r\n label=\"Year\"\r\n inputProps={{\r\n name: 'year',\r\n id: 'ncdm-select-year',\r\n }}\r\n >\r\n {/* Only showing an empty option if no selection is made. After a selection is made, there will be no ability to select an empty option */}\r\n {ncdmContent ? null : (\r\n \r\n )}\r\n\r\n \r\n {!currentMeasure.noYears\r\n ? topicDataYears.map((year) => (\r\n \r\n ))\r\n : null}\r\n \r\n \r\n \r\n ) : null}\r\n \r\n \r\n {ncdmContent && (\r\n \r\n \r\n {`${ncdmSelections.indicator}: ${\r\n ncdmSelections.measure\r\n } for ${\r\n ncdmSelections.year === '0'\r\n ? ' all years'\r\n : ncdmSelections.year\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\nexport default NCDMContent;\r\n","import React, { useState, useRef, useEffect } from 'react';\r\nimport { Pie, Bar } from 'react-chartjs-2';\r\nimport config from 'config/config';\r\nimport { useErrorHandler } from 'react-error-boundary';\r\nimport {\r\n handleFetchError,\r\n formatAttributesWithCommas,\r\n determineChartSteps,\r\n} from 'utilities/utils';\r\n\r\n// Mui:\r\nimport Button from '@mui/material/Button';\r\nimport InfoOutlinedIcon from '@mui/icons-material/InfoOutlined';\r\n\r\n// Styles:\r\nimport muiTheme from '../../theme';\r\n\r\nconst labels = [\r\n 'White NH',\r\n 'Black NH',\r\n 'Asian NH',\r\n 'Hispanic',\r\n 'Other NH',\r\n 'Two or more NH',\r\n];\r\n\r\nconst CommunityProfile = ({\r\n currentTopic,\r\n currentTab,\r\n mapDemographicContent,\r\n chartDemographicContent,\r\n setChartInfoModalOpen,\r\n}) => {\r\n // Refs:\r\n const pieRef = useRef();\r\n const barRef = useRef();\r\n\r\n // State:\r\n const [raceData, setRaceData] = useState({});\r\n const [ageData, setAgeData] = useState({});\r\n const [acsLink, setAcsLink] = useState('');\r\n const [state, setState] = useState({\r\n // Jurisdiction codes:\r\n MDCode: '',\r\n GEOID: '',\r\n Geotype: '',\r\n // General population variables:\r\n EstTotalPopFormat: '',\r\n // Age variables:\r\n EstFemaleTotalPopFormat: '',\r\n CalcPctFemaleTotalPop: '',\r\n EstMaleTotalPopFormat: '',\r\n CalcPctMaleTotalPop: '',\r\n CalcFemale0to19: '',\r\n CalcFemale20to44: '',\r\n CalcFemale45to64: '',\r\n CalcFemale65Plus: '',\r\n CalcMale0to19: '',\r\n CalcMale20to44: '',\r\n CalcMale45to64: '',\r\n CalcMale65Plus: '',\r\n // Race variables:\r\n CalcWhitePct: '',\r\n CalcBlackPct: '',\r\n CalcAsianPct: '',\r\n CalcHLPct: '',\r\n CalcOtherRacePct: '',\r\n CalcTwoOrMorePct: '',\r\n // Economic variables:\r\n EstHouseholdMedianIncomeFormat: '',\r\n EstPopBelowFedPovertyLvlFormat: '',\r\n CalcPopBelowFedPovertyLvlPct: '',\r\n EstEdAttain25PlusHSHigherFormat: '',\r\n CalcPctEdAttain25PlusHSorHigher: '',\r\n EstUnempRateTotalPop16Plus: '',\r\n });\r\n\r\n // Hooks:\r\n const handleError = useErrorHandler();\r\n\r\n // Effects:\r\n\r\n useEffect(() => {\r\n // These 'popups' contain the same data but are seperated as two different variables to establish if we are viewing the demographic data within a chart or a map.\r\n // Having two seperate types avoids stale popup content evaluating to truthy when jumping from a chart to a map which causes a double fire of the effect.\r\n const popupVersion = chartDemographicContent || mapDemographicContent;\r\n\r\n // Resets demo profile to show statewide info when changing over from selectable chart with county selected, to non-selectable, statewide data only chart.\r\n if (currentTab?.contentType === 'chart' && !currentTab.selectable) {\r\n popupVersion.properties.MDCode = '000';\r\n }\r\n\r\n // Determine if viewing tract:\r\n const tract = popupVersion.properties.TractCode;\r\n\r\n // If MDCode is '000' it means it is statewide data, so we need to change our endpoint accordingly.\r\n const urlConfigure =\r\n popupVersion.properties.MDCode === '000'\r\n ? config.statewideACSEndpoint\r\n : config.countyACSEndpoint;\r\n\r\n // Currently, only cancers utilize census tract data from 2019. TODO: Reconfigure upon receipt of new cancer data.\r\n const tractConfigure = currentTopic.topicPath.startsWith('cancer')\r\n ? config.tractACSEndpoint2019\r\n : config.tractACSEndpoint2021;\r\n\r\n // Use appropriate endpoint and parameter value for tract / county view\r\n const endpoint = tract\r\n ? `${tractConfigure}%27${tract}%27`\r\n : `${urlConfigure}%27${popupVersion.properties.MDCode}%27`;\r\n\r\n fetch(endpoint)\r\n .then(handleFetchError)\r\n .then((res) => res.json())\r\n .then((json) => {\r\n // Extracting the following nested variables with a fallback at each level to ensure a TypeError is not thrown.\r\n // Destructure will expect either an array or an object -- if destructuring results in an `undefined` at any point, will fallback on the expected type.\r\n const { features } = json || {};\r\n const [feature] = features || [];\r\n let { attributes } = feature || {};\r\n\r\n // Certain fields need to include commas when displayed in the demographic profile:\r\n attributes = formatAttributesWithCommas(attributes);\r\n\r\n const {\r\n // Jurisdiction codes:\r\n MDCode,\r\n GEOID,\r\n Geotype,\r\n // Age variables:\r\n CalcFemale0to19,\r\n CalcFemale20to44,\r\n CalcFemale45to64,\r\n CalcFemale65Plus,\r\n CalcMale0to19,\r\n CalcMale20to44,\r\n CalcMale45to64,\r\n CalcMale65Plus,\r\n // Race variables:\r\n CalcWhitePct,\r\n CalcBlackPct,\r\n CalcAsianPct,\r\n CalcHLPct,\r\n CalcOtherRacePct,\r\n CalcTwoOrMorePct,\r\n } = attributes || {};\r\n\r\n setState((prevState) => ({ ...prevState, ...attributes }));\r\n\r\n // Note: the following categories MUST remain in this order to match with the order of the \"labels\" array defined at the top of this file\r\n const racialBreakdown = [\r\n CalcWhitePct,\r\n CalcBlackPct,\r\n CalcAsianPct,\r\n CalcHLPct,\r\n CalcOtherRacePct,\r\n CalcTwoOrMorePct,\r\n ];\r\n\r\n const customLabels = labels.map(\r\n (label, i) =>\r\n `${label} - ${parseFloat(racialBreakdown[i]).toFixed(\r\n 1\r\n )}%`\r\n );\r\n\r\n const raceChartData = {\r\n maintainAspectRatio: false,\r\n responsive: true,\r\n labels: customLabels,\r\n datasets: [\r\n {\r\n label: `${popupVersion.properties.County} Demographics`,\r\n\r\n data: racialBreakdown.map((datum) =>\r\n parseFloat(datum).toFixed(1)\r\n ),\r\n backgroundColor: muiTheme.piePalette.default,\r\n hoverBackgroundColor: muiTheme.piePalette.hover,\r\n },\r\n ],\r\n };\r\n\r\n setRaceData(raceChartData);\r\n\r\n const ageChartData = {\r\n labels: ['Male', 'Female'],\r\n datasets: [\r\n {\r\n label: '0-19',\r\n data: [\r\n parseFloat(CalcMale0to19).toFixed(),\r\n parseFloat(CalcFemale0to19).toFixed(),\r\n ],\r\n },\r\n {\r\n label: '20-44',\r\n data: [\r\n parseFloat(CalcMale20to44).toFixed(),\r\n parseFloat(CalcFemale20to44).toFixed(),\r\n ],\r\n },\r\n {\r\n label: '45-64',\r\n data: [\r\n parseFloat(CalcMale45to64).toFixed(),\r\n parseFloat(CalcFemale45to64).toFixed(),\r\n ],\r\n },\r\n {\r\n label: '65+',\r\n data: [\r\n parseFloat(CalcMale65Plus).toFixed(),\r\n parseFloat(CalcFemale65Plus).toFixed(),\r\n ],\r\n },\r\n ],\r\n };\r\n\r\n ageChartData.datasets.forEach((dataset, index) => {\r\n dataset.backgroundColor =\r\n muiTheme.stackedBarsPalette.default[index];\r\n dataset.hoverBackgroundColor =\r\n muiTheme.stackedBarsPalette.hover[index];\r\n });\r\n setAgeData(ageChartData);\r\n\r\n // Create ACS external link\r\n let currentLink = `https://www.census.gov/acs/www/data/data-tables-and-tools/narrative-profiles/${\r\n /* Set year for ACS external link. Cancer counties should use 2021; Cancer census tracts should use 2019;\r\n Everything else should use 2021. TODO: remove this logic once cancer data is updated */\r\n // eslint-disable-next-line no-nested-ternary\r\n Geotype === 'county'\r\n ? '2021'\r\n : currentTopic.topicPath.startsWith('cancer')\r\n ? '2019'\r\n : '2021'\r\n }/report.php?geotype=${Geotype}&state=24&county=${MDCode}${\r\n Geotype === 'tract' ? `&tract=${GEOID?.slice(-6)}` : ''\r\n }`;\r\n\r\n // The link for statewide data has fixed unique paramters (geotype=state&state=24).\r\n // Overwriting the constructed 'currentLink' if viewing statewide data, indicated by MDCode 000.\r\n currentLink =\r\n popupVersion.properties.MDCode === '000'\r\n ? 'https://www.census.gov/acs/www/data/data-tables-and-tools/narrative-profiles/2021/report.php?geotype=state&state=24'\r\n : currentLink;\r\n\r\n setAcsLink(currentLink);\r\n })\r\n .catch(handleError);\r\n }, [\r\n handleError,\r\n mapDemographicContent,\r\n chartDemographicContent,\r\n currentTopic.topicPath,\r\n currentTab,\r\n ]);\r\n\r\n return (\r\n \r\n
\r\n {`${state.FullCounty} Demographic Profile`}\r\n {state.Geotype === 'tract' ? ` - ${state.TractName}` : ''}\r\n
\r\n \r\n \r\n {`Source: Census Bureau American Community Survey (ACS)\r\n ${\r\n /* Only cancers use the 2015-2019 data for census tracts; counties use 2017-2021. \r\n Trend line charts make use of 'state' as the Geotype for Statewide. All other topics \r\n only use 2017-2021 TODO: reconfigure to remove this logic once we get new cancer data \r\n */\r\n !currentTopic.topicPath.startsWith('cancer') ||\r\n state.Geotype === 'county' ||\r\n state.Geotype === 'state'\r\n ? '2017-2021'\r\n : '2015-2019'\r\n }`}\r\n \r\n
\r\n setChartInfoModalOpen(true)}\r\n >\r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n
Total Population
\r\n
\r\n {state.EstTotalPopFormat}\r\n
\r\n
\r\n
\r\n
Female
\r\n
\r\n {state.EstFemaleTotalPopFormat} (\r\n {state.CalcPctFemaleTotalPop})\r\n
\r\n
\r\n
\r\n
Male
\r\n
\r\n {state.EstMaleTotalPopFormat} (\r\n {state.CalcPctMaleTotalPop})\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {Object.keys(ageData).length ? (\r\n {\r\n // Percent values (not available from chart.js event)\r\n // (Ordered at top level male then female to match chart.js index order, then ordered least to greatest by age to match chart.js dataset index order)\r\n const ageSexValues = [\r\n [\r\n state.CalcPctMale0to19,\r\n state.CalcPctMale20to44,\r\n state.CalcPctMale45to64,\r\n state.CalcPctMale65Plus,\r\n ],\r\n [\r\n state.CalcPctFemale0to19,\r\n state.CalcPctFemale20to44,\r\n state.CalcPctFemale45to64,\r\n state.CalcPctFemale65Plus,\r\n ],\r\n ];\r\n // Find current count value, then append corresponding percent value\r\n const value =\r\n dataset.data[\r\n dataIndex\r\n ];\r\n const {\r\n label,\r\n } = dataset;\r\n const percentValue =\r\n ageSexValues[\r\n dataIndex\r\n ][datasetIndex];\r\n return `${label} yrs: ${Number(\r\n value\r\n ).toLocaleString()} (${percentValue})`;\r\n },\r\n },\r\n },\r\n },\r\n layout: {\r\n padding: {\r\n top: 17,\r\n },\r\n },\r\n\r\n maintainAspectRatio: false,\r\n\r\n scales: {\r\n x: {\r\n stacked: true,\r\n title: {\r\n display: true,\r\n text: 'Population',\r\n padding: 0,\r\n font: {\r\n weight: 'bold',\r\n },\r\n },\r\n ticks: {\r\n // Custom step size for dif population sizes numbers to reduce vertical chart size compression.\r\n stepSize: (chartInfo) =>\r\n determineChartSteps(\r\n chartInfo.scale.max\r\n ),\r\n // Converts x-axis population label to thousands.\r\n callback: (value) =>\r\n Number(\r\n value\r\n ).toLocaleString(),\r\n },\r\n },\r\n y: {\r\n stacked: true,\r\n ticks: {\r\n maxTicksLimit: 5,\r\n },\r\n },\r\n },\r\n }}\r\n />\r\n ) : null}\r\n
\r\n
\r\n
\r\n {Object.keys(raceData).length ? (\r\n {\r\n const value =\r\n dataset.data[\r\n dataIndex\r\n ];\r\n return `${value}%`;\r\n },\r\n title: ([selected]) =>\r\n labels[\r\n selected.dataIndex\r\n ],\r\n },\r\n },\r\n },\r\n maintainAspectRatio: false,\r\n }}\r\n />\r\n ) : null}\r\n
\r\n
\r\n
\r\n

{`Click on chart legends to filter by category`}

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
Median Income
\r\n
\r\n {state.EstHouseholdMedianIncomeFormat}\r\n
\r\n
\r\n
\r\n
People in Poverty
\r\n
\r\n {state.EstPopBelowFedPovertyLvlFormat} (\r\n {state.CalcPopBelowFedPovertyLvlPct})\r\n
\r\n
\r\n
\r\n
\r\n Finished High School (or above)\r\n
\r\n
\r\n {state.EstEdAttain25PlusHSHigherFormat} (\r\n {state.CalcPctEdAttain25PlusHSorHigher})\r\n
\r\n
\r\n
\r\n
Unemployment Rate
\r\n
\r\n {state.EstUnempRateTotalPop16Plus}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n Discover{' '}\r\n \r\n more\r\n {' '}\r\n about this location.\r\n \r\n
\r\n \r\n );\r\n};\r\n\r\nexport default CommunityProfile;\r\n","/* eslint-disable react/no-danger */\r\nimport React from 'react';\r\nimport Button from '@mui/material/Button';\r\nimport Dialog from '@mui/material/Dialog';\r\nimport MuiDialogTitle from '@mui/material/DialogTitle';\r\nimport MuiDialogContent from '@mui/material/DialogContent';\r\nimport MuiDialogActions from '@mui/material/DialogActions';\r\nimport IconButton from '@mui/material/IconButton';\r\nimport CloseIcon from '@mui/icons-material/Close';\r\nimport Typography from '@mui/material/Typography';\r\nimport { createMarkup } from 'utilities/utils';\r\n\r\n// // Styles // //\r\nconst styles = {\r\n '&.MuiDialogTitle-root': {\r\n margin: 0,\r\n padding: '0.8em',\r\n },\r\n '&.MuiIconButton-root': {\r\n position: 'absolute',\r\n right: '0.3em',\r\n top: '0.3em',\r\n },\r\n '&.MuiDialogActions-root': {\r\n margin: 0,\r\n padding: '0.5em',\r\n },\r\n '&.MuiDialogContent-root': {\r\n padding: '1em',\r\n },\r\n};\r\n\r\nconst DialogTitle = (props) => {\r\n const { children, classes, onClose, ...other } = props;\r\n return (\r\n \r\n {children}\r\n {onClose ? (\r\n \r\n \r\n \r\n ) : null}\r\n \r\n );\r\n};\r\n\r\nconst AboutTheData = ({ aboutText }) => {\r\n const [open, setOpen] = React.useState(false);\r\n\r\n const handleClickOpen = () => {\r\n setOpen(true);\r\n };\r\n const handleClose = () => {\r\n setOpen(false);\r\n };\r\n\r\n return (\r\n
\r\n About These Data\r\n \r\n \r\n About These Data\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\nexport default AboutTheData;\r\n","/* Note: Commenting out all code relating to Download All NCDMs as we move forward with topic development.\r\n That will be refactored to handle downloading all data for a topic, not just NCDM data. */\r\n\r\n// Modules\r\nimport React from 'react';\r\n\r\n// Config\r\nimport topics from 'config/topics';\r\n\r\n// Styles\r\nimport IconButton from '@mui/material/IconButton';\r\nimport Menu from '@mui/material/Menu';\r\nimport MenuItem from '@mui/material/MenuItem';\r\nimport MoreVertIcon from '@mui/icons-material/MoreVert';\r\n\r\n// Utilities\r\nimport {\r\n printNcdm,\r\n /* Commenting out all code relating to Download All NCDMs */\r\n // downloadNcdm,\r\n // downloadAllTopicNcdms,\r\n} from 'utilities/ncdmUtils';\r\n\r\n// Components\r\nimport AboutTheData from './AboutTheData';\r\n\r\nexport default function OptionsPopup({\r\n ncdmContent,\r\n /* Commenting out all code relating to Download All NCDMs */\r\n // ncdmSelections,\r\n // topicNcdms,\r\n topic,\r\n}) {\r\n // State\r\n const [anchorEl, setAnchorEl] = React.useState(null);\r\n\r\n const handleClick = (event) => {\r\n setAnchorEl(event.currentTarget);\r\n };\r\n\r\n const handleClose = () => {\r\n setAnchorEl(null);\r\n };\r\n\r\n const handlePrint = () => {\r\n handleClose();\r\n printNcdm(ncdmContent);\r\n };\r\n\r\n /* Commenting out all code relating to Download All NCDMs */\r\n // const handleDownload = (allData = false) => {\r\n // handleClose();\r\n // if (!allData) {\r\n // downloadNcdm(topicNcdms, ncdmSelections, ncdmContent);\r\n // } else {\r\n // downloadAllTopicNcdms(topicNcdms);\r\n // }\r\n // };\r\n\r\n return (\r\n <>\r\n
\r\n \r\n \r\n \r\n \r\n Print\r\n {/* Commenting out all code relating to Download All NCDMs */}\r\n {/* {topics[topic].omitNcdmData ? null : (\r\n handleDownload(true)}>\r\n Download all NCDM data (zip)\r\n \r\n )} */}\r\n \r\n \r\n \r\n \r\n
\r\n \r\n );\r\n}\r\n","/* eslint-disable react/no-danger */\r\nimport React from 'react';\r\nimport { Link } from 'react-router-dom';\r\n\r\n// Config:\r\nimport topics from 'config/topics';\r\n\r\n// Style:\r\nimport Grid from '@mui/material/Grid';\r\nimport Button from '@mui/material/Button';\r\nimport ButtonGroup from '@mui/material/ButtonGroup';\r\nimport Typography from '@mui/material/Typography';\r\nimport Box from '@mui/material/Box';\r\nimport { createMarkup } from 'utilities/utils';\r\nimport muiTheme from '../../theme';\r\n\r\n// Components:\r\nimport OptionsPopup from '../UI/OptionsPopup';\r\n\r\nconst styles = {\r\n '&.MuiGrid-root': {\r\n padding: '0.6rem 0 1.5rem 0',\r\n flexWrap: 'wrap',\r\n },\r\n '&.MuiButton-root': {\r\n borderRight: '1px solid rgb(99, 167, 220) !important',\r\n minHeight: 'fit-content',\r\n margin: '0.5em 0',\r\n width: 'fit-content',\r\n },\r\n '&.MuiIconButton-root': {\r\n margin: 0,\r\n },\r\n '&.MuiButtonGroup-root': {\r\n margin: '0.7rem',\r\n minWidth: '45%',\r\n maxWidth: '85%',\r\n },\r\n '&.MuiButton-contained': {\r\n background: muiTheme.palette.secondary.dark,\r\n color: 'white',\r\n '&:hover': {\r\n background: muiTheme.palette.secondary.light,\r\n },\r\n },\r\n '&.MuiButton-outlined': {\r\n color: muiTheme.palette.darkGray.main,\r\n '&:hover': {\r\n background: muiTheme.palette.lightGray.main,\r\n },\r\n },\r\n '&.MuiTypography-subtitle1': {\r\n marginLeft: '0.5rem',\r\n },\r\n};\r\n\r\nconst ButtonSwitch = ({\r\n topic,\r\n theme,\r\n tab,\r\n textHeader,\r\n currentTheme,\r\n ncdmContent,\r\n ncdmSelections,\r\n topicNcdms,\r\n}) => {\r\n // // Render // //\r\n\r\n // Check to omit the buttons when on the NCDM More Data theme\r\n const isDisplayed = theme !== 'moredata';\r\n\r\n return (\r\n <>\r\n \r\n {isDisplayed ? (\r\n \r\n
\r\n {' '}\r\n {Object.keys(currentTheme.tabs).map((themeTab) => {\r\n const tabObject = currentTheme.tabs[themeTab];\r\n return (\r\n \r\n \r\n \r\n );\r\n })}\r\n
\r\n \r\n ) : (\r\n // If not displaying buttons we render the NCDM header text\r\n \r\n {textHeader}\r\n \r\n )}\r\n
\r\n \r\n
\r\n \r\n
\r\n {topics[topic].themes[theme].tabs[tab].contentTitle ? (\r\n \r\n {topics[topic].themes[theme].tabs[tab].contentTitle}\r\n \r\n ) : null}\r\n\r\n {topics[topic].themes[theme].tabs[tab].contentSubtitle ? (\r\n \r\n {topics[topic].themes[theme].tabs[tab].contentSubtitle}\r\n \r\n ) : null}\r\n
\r\n \r\n );\r\n};\r\n\r\nexport default ButtonSwitch;\r\n","/* eslint-disable react/no-danger */\r\n\r\n// Modules\r\nimport React from 'react';\r\nimport ReactGA from 'react-ga4';\r\nimport { createMarkup } from 'utilities/utils';\r\n\r\nimport Paper from '@mui/material/Paper';\r\nimport Tabs from '@mui/material/Tabs';\r\nimport Tab from '@mui/material/Tab';\r\nimport Box from '@mui/material/Box';\r\n\r\nfunction TabPanel(props) {\r\n const { children, value, index, ...other } = props;\r\n\r\n return (\r\n