From 24bac56d9e21e4d7ea3251f5662beaeb3850cb3d Mon Sep 17 00:00:00 2001 From: Vim <86254807+vim-usds@users.noreply.github.com> Date: Thu, 9 Dec 2021 13:42:37 -0500 Subject: [PATCH] Methodology page update for Score L (#1010) * Add first column of Methodology score L - create a new component MethodologyFormula (MF) - MF component contain text on formula calculation - add snapshots * Add 2nd column to Methodology page - add LowIncome component - add USWDS styles on download component - add margin-top styles to global - enable all font-sizes to theme file * Add Categories to Methodology page - create CategoryCard component - create Categories component - add snapshots * Update datasets - update styling to match mock - add additional indicators - remove additional indicators - update snapshots * Add links to categories to datasets - update snapshots * Remove additional indicator test as they now N/A * ensure each DOM ID is unique for a11y - update snapshots * Add Category heading for a11y - removes ScoreSteps tests - comment out ScoreStep component - update snapshots - cypress passes all a11y * Update to methodology copy - based on PDF and spreadsheet and Living Copy -updates snapshots * Add comments around using IF, AND, ELSE constants - make indicator constant names more explicit * Update copy based on living doc - update snapshots --- .../cypress/integration/DatasetLinks.feature | 5 - .../Categories/Categories.module.scss | 8 + .../Categories/Categories.module.scss.d.ts | 12 + .../components/Categories/Categories.test.tsx | 16 + .../src/components/Categories/Categories.tsx | 43 + .../__snapshots__/Categories.test.tsx.snap | 403 ++++ client/src/components/Categories/index.tsx | 3 + .../CategoryCard/CategoryCard.module.scss | 15 + .../CategoryCard.module.scss.d.ts | 12 + .../CategoryCard/CategoryCard.test.tsx | 18 + .../components/CategoryCard/CategoryCard.tsx | 32 + .../__snapshots__/CategoryCard.test.tsx.snap | 53 + client/src/components/CategoryCard/index.tsx | 3 + .../DatasetCard/datasetCard.module.scss | 3 +- client/src/components/DatasetCard/index.tsx | 27 +- .../__snapshots__/datasetCard.test.tsx.snap | 26 +- .../DatasetCard/tests/datasetCard.test.tsx | 14 +- .../DatasetContainer/dsContainer.module.scss | 9 + .../dsContainer.module.scss.d.ts | 1 + .../src/components/DatasetContainer/index.tsx | 49 +- .../datasetContainer.test.tsx.snap | 1488 +++++++----- .../DownloadPacket/downloadPacket.module.scss | 19 +- .../LowIncome/LowIncome.module.scss | 20 + .../LowIncome/LowIncome.module.scss.d.ts | 14 + .../components/LowIncome/LowIncome.test.tsx | 16 + client/src/components/LowIncome/LowIncome.tsx | 26 + .../__snapshots__/LowIncome.test.tsx.snap | 20 + client/src/components/LowIncome/index.tsx | 3 + .../MethodologyFormula.module.scss | 12 + .../MethodologyFormula.module.scss.d.ts | 12 + .../MethodologyFormula.test.tsx | 16 + .../MethodologyFormula/MethodologyFormula.tsx | 35 + .../MethodologyFormula.test.tsx.snap | 31 + .../components/MethodologyFormula/index.tsx | 3 + .../scoreStepsList.test.tsx.snap | 125 - client/src/components/scoreStepsList.test.tsx | 28 - client/src/data/copy/methodology.tsx | 1057 ++++++--- .../__snapshots__/methodology.test.tsx.snap | 2087 +++++++++++------ client/src/pages/methodology.tsx | 29 +- client/src/styles/global.scss | 11 +- .../styles/theme/_uswds-theme-typography.scss | 8 +- 41 files changed, 4008 insertions(+), 1804 deletions(-) create mode 100644 client/src/components/Categories/Categories.module.scss create mode 100644 client/src/components/Categories/Categories.module.scss.d.ts create mode 100644 client/src/components/Categories/Categories.test.tsx create mode 100644 client/src/components/Categories/Categories.tsx create mode 100644 client/src/components/Categories/__snapshots__/Categories.test.tsx.snap create mode 100644 client/src/components/Categories/index.tsx create mode 100644 client/src/components/CategoryCard/CategoryCard.module.scss create mode 100644 client/src/components/CategoryCard/CategoryCard.module.scss.d.ts create mode 100644 client/src/components/CategoryCard/CategoryCard.test.tsx create mode 100644 client/src/components/CategoryCard/CategoryCard.tsx create mode 100644 client/src/components/CategoryCard/__snapshots__/CategoryCard.test.tsx.snap create mode 100644 client/src/components/CategoryCard/index.tsx create mode 100644 client/src/components/LowIncome/LowIncome.module.scss create mode 100644 client/src/components/LowIncome/LowIncome.module.scss.d.ts create mode 100644 client/src/components/LowIncome/LowIncome.test.tsx create mode 100644 client/src/components/LowIncome/LowIncome.tsx create mode 100644 client/src/components/LowIncome/__snapshots__/LowIncome.test.tsx.snap create mode 100644 client/src/components/LowIncome/index.tsx create mode 100644 client/src/components/MethodologyFormula/MethodologyFormula.module.scss create mode 100644 client/src/components/MethodologyFormula/MethodologyFormula.module.scss.d.ts create mode 100644 client/src/components/MethodologyFormula/MethodologyFormula.test.tsx create mode 100644 client/src/components/MethodologyFormula/MethodologyFormula.tsx create mode 100644 client/src/components/MethodologyFormula/__snapshots__/MethodologyFormula.test.tsx.snap create mode 100644 client/src/components/MethodologyFormula/index.tsx delete mode 100644 client/src/components/__snapshots__/scoreStepsList.test.tsx.snap delete mode 100644 client/src/components/scoreStepsList.test.tsx diff --git a/client/cypress/integration/DatasetLinks.feature b/client/cypress/integration/DatasetLinks.feature index 67dedf0f..29fd26ce 100644 --- a/client/cypress/integration/DatasetLinks.feature +++ b/client/cypress/integration/DatasetLinks.feature @@ -4,8 +4,3 @@ Feature: All links on the dataset cards should be functional Given I am on the "Methodology" page When I look for the "Datasets used in methodology" CTA Then All links under "Datasets used in methodology" should work - - Scenario: If I click on any link in the additional indicators dataset, they should work - Given I am on the "Methodology" page - When I look for the "Additional Indicators" CTA - Then All links under "Additional Indicators" should work diff --git a/client/src/components/Categories/Categories.module.scss b/client/src/components/Categories/Categories.module.scss new file mode 100644 index 00000000..59264719 --- /dev/null +++ b/client/src/components/Categories/Categories.module.scss @@ -0,0 +1,8 @@ +@use '../../styles/design-system.scss' as *; + +.categoriesContainer { + display: flex; + justify-content: space-between; + flex-wrap: wrap; + @include u-margin-top(4); +} diff --git a/client/src/components/Categories/Categories.module.scss.d.ts b/client/src/components/Categories/Categories.module.scss.d.ts new file mode 100644 index 00000000..1e442d50 --- /dev/null +++ b/client/src/components/Categories/Categories.module.scss.d.ts @@ -0,0 +1,12 @@ +declare namespace CategoriesNamespace { + export interface ICategoriesScss { + categoriesContainer: string; + } + } + +declare const CategoriesScssModule: CategoriesNamespace.ICategoriesScss & { + /** WARNING: Only available when `css-loader` is used without `style-loader` or `mini-css-extract-plugin` */ + locals: CategoriesNamespace.ICategoriesScss; + }; + + export = CategoriesScssModule; diff --git a/client/src/components/Categories/Categories.test.tsx b/client/src/components/Categories/Categories.test.tsx new file mode 100644 index 00000000..24a00d71 --- /dev/null +++ b/client/src/components/Categories/Categories.test.tsx @@ -0,0 +1,16 @@ +import * as React from 'react'; +import {render} from '@testing-library/react'; +import {LocalizedComponent} from '../../test/testHelpers'; +import Categories from './Categories'; + +describe('rendering of the Categories', () => { + const {asFragment} = render( + + + , + ); + + it('checks if component renders', () => { + expect(asFragment()).toMatchSnapshot(); + }); +}); diff --git a/client/src/components/Categories/Categories.tsx b/client/src/components/Categories/Categories.tsx new file mode 100644 index 00000000..11620154 --- /dev/null +++ b/client/src/components/Categories/Categories.tsx @@ -0,0 +1,43 @@ +import React from 'react'; +import {Grid} from '@trussworks/react-uswds'; + +import IndicatorCategory from '../CategoryCard'; +import J40MainGridContainer from '../J40MainGridContainer'; + +import * as METHODOLOGY_COPY from '../../data/copy/methodology'; +import * as styles from './Categories.module.scss'; + +const categories = [ + METHODOLOGY_COPY.CATEGORIES.CLIMATE_CHANGE, + METHODOLOGY_COPY.CATEGORIES.CLEAN_ENERGY, + METHODOLOGY_COPY.CATEGORIES.CLEAN_TRANSPORT, + METHODOLOGY_COPY.CATEGORIES.AFFORDABLE_HOUSING, + METHODOLOGY_COPY.CATEGORIES.LEGACY_POLLUTION, + METHODOLOGY_COPY.CATEGORIES.CLEAN_WATER, + METHODOLOGY_COPY.CATEGORIES.HEALTH_BURDENS, + METHODOLOGY_COPY.CATEGORIES.WORKFORCE_DEV, +]; + +const Categories = () => { + return ( + <> + + + + +

{METHODOLOGY_COPY.CATEGORY.HEADING}

+
+
+ +
+ + + { + categories.map((category, index) => ) + } + + + ); +}; + +export default Categories; diff --git a/client/src/components/Categories/__snapshots__/Categories.test.tsx.snap b/client/src/components/Categories/__snapshots__/Categories.test.tsx.snap new file mode 100644 index 00000000..dd5a77ef --- /dev/null +++ b/client/src/components/Categories/__snapshots__/Categories.test.tsx.snap @@ -0,0 +1,403 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`rendering of the Categories checks if component renders 1`] = ` + +
+
+
+

+ Categories +

+
+
+
+
+
+

+ Climate change +

+

+ + + + IF + + at or above 90th percentile for + + expected agriculture loss rate + + OR + + expected building loss rate + + OR + + expected population loss rate + + + +

+

+ + AND + + is low income + + * + +

+

+ + THEN + + the community is disadvantaged. +

+
+
+

+ Clean energy and energy efficiency +

+

+ + + + IF + + at or above 90th percentile for + + energy cost burden score + + OR + + PM2.5 + + + +

+

+ + AND + + is low income + + * + +

+

+ + THEN + + the community is disadvantaged. +

+
+
+

+ Clean transportation +

+

+ + + + IF + + at or above 90th percentile for + + diesel particulate matter + + or + + traffic proximity and volume + + + +

+

+ + AND + + is low income + + * + +

+

+ + THEN + + the community is disadvantaged. +

+
+
+

+ Affordable and sustainable housing +

+

+ + + + IF + + at or above 90th percentile for + + lead paint + + AND + + the median home value + + is less than + 90th percentile OR at or above the 90th percentile for the + + housing cost burden + + + +

+

+ + AND + + is low income + + * + +

+

+ + THEN + + the community is disadvantaged. +

+
+
+

+ Reduction and remediation of legacy pollution +

+

+ + + + IF + + at or above 90th percentile for + + proximity to hazardous waste facilities + + OR + + proximity to NLP sites + + OR + + proximity to RMP sites + + + +

+

+ + AND + + is low income + + * + +

+

+ + THEN + + the community is disadvantaged. +

+
+
+

+ Critical clean water and waste infrastructure +

+

+ + + + IF + + at or above 90th percentile for + + wastewater discharge + + + +

+

+ + AND + + is low income + + * + +

+

+ + THEN + + the community is disadvantaged. +

+
+
+

+ Health burdens +

+

+ + + + IF + + at or above 90th percentile for + + asthma + + OR + + diabetes + + OR + + heart disease + + OR + + low life expectancy + + + +

+

+ + AND + + is low income + + * + +

+

+ + THEN + + the community is disadvantaged. +

+
+
+

+ Training and workforce development +

+

+ + + + IF + + at or above 90th percentile for + + low median income relative to area median income + + OR + at or above the 90th percentile for + + linguistic isolation + + OR + + + unemployment + + OR + for percentage individuals in households at or below 100% federal + + poverty + + level at or above 90% + +

+

+ + + + AND + + where + + the high school degree achievement rates + + for adults 25 years and older is less than 90% + +

+

+ + THEN + + the community is disadvantaged. +

+
+
+
+`; diff --git a/client/src/components/Categories/index.tsx b/client/src/components/Categories/index.tsx new file mode 100644 index 00000000..c595e078 --- /dev/null +++ b/client/src/components/Categories/index.tsx @@ -0,0 +1,3 @@ +import Categories from './Categories'; + +export default Categories; diff --git a/client/src/components/CategoryCard/CategoryCard.module.scss b/client/src/components/CategoryCard/CategoryCard.module.scss new file mode 100644 index 00000000..5b621474 --- /dev/null +++ b/client/src/components/CategoryCard/CategoryCard.module.scss @@ -0,0 +1,15 @@ +@use '../../styles/design-system.scss' as *; + +@mixin baseCard { + @include u-padding-top(0); + @include u-padding-right(6); + @include u-padding-bottom(6); + @include u-padding-left(6); + @include u-margin-bottom(6); + max-width: 34rem; +} + +.categoryCard { + @include baseCard; + @include u-bg('blue-cool-5'); +} diff --git a/client/src/components/CategoryCard/CategoryCard.module.scss.d.ts b/client/src/components/CategoryCard/CategoryCard.module.scss.d.ts new file mode 100644 index 00000000..65f44f6c --- /dev/null +++ b/client/src/components/CategoryCard/CategoryCard.module.scss.d.ts @@ -0,0 +1,12 @@ +declare namespace IndicatorCategoryNamespace { + export interface IIndicatorCategoryScss { + categoryCard: string; + } + } + +declare const IndicatorCategoryScssModule: IndicatorCategoryNamespace.IIndicatorCategoryScss & { + /** WARNING: Only available when `css-loader` is used without `style-loader` or `mini-css-extract-plugin` */ + locals: IndicatorCategoryNamespace.IIndicatorCategoryScss; + }; + + export = IndicatorCategoryScssModule; diff --git a/client/src/components/CategoryCard/CategoryCard.test.tsx b/client/src/components/CategoryCard/CategoryCard.test.tsx new file mode 100644 index 00000000..e81da12e --- /dev/null +++ b/client/src/components/CategoryCard/CategoryCard.test.tsx @@ -0,0 +1,18 @@ +import * as React from 'react'; +import {render} from '@testing-library/react'; +import {LocalizedComponent} from '../../test/testHelpers'; +import CategoryCard from './CategoryCard'; + +import * as METHODOLOGY_COPY from '../../data/copy/methodology'; + +describe('rendering of the CategoryCard', () => { + const {asFragment} = render( + + + , + ); + + it('checks if component renders', () => { + expect(asFragment()).toMatchSnapshot(); + }); +}); diff --git a/client/src/components/CategoryCard/CategoryCard.tsx b/client/src/components/CategoryCard/CategoryCard.tsx new file mode 100644 index 00000000..e1bd0958 --- /dev/null +++ b/client/src/components/CategoryCard/CategoryCard.tsx @@ -0,0 +1,32 @@ +import React from 'react'; + +import * as styles from './CategoryCard.module.scss'; + +interface ICategoryInterface { + categoryInfo: { + TITLE: JSX.Element, + IF: JSX.Element, + AND: JSX.Element, + THEN: JSX.Element + } +} +const IndicatorCategory = ({categoryInfo}: ICategoryInterface) => { + return ( +
+

+ {categoryInfo.TITLE} +

+

+ {categoryInfo.IF} +

+

+ {categoryInfo.AND} +

+

+ {categoryInfo.THEN} +

+
+ ); +}; + +export default IndicatorCategory; diff --git a/client/src/components/CategoryCard/__snapshots__/CategoryCard.test.tsx.snap b/client/src/components/CategoryCard/__snapshots__/CategoryCard.test.tsx.snap new file mode 100644 index 00000000..dba3718a --- /dev/null +++ b/client/src/components/CategoryCard/__snapshots__/CategoryCard.test.tsx.snap @@ -0,0 +1,53 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`rendering of the CategoryCard checks if component renders 1`] = ` + +
+

+ Climate change +

+

+ + + + IF + + at or above 90th percentile for + + expected agriculture loss rate + + OR + + expected building loss rate + + OR + + expected population loss rate + + + +

+

+ + AND + + is low income + + * + +

+

+ + THEN + + the community is disadvantaged. +

+
+
+`; diff --git a/client/src/components/CategoryCard/index.tsx b/client/src/components/CategoryCard/index.tsx new file mode 100644 index 00000000..3d8e779e --- /dev/null +++ b/client/src/components/CategoryCard/index.tsx @@ -0,0 +1,3 @@ +import CategoryCard from './CategoryCard'; + +export default CategoryCard; diff --git a/client/src/components/DatasetCard/datasetCard.module.scss b/client/src/components/DatasetCard/datasetCard.module.scss index 51288cc2..ca250ddc 100644 --- a/client/src/components/DatasetCard/datasetCard.module.scss +++ b/client/src/components/DatasetCard/datasetCard.module.scss @@ -1,3 +1,4 @@ +@use '../../styles/design-system.scss' as *; @import '../utils.scss'; @mixin baseCard { @@ -8,7 +9,7 @@ .datasetCard { @include baseCard; - background-color: white; + @include u-bg("gray-3"); } .datasetCardAdditional { diff --git a/client/src/components/DatasetCard/index.tsx b/client/src/components/DatasetCard/index.tsx index 69112bbc..f20223a5 100644 --- a/client/src/components/DatasetCard/index.tsx +++ b/client/src/components/DatasetCard/index.tsx @@ -5,15 +5,16 @@ import * as styles from './datasetCard.module.scss'; import * as METHODOLOGY_COPY from '../../data/copy/methodology'; interface IDatasetCardProps { - datasetCardProps: { [key:string]: string } - additionalIndicator: boolean + datasetCardProps: { + [key:string]: string + } } -const DatasetCard = ({datasetCardProps, additionalIndicator}:IDatasetCardProps) => { +const DatasetCard = ({datasetCardProps}:IDatasetCardProps) => { const intl = useIntl(); return ( -
+

{datasetCardProps.indicator}

{datasetCardProps.description} @@ -22,23 +23,23 @@ const DatasetCard = ({datasetCardProps, additionalIndicator}:IDatasetCardProps)
  • - {intl.formatMessage(METHODOLOGY_COPY.DATASET_CARD_LABELS.SOURCE)} + {intl.formatMessage(METHODOLOGY_COPY.DATASET_CARD_LABELS.RESP_PARTY)} - {datasetCardProps.dataSourceLabel} + {datasetCardProps.respPartyLabel}
  • -
  • - - {intl.formatMessage(METHODOLOGY_COPY.DATASET_CARD_LABELS.RESOLUTION)} - - {datasetCardProps.dataResolution} -
  • {intl.formatMessage(METHODOLOGY_COPY.DATASET_CARD_LABELS.DATE_RANGE)} - {datasetCardProps.dataDateRange} + {datasetCardProps.dateRange} +
  • +
  • + + {intl.formatMessage(METHODOLOGY_COPY.DATASET_CARD_LABELS.USED_IN)} + + {datasetCardProps.usedIn}
diff --git a/client/src/components/DatasetCard/tests/__snapshots__/datasetCard.test.tsx.snap b/client/src/components/DatasetCard/tests/__snapshots__/datasetCard.test.tsx.snap index eb464f92..91bd5c18 100644 --- a/client/src/components/DatasetCard/tests/__snapshots__/datasetCard.test.tsx.snap +++ b/client/src/components/DatasetCard/tests/__snapshots__/datasetCard.test.tsx.snap @@ -1,41 +1,43 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`rendering of addtional indicator dataset card checks if component renders 1`] = ``; - exports[`rendering of indicator dataset card checks if component renders 1`] = ` -
+

- Area Median Income + Low Income

- Median income of the census block group calculated as a percent - of the metropolitan area’s or state's median income. + + Percent of a block group's population in households where household income is at or below + 200% of the federal poverty level. +
diff --git a/client/src/components/DatasetCard/tests/datasetCard.test.tsx b/client/src/components/DatasetCard/tests/datasetCard.test.tsx index 8da602bb..0ad7af8f 100644 --- a/client/src/components/DatasetCard/tests/datasetCard.test.tsx +++ b/client/src/components/DatasetCard/tests/datasetCard.test.tsx @@ -8,19 +8,7 @@ import * as METHODOLOGY_COPY from '../../../data/copy/methodology'; describe('rendering of indicator dataset card', () => { const {asFragment} = render( - - , - ); - - it('checks if component renders', () => { - expect(asFragment()).toMatchSnapshot(); - }); -}); - -describe('rendering of addtional indicator dataset card', () => { - const {asFragment} = render( - - + , ); diff --git a/client/src/components/DatasetContainer/dsContainer.module.scss b/client/src/components/DatasetContainer/dsContainer.module.scss index e08ed44a..003a4f90 100644 --- a/client/src/components/DatasetContainer/dsContainer.module.scss +++ b/client/src/components/DatasetContainer/dsContainer.module.scss @@ -1,5 +1,14 @@ +@use '../../styles/design-system.scss' as *; + .datasetCardsContainer { + @include u-margin-top(4); display: flex; justify-content: space-between; flex-wrap: wrap; +} + +.returnToTop { + display: flex; + justify-content: flex-end; + @include u-margin-bottom(4); } \ No newline at end of file diff --git a/client/src/components/DatasetContainer/dsContainer.module.scss.d.ts b/client/src/components/DatasetContainer/dsContainer.module.scss.d.ts index dfd243b4..37156d1a 100644 --- a/client/src/components/DatasetContainer/dsContainer.module.scss.d.ts +++ b/client/src/components/DatasetContainer/dsContainer.module.scss.d.ts @@ -1,6 +1,7 @@ declare namespace DatasetContainerScssNamespace { export interface IDatasetContainerScss { datasetCardsContainer: string; + returnToTop: string; } } diff --git a/client/src/components/DatasetContainer/index.tsx b/client/src/components/DatasetContainer/index.tsx index 72cc3b1f..ed2117b4 100644 --- a/client/src/components/DatasetContainer/index.tsx +++ b/client/src/components/DatasetContainer/index.tsx @@ -1,5 +1,5 @@ import React from 'react'; -import {useIntl} from 'gatsby-plugin-intl'; +import {Link, useIntl} from 'gatsby-plugin-intl'; import {Grid} from '@trussworks/react-uswds'; import DatasetCard from '../DatasetCard'; @@ -15,7 +15,7 @@ const DatasetContainer = () => { return ( <> - + @@ -25,49 +25,26 @@ const DatasetContainer = () => { - - -

{intl.formatMessage(METHODOLOGY_COPY.DATASETS.INFO)}

-
-
- -
- {METHODOLOGY_COPY.INDICATORS.map((card) => )} -
- -
-
- - - - -

{intl.formatMessage(METHODOLOGY_COPY.DATASETS.ADDITIONAL_HEADING)}

+
+ {METHODOLOGY_COPY.INDICATORS.map((card) => )} +
- - -

{intl.formatMessage(METHODOLOGY_COPY.DATASETS.ADDITIONAL_INFO)}

-
-
- -
- {METHODOLOGY_COPY.ADDITIONAL_INDICATORS.map((card) => )} +
+ + {METHODOLOGY_COPY.RETURN_TO_TOP.LINK} +
+ ); }; diff --git a/client/src/components/DatasetContainer/tests/__snapshots__/datasetContainer.test.tsx.snap b/client/src/components/DatasetContainer/tests/__snapshots__/datasetContainer.test.tsx.snap index 4a69ba62..e9ced9f2 100644 --- a/client/src/components/DatasetContainer/tests/__snapshots__/datasetContainer.test.tsx.snap +++ b/client/src/components/DatasetContainer/tests/__snapshots__/datasetContainer.test.tsx.snap @@ -3,7 +3,7 @@ exports[`rendering of the DatasetContainer checks if various text fields are visible 1`] = `
-
-
-

- The datasets come from a variety of sources and were selected based on relevance, availability, recency, and quality. The datasets seek to identify a range of human health, environmental, climate-related, and other cumulative impacts on communities. -

-
-
-
-
-

- Area Median Income -

-
- Median income of the census block group calculated as a percent - of the metropolitan area’s or state's median income. -
- -
-
-

- Poverty -

-
- Percent of a block group's population in households where the household income is at or below 100% of the federal poverty level. -
- -
-
-

- Education, less than high school education -

-
- Percent of people ages 25 years or older in a block group whose - education level is less than a high school diploma. -
- -
-
-
-
-
-
-

- Additional Indicators -

-
-
-
-
-

- These datasets provide additional information about each community. -

+
+
+

+ Low Income +

+
+ + Percent of a block group's population in households where household income is at or below + 200% of the federal poverty level. + +
+ +
+
+

+ Expected Agriculture Loss Rate +

+
+ + Economic loss rate to agriculture resulting from natural hazards each year. + +
+ +
+
+

+ Expected Building Loss Rate +

+
+ + Economic loss rate to buildings resulting from natural hazards each year. + +
+ +
+
+

+ Expected Population Loss Rate +

+
+ + Rate relative to the population in fatalities and injuries resulting from natural hazards each + year. Population loss is defined as the Spatial Hazard Events and Losses or National Centers + for Environmental Information’s reported number of fatalities and injuries caused by the + hazard occurrence. To combine fatalities and injuries for the computation of population loss value, + an injury is counted as one-tenth (1/10) of a fatality. The NCEI Storm Events Database + classifies injuries and fatalities as direct or indirect. Both direct and indirect injuries + and fatalities are counted as population loss. This total number of injuries and fatalities is + then divided by the population in the census tract to get a per-capita rate of population risk. + +
+ +
+
+

+ Energy burden +

+
+ Average annual energy cost ($) divided by household income. +
+ +
+
+

+ PM2.5 +

+
+ Fine inhalable particles, with diameters that are generally + 2.5 micrometers and smaller. +
+ +
+
+

+ Diesel particulate matter +

+
+ Mixture of particles that is part of diesel exhaust in the air. +
+ +
+
+

+ Traffic proximity and volume +

+
+ Count of vehicles (average annual daily traffic) at major roads + within 500 meters, divided by distance in meters (not km). +
+ +
+
+

+ Housing cost burden +

+
+ Households that are low income and spend more than 30% of their + income to housing costs. +
+ +
+
+

+ Lead paint +

+
+ Percent of housing units built pre-1960, used as an + indicator of potential lead paint exposure in homes. +
+ +
+
+

+ Median home value +

+
+ Median home value of owner-occupied housing units in the area. +
+ +
+
+

+ Proximity to hazardous waste facilities +

+
+ + Count of hazardous waste facilities (Treatment, Storage, and Disposal Facilities and Large + Quantity Generators) within 5 km (or nearest beyond 5 km), each divided by distance in kilometers. + +
+ +
+
+

+ Proximity to National Priorities List (NPL) Sites +

+
+ + Count of proposed or listed NPL - also known as superfund - sites within 5 km (or nearest one + beyond 5 km), each divided by distance in kilometers. +
+ +
+
+

+ Proximity to Risk Management Plan (RMP) Sites +

+
+ + Count of RMP (potential chemical accident management plan) facilities within 5 km (or nearest + one beyond 5 km), each divided by distance in kilometers. +
+ +
+
+

+ Wastewater discharge +

+
+ Risk-Screening Environmental Indicators (RSEI) modeled Toxic Concentrations at + stream segments within 500 meters, divided by distance in kilometers (km). +
+ +
+
+

+ Asthma +

+
+ Weighted number of respondents people who answer “yes” both + to both of the following questions: “Have you ever been told by a doctor, + nurse, or other health professional that you have asthma?” and the question + “Do you still have asthma?” +
+ +
+
+

+ Diabetes +

+
+ People ages 18 years and older who report having ever been + told by a doctor, nurse, or other health professionals that they have + diabetes other than diabetes during pregnancy. +
+ +
+
+

+ Heart disease +

+
+ People ages 18 years and older who report ever having been told + by a doctor, nurse, or other health professionals that they had angina or + coronary heart disease. +
+ +
+
+

+ Low life expectancy +

+
+ Average number of years of life a person who has attained a given age can expect to live. +
+ +
+
+

+ Low median Income +

+
+ Median income of the census tract calculated as a percent of the area’s median income. +
+ +
+
+

+ Linguistic Isolation +

+
+ Households in which no one age 14 and over speaks English only or also speaks + a language other than English +
+ +
+
+

+ Unemployment +

+
+ Number of unemployed people as a percentage of the civilian labor force +
+ +
+
+

+ Poverty +

+
+ Percent of a tract's population in households where the household income is at or below 100% of the federal poverty level. +
+ +
+
+

+ High school degree achievement rate +

+
+ Percent of people ages 25 years or older in a census tract whose + education level is less than a high school diploma. +
+ +
+
-
-

- Diabetes -

-
- People ages 18 years and older who report having ever been - told by a doctor, nurse, or other health professionals that they have - diabetes other than diabetes during pregnancy. -
- -
-
-

- Asthma -

-
- Weighted number of respondents people who answer “yes” both - to both of the following questions: “Have you ever been told by a doctor, - nurse, or other health professional that you have asthma?” and the question - “Do you still have asthma?” -
- -
-
-

- Heart disease -

-
- People ages 18 years and older who report ever having been told - by a doctor, nurse, or other health professionals that they had angina or - coronary heart disease. -
- -
-
-

- Life expectancy -

-
- Estimated years of life expectancy. -
- -
-
-

- Traffic proximity and volume -

-
- Count of vehicles (average annual daily traffic) at major roads - within 500 meters, divided by distance in meters (not km). -
- -
-
-

- FEMA Risk Index Expected Annual Loss Score -

-
- Average economic loss in dollars resulting from natural - hazards each year. It is calculated for each hazard type and quantifies - loss for relevant consequence types: buildings, people, and agriculture. -
- -
-
-

- Energy burden -

-
- Average annual energy cost ($) divided by household income. -
- -
-
-

- Housing cost burden -

-
- Households that are low income and spend more than 30% of their - income to housing costs. -
- -
-
-

- Wastewater discharge -

-
- RSEI modeled Toxic Concentrations at stream segments within 500 - meters, divided by distance in kilometers (km). -
- -
-
-

- Lead paint -

-
- Percent of housing units built pre-1960, used as an - indicator of potential lead paint exposure in homes. -
- -
-
-

- Diesel particulate matter -

-
- Mixture of particles that is part of diesel exhaust in the air. -
- -
-
-

- PM2.5 -

-
- Fine inhalable particles, with diameters that are generally - 2.5 micrometers and smaller. -
- -
+ + Return to top +
diff --git a/client/src/components/DownloadPacket/downloadPacket.module.scss b/client/src/components/DownloadPacket/downloadPacket.module.scss index 2ab6fd25..b8b1fa30 100644 --- a/client/src/components/DownloadPacket/downloadPacket.module.scss +++ b/client/src/components/DownloadPacket/downloadPacket.module.scss @@ -1,4 +1,4 @@ -$primary-color: #112f4e; +@use '../../styles/design-system.scss' as *; .downloadBoxContainer { @@ -6,7 +6,7 @@ $primary-color: #112f4e; margin: auto; .downloadBox { - background-color: $primary-color; + @include u-bg('blue-80v'); border-radius: 6px 6px; .downloadBoxTextBox { @@ -15,12 +15,15 @@ $primary-color: #112f4e; flex-direction: column; .downloadBoxTitle { - font-weight: bold; - margin-bottom: 10px; + @include typeset('sans', 'xs', 3); + @include u-text('semibold'); + @include u-margin-bottom(2); } - + .downloadBoxText { - margin-bottom: 20px; + @include typeset('sans', 'xs', 3); + @include u-margin-bottom(4); + span { font-style: italic; } @@ -42,8 +45,8 @@ $primary-color: #112f4e; } .downloadBoxButton{ - background-color: white; - color: $primary-color; + @include u-bg('white'); + @include u-color('blue-80v'); display: flex; .downloadPacketText { diff --git a/client/src/components/LowIncome/LowIncome.module.scss b/client/src/components/LowIncome/LowIncome.module.scss new file mode 100644 index 00000000..cbc9868b --- /dev/null +++ b/client/src/components/LowIncome/LowIncome.module.scss @@ -0,0 +1,20 @@ +@use '../../styles/design-system.scss' as *; + +.lowIncomeContainer { + + border: 1px solid #DFE1E2; + @include u-margin-top(4); + @include u-padding-left(4); + @include u-padding-right(3); + @include u-padding-bottom(4); + + .lowIncomeTitle { + @include typeset('sans', 'xs', 3); + @include u-text('semibold'); + } + + .lowIncomeText { + @include typeset('sans', 'xs', 3); + @include u-text('light'); + } +}; \ No newline at end of file diff --git a/client/src/components/LowIncome/LowIncome.module.scss.d.ts b/client/src/components/LowIncome/LowIncome.module.scss.d.ts new file mode 100644 index 00000000..26a738e7 --- /dev/null +++ b/client/src/components/LowIncome/LowIncome.module.scss.d.ts @@ -0,0 +1,14 @@ +declare namespace LowIncomeNamespace { + export interface ILowIncomeScss { + lowIncomeContainer: string; + lowIncomeTitle: string; + lowIncomeText: string; + } + } + +declare const LowIncomeScssModule: LowIncomeNamespace.ILowIncomeScss & { + /** WARNING: Only available when `css-loader` is used without `style-loader` or `mini-css-extract-plugin` */ + locals: LowIncomeNamespace.ILowIncomeScss; + }; + + export = LowIncomeScssModule; diff --git a/client/src/components/LowIncome/LowIncome.test.tsx b/client/src/components/LowIncome/LowIncome.test.tsx new file mode 100644 index 00000000..47be349b --- /dev/null +++ b/client/src/components/LowIncome/LowIncome.test.tsx @@ -0,0 +1,16 @@ +import * as React from 'react'; +import {render} from '@testing-library/react'; +import {LocalizedComponent} from '../../test/testHelpers'; +import LowIncome from './LowIncome'; + +describe('rendering of the LowIncome', () => { + const {asFragment} = render( + + + , + ); + + it('checks if component renders', () => { + expect(asFragment()).toMatchSnapshot(); + }); +}); diff --git a/client/src/components/LowIncome/LowIncome.tsx b/client/src/components/LowIncome/LowIncome.tsx new file mode 100644 index 00000000..330460de --- /dev/null +++ b/client/src/components/LowIncome/LowIncome.tsx @@ -0,0 +1,26 @@ +import React from 'react'; +import {useIntl} from 'gatsby-plugin-intl'; + +import * as METHODOLOGY_COPY from '../../data/copy/methodology'; +import * as styles from './LowIncome.module.scss'; + +const LowIncome = () => { + const intl = useIntl(); + + return ( +
+

+ * + {' '} + {intl.formatMessage(METHODOLOGY_COPY.LOW_INCOME.HEADING)} +

+ +

+ {intl.formatMessage(METHODOLOGY_COPY.LOW_INCOME.INFO)} +

+ +
+ ); +}; + +export default LowIncome; diff --git a/client/src/components/LowIncome/__snapshots__/LowIncome.test.tsx.snap b/client/src/components/LowIncome/__snapshots__/LowIncome.test.tsx.snap new file mode 100644 index 00000000..6638d460 --- /dev/null +++ b/client/src/components/LowIncome/__snapshots__/LowIncome.test.tsx.snap @@ -0,0 +1,20 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`rendering of the LowIncome checks if component renders 1`] = ` + +
+

+ + * + + Low Income +

+

+ + At or above 65th percentile for percent of census tract population of households where household + income is at or below 200% of the federal poverty level + +

+
+
+`; diff --git a/client/src/components/LowIncome/index.tsx b/client/src/components/LowIncome/index.tsx new file mode 100644 index 00000000..a4efda8b --- /dev/null +++ b/client/src/components/LowIncome/index.tsx @@ -0,0 +1,3 @@ +import LowIncome from './LowIncome'; + +export default LowIncome; diff --git a/client/src/components/MethodologyFormula/MethodologyFormula.module.scss b/client/src/components/MethodologyFormula/MethodologyFormula.module.scss new file mode 100644 index 00000000..df189470 --- /dev/null +++ b/client/src/components/MethodologyFormula/MethodologyFormula.module.scss @@ -0,0 +1,12 @@ +@use '../../styles/design-system.scss' as *; + +.formulaContainer { + @include u-margin-top(5); + p:not(:first-child) { + font-style: italic; + + span { + @include u-text('bold'); + } + } +}; diff --git a/client/src/components/MethodologyFormula/MethodologyFormula.module.scss.d.ts b/client/src/components/MethodologyFormula/MethodologyFormula.module.scss.d.ts new file mode 100644 index 00000000..caf51699 --- /dev/null +++ b/client/src/components/MethodologyFormula/MethodologyFormula.module.scss.d.ts @@ -0,0 +1,12 @@ +declare namespace MethodologyFormulaNamespace { + export interface IMethodologyFormulaScss { + formulaContainer: string; + } + } + +declare const MethodologyFormulaScssModule: MethodologyFormulaNamespace.IMethodologyFormulaScss & { + /** WARNING: Only available when `css-loader` is used without `style-loader` or `mini-css-extract-plugin` */ + locals: MethodologyFormulaNamespace.IMethodologyFormulaScss; + }; + + export = MethodologyFormulaScssModule; diff --git a/client/src/components/MethodologyFormula/MethodologyFormula.test.tsx b/client/src/components/MethodologyFormula/MethodologyFormula.test.tsx new file mode 100644 index 00000000..ec461f3a --- /dev/null +++ b/client/src/components/MethodologyFormula/MethodologyFormula.test.tsx @@ -0,0 +1,16 @@ +import * as React from 'react'; +import {render} from '@testing-library/react'; +import {LocalizedComponent} from '../../test/testHelpers'; +import MethodologyFormula from './MethodologyFormula'; + +describe('rendering of the MethodologyFormula', () => { + const {asFragment} = render( + + + , + ); + + it('checks if component renders', () => { + expect(asFragment()).toMatchSnapshot(); + }); +}); diff --git a/client/src/components/MethodologyFormula/MethodologyFormula.tsx b/client/src/components/MethodologyFormula/MethodologyFormula.tsx new file mode 100644 index 00000000..c60f08c4 --- /dev/null +++ b/client/src/components/MethodologyFormula/MethodologyFormula.tsx @@ -0,0 +1,35 @@ +import React from 'react'; +import {useIntl} from 'gatsby-plugin-intl'; + +import * as METHODOLOGY_COPY from '../../data/copy/methodology'; +import * as styles from './MethodologyFormula.module.scss'; + +// The site shows the formula used in the methodology. The constants seen +// below aim to capture the 3 part of that formula. These are not +// reserved words. + +const MethodologyFormula = () => { + const intl = useIntl(); + + return ( +
+

+ {intl.formatMessage(METHODOLOGY_COPY.PAGE.FORMULA_INTRO)} +

+ +

+ {METHODOLOGY_COPY.FORMULA.IF} +

+ +

+ {METHODOLOGY_COPY.FORMULA.AND} +

+ +

+ {METHODOLOGY_COPY.FORMULA.THEN} +

+
+ ); +}; + +export default MethodologyFormula; diff --git a/client/src/components/MethodologyFormula/__snapshots__/MethodologyFormula.test.tsx.snap b/client/src/components/MethodologyFormula/__snapshots__/MethodologyFormula.test.tsx.snap new file mode 100644 index 00000000..17b1f85f --- /dev/null +++ b/client/src/components/MethodologyFormula/__snapshots__/MethodologyFormula.test.tsx.snap @@ -0,0 +1,31 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`rendering of the MethodologyFormula checks if component renders 1`] = ` + +
+

+ + Under the current formula, a census tract will be considered disadvantaged: + +

+

+ + IF + + it is above the threshold for one or more climate or environmental indicator +

+

+ + AND + + it is above the threshold for one or more socioeconomic indicator +

+

+ + THEN + + the community is considered disadvantaged. +

+
+
+`; diff --git a/client/src/components/MethodologyFormula/index.tsx b/client/src/components/MethodologyFormula/index.tsx new file mode 100644 index 00000000..542ad943 --- /dev/null +++ b/client/src/components/MethodologyFormula/index.tsx @@ -0,0 +1,3 @@ +import MethodologyFormula from './MethodologyFormula'; + +export default MethodologyFormula; diff --git a/client/src/components/__snapshots__/scoreStepsList.test.tsx.snap b/client/src/components/__snapshots__/scoreStepsList.test.tsx.snap deleted file mode 100644 index 9c62ef15..00000000 --- a/client/src/components/__snapshots__/scoreStepsList.test.tsx.snap +++ /dev/null @@ -1,125 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`rendering of the component should match the snapshot of the MapIntroduction component 1`] = ` - -

- Methodology -

-
-
-

- The methodology for identifying communities of focus is calculated at the census block group level. Census block geographical boundaries are determined by the U.S. Census Bureau once every ten years. This tool utilizes the census block boundaries from 2010. -

-

- The following describes the process for identifying communities of focus. -

-
-
-
    -
  1. -

    - Gather datasets -

    -

    - -

    -

    - The methodology includes the following inputs that are equally weighted. -

    -

    - Percent of Area Median Income -

    -

    - If a census block group is in a metropolitan area, this value is the median income of the census block group calculated as a percent of the metropolitan area’s median income. -

    -

    - If a census block group is not in a metropolitan area, this value is the median income of the census block group calculated as a percent of the state’s median income. -

    -

    - Percent of households below or at 100% of the federal poverty line -

    - This is the percent of households in a state with a household income - below or at 100% of the - - federal poverty line - - . This federal poverty line is calculated - based on the composition of each household (e.g., based on household size), but it does not vary geographically. -

    - The high school degree achievement rate for adults 25 years and older -

    -

    - The percent of individuals who are 25 or older who have received a high school degree. -

    -
  2. -
  3. -

    - Determine communites of focus -

    -

    - -

    -

    - Under the existing formula, a census block group will be considered a community of focus if: -

    -

    - (The median income is less than 80% of the area median income -

    - -

    - OR -

    - -

    - households living in poverty (at or below 100% of the federal poverty level) is greater than 20%) -

    - -

    - AND -

    - -

    - The high school degree achievement rate for adults 25 years and older is greater than 95% -

    -
  4. -
-
-`; diff --git a/client/src/components/scoreStepsList.test.tsx b/client/src/components/scoreStepsList.test.tsx deleted file mode 100644 index 0d48c454..00000000 --- a/client/src/components/scoreStepsList.test.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import * as React from 'react'; -import {render} from '@testing-library/react'; -import ScoreStepsList from './scoreStepsList'; -import {LocalizedComponent} from '../test/testHelpers'; - -// TODO: Move this to a location that will detect on all tests -// See ticket: #550 -beforeAll(() => { - jest.spyOn(global.console, 'error').mockImplementation((...params) => { - console.error(params); - }); -}); - -describe('rendering of the component', () => { - const {asFragment} = render( - - - , - ); - - it('should match the snapshot of the MapIntroduction component', () => { - expect(asFragment()).toMatchSnapshot(); - }); - - it('No console errors', () => { - expect(console.error).toBeCalledTimes(0); - }); -}); diff --git a/client/src/data/copy/methodology.tsx b/client/src/data/copy/methodology.tsx index 1db933d2..ee11849b 100644 --- a/client/src/data/copy/methodology.tsx +++ b/client/src/data/copy/methodology.tsx @@ -14,18 +14,68 @@ export const PAGE = defineMessages({ description: 'methodology page header text', }, DESCRIPTION: { - id: 'methodology.page.paragraph.first', - defaultMessage: 'The methodology for identifying communities of focus is currently ' + - 'in a draft, pre-decisional form that may change over time as more datasets become available.', - description: 'methodology page paragraph 1', + id: 'methodology.page.paragraph', + defaultMessage: ` + This tool identifies commmunities that are economically disadvantaged, overburdened by + certain environmental risks, and marginalized by legacies of historic underinvestment. + A community qualifies as 'disadvantaged' when a census tract is at or above a certain + threshold for a climate or environmental burden indicator and also above a certain + threshold for a socioeconomic indicator. Census tract geographical boundaries are + determined by the U.S. Census Bureau once every ten years. This tool untilizes the + census tract boundaries from 2010. + `, + description: 'methodology page paragraph', }, + FORMULA_INTRO: { + id: 'methodology.page.formula.intro', + defaultMessage: ` + Under the current formula, a census tract will be considered disadvantaged: + `, + description: 'methodology page introducing the formula', + }, + CATEGORY_TEXT: { + id: 'methodology.page.categories.title', + defaultMessage: ` + Communities will be defined as disadvantaged if they meet the qualifications under one + or more of the 8 categories of criteria below. + `, + description: 'methodology page explanation of the categories', + }, + }); +export const FORMULA = { + IF: IF, + }} + />, + AND: AND, + }} + />, + THEN: THEN, + }} + />, +}; + // Download Package export const DOWNLOAD_FILE_SIZE = '111MB'; -export const DOWNLOAD_LAST_UPDATED = '12/15/21'; -export const DOWNLOAD_LAST_UPDATED_ES = '15/12/21'; +export const DOWNLOAD_LAST_UPDATED = '12/13/21'; +export const DOWNLOAD_LAST_UPDATED_ES = '13/12/21'; export const VERSION_NUMBER = '0.1'; export const DOWNLOAD_ZIP_URL = [ @@ -37,7 +87,7 @@ export const DOWNLOAD_ZIP_URL = [ export const DOWNLOAD_PACKAGE = { TITLE: , DESCRIPTION: , +}; + + +// Indicator Categories copy constants: +export const CATEGORIES = { + CLIMATE_CHANGE: { + TITLE: , + IF: IF, + expAgrLossRate: expected agriculture loss rate, + expbuildLossRate: expected building loss rate, + expPopLossRate: expected population loss rate, + }} + />, + AND: AND, + asterisk: *, + }} + />, + THEN: THEN, + asterisk: *, + }} + />, + }, + CLEAN_ENERGY: { + TITLE: , + IF: IF, + energyCostBur: energy cost burden score, + pm25: PM2.5, + }} + />, + AND: AND, + asterisk: *, + }} + />, + THEN: THEN, + asterisk: *, + }} + />, + }, + CLEAN_TRANSPORT: { + TITLE: , + IF: IF, + dieselPM: diesel particulate matter, + traffic: traffic proximity and volume, + }} + />, + AND: AND, + asterisk: *, + }} + />, + THEN: THEN, + asterisk: *, + }} + />, + }, + AFFORDABLE_HOUSING: { + TITLE: , + IF: IF, + lead: lead paint, + medianHomeVal: the median home value, + houseBur: housing cost burden, + }} + />, + AND: AND, + asterisk: *, + }} + />, + THEN: THEN, + asterisk: *, + }} + />, + }, + LEGACY_POLLUTION: { + TITLE: , + IF: IF, + proxHaz: proximity to hazardous waste facilities, + proxNPL: proximity to NLP sites, + proxRMP: proximity to RMP sites, + }} + />, + AND: AND, + asterisk: *, + }} + />, + THEN: THEN, + asterisk: *, + }} + />, + }, + CLEAN_WATER: { + TITLE: , + IF: IF, + wasteWater: wastewater discharge, + }} + />, + AND: AND, + asterisk: *, + }} + />, + THEN: THEN, + asterisk: *, + }} + />, + }, + HEALTH_BURDENS: { + TITLE: , + IF: IF, + diabetes: diabetes, + asthma: asthma, + heart: heart disease, + life: low life expectancy, + }} + />, + AND: AND, + asterisk: *, + }} + />, + THEN: THEN, + asterisk: *, + }} + />, + }, + WORKFORCE_DEV: { + TITLE: , + IF: IF, + lowMedInc: low median income relative to area median income, + linIso: linguistic isolation, + unemploy: unemployment, + poverty: poverty, + }} + />, + AND: AND, + highSchool: the high school degree achievement rates, + }} + />, + THEN: THEN, + asterisk: *, + }} + />, + }, +}; + // Dataset section export const DATASETS = defineMessages({ HEADING: { @@ -97,291 +487,426 @@ export const DATASETS = defineMessages({ }); export const DATASET_CARD_LABELS = defineMessages({ - RESOLUTION: { - id: 'datasetCard.dataResolution', - defaultMessage: 'Data resolution: ', + USED_IN: { + id: 'datasetCard.used.in', + defaultMessage: 'Used in: ', description: 'label associated with explaining the card', }, - SOURCE: { - id: 'datasetCard.dataSource', - defaultMessage: 'Data source: ', + RESP_PARTY: { + id: 'datasetCard.responsible.party', + defaultMessage: 'Responsible Party: ', description: 'label associated with explaining the card', }, DATE_RANGE: { - id: 'datasetCard.dataDateRange', - defaultMessage: 'Data date range: ', + id: 'datasetCard.date.range', + defaultMessage: 'Date range: ', description: 'label associated with explaining the card', }, }); export const INDICATORS = [ { - indicator: 'Area Median Income', - description: `Median income of the census block group calculated as a percent - of the metropolitan area’s or state's median income.`, - dataResolution: `Census block group`, - dataSourceLabel: `Census's American Community Survey`, + domID: 'low-income', + indicator: 'Low Income', + description: ` + Percent of a block group's population in households where household income is at or below + 200% of the federal poverty level. + `, + usedIn: + , + respPartyLabel: + , dataSourceURL: `https://www.census.gov/programs-surveys/acs`, - dataDateRange: `2015-2019`, + dateRange: `2015-2019`, }, { - indicator: 'Poverty', - description: `Percent of a block group's population in households where the household income` + - ` is at or below 100% of the federal poverty level.`, - dataResolution: `Census block group`, - dataSourceLabel: `Census's American Community Survey`, - dataSourceURL: `https://www.census.gov/programs-surveys/acs`, - dataDateRange: `2015-2019`, - }, - { - indicator: 'Education, less than high school education', - description: `Percent of people ages 25 years or older in a block group whose - education level is less than a high school diploma.`, - dataResolution: `Census block group`, - dataSourceLabel: `Census's American Community Survey`, - dataSourceURL: `https://www.census.gov/programs-surveys/acs`, - dataDateRange: `2015-2019`, - }, -]; - -export const ADDITIONAL_INDICATORS = [ - { - indicator: 'Diabetes', - description: `People ages 18 years and older who report having ever been - told by a doctor, nurse, or other health professionals that they have - diabetes other than diabetes during pregnancy.`, - dataResolution: `Census tract`, - dataSourceLabel: `Centers for Disease Control and Prevention (CDC) PLACES`, - dataSourceURL: `https://www.cdc.gov/places/index.html`, - dataDateRange: `2016-2019`, - }, - { - indicator: 'Asthma', - description: `Weighted number of respondents people who answer “yes” both - to both of the following questions: “Have you ever been told by a doctor, - nurse, or other health professional that you have asthma?” and the question - “Do you still have asthma?”`, - dataResolution: `Census tract`, - dataSourceLabel: `Centers for Disease Control and Prevention (CDC) PLACES`, - dataSourceURL: `https://www.cdc.gov/places/index.html`, - dataDateRange: `2016-2019`, - }, - { - indicator: 'Heart disease', - description: `People ages 18 years and older who report ever having been told - by a doctor, nurse, or other health professionals that they had angina or - coronary heart disease.`, - dataResolution: `Census tract`, - dataSourceLabel: `Centers for Disease Control and Prevention (CDC) PLACES`, - dataSourceURL: `https://www.cdc.gov/places/index.html`, - dataDateRange: `2016-2019`, - }, - { - indicator: 'Life expectancy', - description: `Estimated years of life expectancy.`, - dataResolution: `Census tract`, - dataSourceLabel: `Centers for Disease Control and Prevention (CDC) - US Small-area Life Expectancy Estimates Project`, - dataSourceURL: `https://www.cdc.gov/nchs/nvss/usaleep/usaleep.html#data`, - dataDateRange: `2010-2015`, - }, - { - indicator: 'Traffic proximity and volume', - description: `Count of vehicles (average annual daily traffic) at major roads - within 500 meters, divided by distance in meters (not km).`, - dataResolution: `Census block group`, - dataSourceLabel: `Department of Transportation (DOT) traffic data as compiled by EPA's EJSCREEN`, - dataSourceURL: `https://www.epa.gov/ejscreen/technical-documentation-ejscreen`, - dataDateRange: `2017`, - }, - { - indicator: 'FEMA Risk Index Expected Annual Loss Score', - description: `Average economic loss in dollars resulting from natural - hazards each year. It is calculated for each hazard type and quantifies - loss for relevant consequence types: buildings, people, and agriculture.`, - dataResolution: `Census tract`, - dataSourceLabel: `Federal Emergency Management Agency (FEMA)`, + domID: 'exp-agr-loss-rate', + indicator: 'Expected Agriculture Loss Rate', + description: ` + Economic loss rate to agriculture resulting from natural hazards each year. + `, + usedIn: `Climate change methodology`, + respPartyLabel: `Federal Emergency Management Agency (FEMA)`, dataSourceURL: `https://hazards.fema.gov/nri/expected-annual-loss`, - dataDateRange: `2014-2017`, + dateRange: `2014-2021`, }, { + domID: 'exp-bld-loss-rate', + indicator: 'Expected Building Loss Rate', + description: ` + Economic loss rate to buildings resulting from natural hazards each year. + `, + usedIn: `Climate change methodology`, + respPartyLabel: `Federal Emergency Management Agency (FEMA)`, + dataSourceURL: `https://hazards.fema.gov/nri/expected-annual-loss`, + dateRange: `2014-2021`, + }, + { + domID: 'exp-pop-loss-rate', + indicator: 'Expected Population Loss Rate', + description: ` + Rate relative to the population in fatalities and injuries resulting from natural hazards each + year. Population loss is defined as the Spatial Hazard Events and Losses or National Centers + for Environmental Information’s reported number of fatalities and injuries caused by the + hazard occurrence. To combine fatalities and injuries for the computation of population loss value, + an injury is counted as one-tenth (1/10) of a fatality. The NCEI Storm Events Database + classifies injuries and fatalities as direct or indirect. Both direct and indirect injuries + and fatalities are counted as population loss. This total number of injuries and fatalities is + then divided by the population in the census tract to get a per-capita rate of population risk. + `, + usedIn: `Climate change methodology`, + respPartyLabel: `Federal Emergency Management Agency (FEMA)`, + dataSourceURL: `https://hazards.fema.gov/nri/expected-annual-loss`, + dateRange: `2014-2021`, + }, + { + domID: 'energy-burden', indicator: 'Energy burden', description: `Average annual energy cost ($) divided by household income.`, - dataResolution: `Census tract`, - dataSourceLabel: `Department of Energy (DOE) LEAD Score`, + usedIn: `Clean energy and energy efficiency methodology`, + respPartyLabel: `Department of Energy (DOE) LEAD Score`, dataSourceURL: `https://www.energy.gov/eere/slsc/low-income-energy-affordability-data-lead-tool`, - dataDateRange: `2018`, - }, - { - indicator: 'Housing cost burden', - description: `Households that are low income and spend more than 30% of their - income to housing costs.`, - dataResolution: `Census tract`, - dataSourceLabel: `Department of Housing & Urban Development’s - (HUD) Comprehensive Housing Affordability Strategy dataset`, - dataSourceURL: `https://www.huduser.gov/portal/datasets/cp.html`, - dataDateRange: `2013-2017`, - }, - { - indicator: 'Wastewater discharge', - description: `RSEI modeled Toxic Concentrations at stream segments within 500 - meters, divided by distance in kilometers (km).`, - dataResolution: `Census block group`, - dataSourceLabel: `Environmental Protection Agency (EPA) Risk-Screening - Environmental Indicators (RSEI) Model as compiled by EPA's EJSCREEN`, - dataSourceURL: `https://www.epa.gov/ejscreen/technical-documentation-ejscreen`, - dataDateRange: `2020`, - }, - { - indicator: 'Lead paint', - description: `Percent of housing units built pre-1960, used as an - indicator of potential lead paint exposure in homes.`, - dataResolution: `Census block group`, - dataSourceLabel: `Census's American Community Survey`, - dataSourceURL: `https://www.census.gov/programs-surveys/acs`, - dataDateRange: `2015-2019`, - }, - { - indicator: 'Diesel particulate matter', - description: `Mixture of particles that is part of diesel exhaust in the air.`, - dataResolution: `Census block group`, - dataSourceLabel: `Environmental Protection Agency (EPA) National Air Toxics Assessment (NATA) - as compiled by EPA's EJSCREEN`, - dataSourceURL: `https://www.epa.gov/ejscreen/technical-documentation-ejscreen`, - dataDateRange: `5-year estimates, 2015-2019`, + dateRange: `2018`, }, { + domID: 'pm-25', indicator: 'PM2.5', - description: `Fine inhalable particles, with diameters that are generally + description: `Fine inhalable particles, with diameters that are generally 2.5 micrometers and smaller.`, - dataResolution: `Census block group`, - dataSourceLabel: `Environmental Protection Agency (EPA) Office of Air + usedIn: `Clean energy and energy efficiency methodology`, + respPartyLabel: `Environmental Protection Agency (EPA) Office of Air and Radiation (OAR) fusion of model and monitor data as compiled by EPA's EJSCREEN`, dataSourceURL: `https://www.epa.gov/ejscreen/technical-documentation-ejscreen`, - dataDateRange: `2017`, + dateRange: `2017`, + }, + { + domID: 'diesel-pm', + indicator: 'Diesel particulate matter', + description: `Mixture of particles that is part of diesel exhaust in the air.`, + usedIn: `Clean transportation methodology`, + respPartyLabel: `Environmental Protection Agency (EPA) National Air Toxics Assessment (NATA) + as compiled by EPA's EJSCREEN`, + dataSourceURL: `https://www.epa.gov/ejscreen/technical-documentation-ejscreen`, + dateRange: `2014`, + }, + { + domID: 'traffic-vol', + indicator: 'Traffic proximity and volume', + description: `Count of vehicles (average annual daily traffic) at major roads + within 500 meters, divided by distance in meters (not km).`, + usedIn: `Clean transportation methodology`, + respPartyLabel: `Department of Transportation (DOT) traffic data as compiled by EPA's EJSCREEN`, + dataSourceURL: `https://www.epa.gov/ejscreen/technical-documentation-ejscreen`, + dateRange: `2017`, + }, + { + domID: 'house-burden', + indicator: 'Housing cost burden', + description: `Households that are low income and spend more than 30% of their + income to housing costs.`, + usedIn: `Affordable and sustainable housing methodology`, + respPartyLabel: `Department of Housing & Urban Development’s + (HUD) Comprehensive Housing Affordability Strategy dataset`, + dataSourceURL: `https://www.huduser.gov/portal/datasets/cp.html`, + dateRange: `2014-2018`, + }, + { + domID: 'lead-paint', + indicator: 'Lead paint', + description: `Percent of housing units built pre-1960, used as an + indicator of potential lead paint exposure in homes.`, + usedIn: `Affordable and sustainable housing methodology`, + respPartyLabel: `Census's American Community Survey`, + dataSourceURL: `https://www.census.gov/programs-surveys/acs`, + dateRange: `2015-2019`, + }, + { + domID: 'median-home', + indicator: 'Median home value', + description: `Median home value of owner-occupied housing units in the area.`, + usedIn: `Affordable and sustainable housing methodology`, + respPartyLabel: `Census's American Community Survey`, + dataSourceURL: `https://www.census.gov/programs-surveys/acs`, + dateRange: `2015-2019`, + }, + { + domID: 'prox-haz', + indicator: 'Proximity to hazardous waste facilities', + description: ` + Count of hazardous waste facilities (Treatment, Storage, and Disposal Facilities and Large + Quantity Generators) within 5 km (or nearest beyond 5 km), each divided by distance in kilometers. + `, + usedIn: `Reduction and remediation of legacy pollution methodology`, + respPartyLabel: ` + Environmental Protection Agency (EPA) TSDF data calculated from EPA RCRAinfo database + as compiled by EPA’s EJSCREEN`, + dataSourceURL: `https://www.census.gov/programs-surveys/acs`, + dateRange: `2015-2020`, + }, + { + domID: 'prox-npl', + indicator: 'Proximity to National Priorities List (NPL) Sites', + description: ` + Count of proposed or listed NPL - also known as superfund - sites within 5 km (or nearest one + beyond 5 km), each divided by distance in kilometers.`, + usedIn: `Reduction and remediation of legacy pollution methodology`, + respPartyLabel: `Environmental Protection Agency (EPA) CERCLIS database as compiled by EPA’s EJSCREEN`, + dataSourceURL: `https://enviro.epa.gov/facts/rcrainfo/search.html`, + dateRange: `2020`, + }, + { + domID: 'prox-rmp', + indicator: 'Proximity to Risk Management Plan (RMP) Sites', + description: ` + Count of RMP (potential chemical accident management plan) facilities within 5 km (or nearest + one beyond 5 km), each divided by distance in kilometers.`, + usedIn: `Affordable and sustainable housing methodology`, + respPartyLabel: `Environmental Protection Agency (EPA) RMP database as compiled by EPA’s EJSCREEN`, + dataSourceURL: `https://www.epa.gov/ejscreen/technical-documentation-ejscreen`, + dateRange: `2020`, + }, + { + domID: 'waste-water', + indicator: 'Wastewater discharge', + description: `Risk-Screening Environmental Indicators (RSEI) modeled Toxic Concentrations at + stream segments within 500 meters, divided by distance in kilometers (km).`, + usedIn: `Critical clean water and waste infrastructure`, + respPartyLabel: `Environmental Protection Agency (EPA) Risk-Screening + Environmental Indicators (RSEI) Model as compiled by EPA's EJSCREEN`, + dataSourceURL: `https://www.epa.gov/ejscreen/technical-documentation-ejscreen`, + dateRange: `2020`, + }, + { + domID: 'asthma', + indicator: 'Asthma', + description: `Weighted number of respondents people who answer “yes” both + to both of the following questions: “Have you ever been told by a doctor, + nurse, or other health professional that you have asthma?” and the question + “Do you still have asthma?”`, + usedIn: `Health burdens methodology`, + respPartyLabel: `Centers for Disease Control and Prevention (CDC) PLACES`, + dataSourceURL: `https://www.cdc.gov/places/index.html`, + dateRange: `2016-2019`, + }, + { + domID: 'diabetes', + indicator: 'Diabetes', + description: `People ages 18 years and older who report having ever been + told by a doctor, nurse, or other health professionals that they have + diabetes other than diabetes during pregnancy.`, + usedIn: `Health burdens methodology`, + respPartyLabel: `Centers for Disease Control and Prevention (CDC) PLACES`, + dataSourceURL: `https://www.cdc.gov/places/index.html`, + dateRange: `2016-2019`, + }, + { + domID: 'heart-disease', + indicator: 'Heart disease', + description: `People ages 18 years and older who report ever having been told + by a doctor, nurse, or other health professionals that they had angina or + coronary heart disease.`, + usedIn: `Health burdens methodology`, + respPartyLabel: `Centers for Disease Control and Prevention (CDC) PLACES`, + dataSourceURL: `https://www.cdc.gov/places/index.html`, + dateRange: `2016-2019`, + }, + { + domID: 'life-exp', + indicator: 'Low life expectancy', + description: `Average number of years of life a person who has attained a given age can expect to live.`, + usedIn: `Health burdens methodology`, + respPartyLabel: `CDC’s U.S. Small-area Life Expectancy Estimates Project (USALEEP)`, + dataSourceURL: `https://www.cdc.gov/nchs/nvss/usaleep/usaleep.html#data`, + dateRange: `2010-2015`, + }, + { + domID: 'median-income', + indicator: 'Low median Income', + description: `Median income of the census tract calculated as a percent of the area’s median income.`, + usedIn: `Training and workforce development`, + respPartyLabel: `Census's American Community Survey`, + dataSourceURL: `https://www.census.gov/programs-surveys/acs`, + dateRange: `2015-2019`, + }, + { + domID: 'ling-iso', + indicator: 'Linguistic Isolation', + description: `Households in which no one age 14 and over speaks English only or also speaks + a language other than English`, + usedIn: `Training and workforce development`, + respPartyLabel: `Census's American Community Survey`, + dataSourceURL: `https://www.census.gov/programs-surveys/acs`, + dateRange: `2015-2019`, + }, + { + domID: 'unemploy', + indicator: 'Unemployment', + description: `Number of unemployed people as a percentage of the civilian labor force`, + usedIn: `Training and workforce development`, + respPartyLabel: `Census's American Community Survey`, + dataSourceURL: `https://www.census.gov/programs-surveys/acs`, + dateRange: `2015-2019`, + }, + { + domID: 'poverty', + indicator: 'Poverty', + description: `Percent of a tract's population in households where the household income` + + ` is at or below 100% of the federal poverty level.`, + usedIn: `Training and workforce development`, + respPartyLabel: `Census's American Community Survey`, + dataSourceURL: `https://www.census.gov/programs-surveys/acs`, + dateRange: `2015-2019`, + }, + { + domID: 'high-school', + indicator: 'High school degree achievement rate', + description: `Percent of people ages 25 years or older in a census tract whose + education level is less than a high school diploma.`, + usedIn: `Training and workforce development`, + respPartyLabel: `Census's American Community Survey`, + dataSourceURL: `https://www.census.gov/programs-surveys/acs`, + dateRange: `2015-2019`, }, - ]; - -// Methodology Steps: -export const METHODOLOGY_STEPS = defineMessages({ - HEADING: { - id: 'methodology.steps.heading', - defaultMessage: `Methodology`, - description: 'heading of methodology section', - }, - DESCRIPTION_1: { - id: 'methodology.steps.description.1', - defaultMessage: 'The methodology for identifying communities of focus is'+ - ' calculated at the census block group level. Census block geographical boundaries'+ - ' are determined by the U.S. Census Bureau once every ten years. This tool utilizes'+ - ' the census block boundaries from 2010.', - description: 'first description text ', - }, - DESCRIPTION_2: { - id: 'methodology.steps.description.2', - defaultMessage: 'The following describes the process for identifying communities of focus.', - description: 'second description text', - }, - STEP_1_HEADING: { - id: 'methodology.step.1.heading', - defaultMessage: `Gather datasets`, - description: 'first step heading', - }, - STEP_1_INFO: { - id: 'methodology.step.1.info', - defaultMessage: `The methodology includes the following inputs that are equally weighted.`, - description: 'first step info', - }, - STEP_1_A_HEADING: { - id: 'methodology.step.1.a.heading', - defaultMessage: `Percent of Area Median Income`, - description: 'step 1 a heading', - }, - STEP_1_A_INFO_1: { - id: 'methodology.step.1.a.info.1', - defaultMessage: 'If a census block group is in a metropolitan area, this value is the'+ - ' median income of the census block group calculated as a percent of'+ - ' the metropolitan area’s median income.', - description: 'step 1 a info 1', - }, - STEP_1_A_INFO_2: { - id: 'methodology.step.1.a.info.2', - defaultMessage: 'If a census block group is not in a metropolitan area, this value is the'+ - ' median income of the census block group calculated as a percent of the state’s median'+ - ' income.', - description: 'step 1 a info 2', - }, - STEP_1_B_HEADING: { - id: 'methodology.step.1.b.heading', - defaultMessage: `Percent of households below or at 100% of the federal poverty line`, - description: 'step 1 b heading', - }, - STEP_1_C_HEADING: { - id: 'methodology.step.1.c.heading', - defaultMessage: `The high school degree achievement rate for adults 25 years and older`, - description: 'step 1 a heading', - }, - STEP_1_C_INFO: { - id: 'methodology.step.1.c.info', - defaultMessage: 'The percent of individuals who are 25 or older who have received a high school degree.', - description: 'step 1 c info', - }, - STEP_2_HEADING: { - id: 'methodology.step.2.heading', - defaultMessage: `Determine communites of focus`, - description: 'second step heading', - }, - STEP_2_INFO: { - id: 'methodology.step.2.info', - defaultMessage: `Under the existing formula, a census block group will be considered a community of focus if:`, - description: 'second step info', - }, -}); - -const FED_POVERTY_LINE_URL = 'https://www.census.gov/topics/income-poverty/poverty/guidance/poverty-measures.html'; - -// Copy that has links or other HTML tags in them -export const COMPLEX_METH_STEPS = { - STEP_2_B_INFO: - federal poverty line - , - }} - />, - FORMULA: - (The median income is less than 80% of the area median income -

, - or: -

- OR -

, - livingAtPovery: -

- households living in poverty (at or below 100% of the federal poverty level) is greater than 20%) -

, - and: -

- AND -

, - education: -

- The high school degree achievement rate for adults 25 years and older is greater than 95% -

, - }} +export const RETURN_TO_TOP = { + LINK: , }; + +// Methodology Steps: +// export const METHODOLOGY_STEPS = defineMessages({ +// HEADING: { +// id: 'methodology.steps.heading', +// defaultMessage: `Methodology`, +// description: 'heading of methodology section', +// }, +// DESCRIPTION_1: { +// id: 'methodology.steps.description.1', +// defaultMessage: 'The methodology for identifying communities of focus is'+ +// ' calculated at the census block group level. Census block geographical boundaries'+ +// ' are determined by the U.S. Census Bureau once every ten years. This tool utilizes'+ +// ' the census block boundaries from 2010.', +// description: 'first description text ', +// }, +// DESCRIPTION_2: { +// id: 'methodology.steps.description.2', +// defaultMessage: 'The following describes the process for identifying communities of focus.', +// description: 'second description text', +// }, +// STEP_1_HEADING: { +// id: 'methodology.step.1.heading', +// defaultMessage: `Gather datasets`, +// description: 'first step heading', +// }, +// STEP_1_INFO: { +// id: 'methodology.step.1.info', +// defaultMessage: `The methodology includes the following inputs that are equally weighted.`, +// description: 'first step info', +// }, +// STEP_1_A_HEADING: { +// id: 'methodology.step.1.a.heading', +// defaultMessage: `Percent of Area Median Income`, +// description: 'step 1 a heading', +// }, +// STEP_1_A_INFO_1: { +// id: 'methodology.step.1.a.info.1', +// defaultMessage: 'If a census block group is in a metropolitan area, this value is the'+ +// ' median income of the census block group calculated as a percent of'+ +// ' the metropolitan area’s median income.', +// description: 'step 1 a info 1', +// }, +// STEP_1_A_INFO_2: { +// id: 'methodology.step.1.a.info.2', +// defaultMessage: 'If a census block group is not in a metropolitan area, this value is the'+ +// ' median income of the census block group calculated as a percent of the state’s median'+ +// ' income.', +// description: 'step 1 a info 2', +// }, +// STEP_1_B_HEADING: { +// id: 'methodology.step.1.b.heading', +// defaultMessage: `Percent of households below or at 100% of the federal poverty line`, +// description: 'step 1 b heading', +// }, +// STEP_1_C_HEADING: { +// id: 'methodology.step.1.c.heading', +// defaultMessage: `The high school degree achievement rate for adults 25 years and older`, +// description: 'step 1 a heading', +// }, +// STEP_1_C_INFO: { +// id: 'methodology.step.1.c.info', +// defaultMessage: 'The percent of individuals who are 25 or older who have received a high school degree.', +// description: 'step 1 c info', +// }, +// STEP_2_HEADING: { +// id: 'methodology.step.2.heading', +// defaultMessage: `Determine communites of focus`, +// description: 'second step heading', +// }, +// STEP_2_INFO: { +// id: 'methodology.step.2.info', +// defaultMessage: `Under the existing formula, a census block group will be considered a community of focus if:`, +// description: 'second step info', +// }, +// }); + +// const FED_POVERTY_LINE_URL = 'https://www.census.gov/topics/income-poverty/poverty/guidance/poverty-measures.html'; + +// // Copy that has links or other HTML tags in them +// export const COMPLEX_METH_STEPS = { +// STEP_2_B_INFO: +// federal poverty line +// , +// }} +// />, +// FORMULA: +// (The median income is less than 80% of the area median income +//

, +// or: +//

+// OR +//

, +// livingAtPovery: +//

+// households living in poverty (at or below 100% of the federal poverty level) is greater than 20%) +//

, +// and: +//

+// AND +//

, +// education: +//

+// The high school degree achievement rate for adults 25 years and older is greater than 95% +//

, +// }} +// />, +// }; diff --git a/client/src/pages/__snapshots__/methodology.test.tsx.snap b/client/src/pages/__snapshots__/methodology.test.tsx.snap index 376ded09..099e00c6 100644 --- a/client/src/pages/__snapshots__/methodology.test.tsx.snap +++ b/client/src/pages/__snapshots__/methodology.test.tsx.snap @@ -317,17 +317,60 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis data-testid="grid" >

- The methodology for identifying communities of focus is currently in a draft, pre-decisional form that may change over time as more datasets become available. + + This tool identifies commmunities that are economically disadvantaged, overburdened by + certain environmental risks, and marginalized by legacies of historic underinvestment. + A community qualifies as 'disadvantaged' when a census tract is at or above a certain + threshold for a climate or environmental burden indicator and also above a certain + threshold for a socioeconomic indicator. Census tract geographical boundaries are + determined by the U.S. Census Bureau once every ten years. This tool untilizes the + census tract boundaries from 2010. + +

+
+
+

+ + Under the current formula, a census tract will be considered disadvantaged: + +

+

+ + IF + + it is above the threshold for one or more climate or environmental indicator +

+

+ + AND + + it is above the threshold for one or more socioeconomic indicator +

+

+ + THEN + + the community is considered disadvantaged. +

+
+
+

+ + Communities will be defined as disadvantaged if they meet the qualifications under one + or more of the 8 categories of criteria below. +

- The package includes draft v0.1 of the list of communities of focus (.csv and .xlsx) and information about how to use the list (.pdf). + + The package includes draft v0.1 of the list of disadvantaged communities + (.csv and .xlsx) and information (.pdf) about how to use the list. + - Last updated: 12/15/21 + Last updated: 12/13/21
@@ -372,11 +418,422 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
+
+

+ + * + + Low Income +

+

+ + At or above 65th percentile for percent of census tract population of households where household + income is at or below 200% of the federal poverty level + +

+
+
+
+

+ Categories +

+
+
+
+
+
+

+ Climate change +

+

+ + + + IF + + at or above 90th percentile for + + expected agriculture loss rate + + OR + + expected building loss rate + + OR + + expected population loss rate + + + +

+

+ + AND + + is low income + + * + +

+

+ + THEN + + the community is disadvantaged. +

+
+
+

+ Clean energy and energy efficiency +

+

+ + + + IF + + at or above 90th percentile for + + energy cost burden score + + OR + + PM2.5 + + + +

+

+ + AND + + is low income + + * + +

+

+ + THEN + + the community is disadvantaged. +

+
+
+

+ Clean transportation +

+

+ + + + IF + + at or above 90th percentile for + + diesel particulate matter + + or + + traffic proximity and volume + + + +

+

+ + AND + + is low income + + * + +

+

+ + THEN + + the community is disadvantaged. +

+
+
+

+ Affordable and sustainable housing +

+

+ + + + IF + + at or above 90th percentile for + + lead paint + + AND + + the median home value + + is less than + 90th percentile OR at or above the 90th percentile for the + + housing cost burden + + + +

+

+ + AND + + is low income + + * + +

+

+ + THEN + + the community is disadvantaged. +

+
+
+

+ Reduction and remediation of legacy pollution +

+

+ + + + IF + + at or above 90th percentile for + + proximity to hazardous waste facilities + + OR + + proximity to NLP sites + + OR + + proximity to RMP sites + + + +

+

+ + AND + + is low income + + * + +

+

+ + THEN + + the community is disadvantaged. +

+
+
+

+ Critical clean water and waste infrastructure +

+

+ + + + IF + + at or above 90th percentile for + + wastewater discharge + + + +

+

+ + AND + + is low income + + * + +

+

+ + THEN + + the community is disadvantaged. +

+
+
+

+ Health burdens +

+

+ + + + IF + + at or above 90th percentile for + + asthma + + OR + + diabetes + + OR + + heart disease + + OR + + low life expectancy + + + +

+

+ + AND + + is low income + + * + +

+

+ + THEN + + the community is disadvantaged. +

+
+
+

+ Training and workforce development +

+

+ + + + IF + + at or above 90th percentile for + + low median income relative to area median income + + OR + at or above the 90th percentile for + + linguistic isolation + + OR + + + unemployment + + OR + for percentage individuals in households at or below 100% federal + + poverty + + level at or above 90% + +

+

+ + + + AND + + where + + the high school degree achievement rates + + for adults 25 years and older is less than 90% + +

+

+ + THEN + + the community is disadvantaged. +

+
+
+
-
-
-

- The datasets come from a variety of sources and were selected based on relevance, availability, recency, and quality. The datasets seek to identify a range of human health, environmental, climate-related, and other cumulative impacts on communities. -

-
-
-
-
-

- Area Median Income -

-
- Median income of the census block group calculated as a percent - of the metropolitan area’s or state's median income. -
- -
-
-

- Poverty -

-
- Percent of a block group's population in households where the household income is at or below 100% of the federal poverty level. -
- -
-
-

- Education, less than high school education -

-
- Percent of people ages 25 years or older in a block group whose - education level is less than a high school diploma. -
- -
-
- - -
-
-

- Additional Indicators -

-
-
-
-
-

- These datasets provide additional information about each community. -

+
+
+

+ Low Income +

+
+ + Percent of a block group's population in households where household income is at or below + 200% of the federal poverty level. + +
+ +
+
+

+ Expected Agriculture Loss Rate +

+
+ + Economic loss rate to agriculture resulting from natural hazards each year. + +
+ +
+
+

+ Expected Building Loss Rate +

+
+ + Economic loss rate to buildings resulting from natural hazards each year. + +
+ +
+
+

+ Expected Population Loss Rate +

+
+ + Rate relative to the population in fatalities and injuries resulting from natural hazards each + year. Population loss is defined as the Spatial Hazard Events and Losses or National Centers + for Environmental Information’s reported number of fatalities and injuries caused by the + hazard occurrence. To combine fatalities and injuries for the computation of population loss value, + an injury is counted as one-tenth (1/10) of a fatality. The NCEI Storm Events Database + classifies injuries and fatalities as direct or indirect. Both direct and indirect injuries + and fatalities are counted as population loss. This total number of injuries and fatalities is + then divided by the population in the census tract to get a per-capita rate of population risk. + +
+ +
+
+

+ Energy burden +

+
+ Average annual energy cost ($) divided by household income. +
+ +
+
+

+ PM2.5 +

+
+ Fine inhalable particles, with diameters that are generally + 2.5 micrometers and smaller. +
+ +
+
+

+ Diesel particulate matter +

+
+ Mixture of particles that is part of diesel exhaust in the air. +
+ +
+
+

+ Traffic proximity and volume +

+
+ Count of vehicles (average annual daily traffic) at major roads + within 500 meters, divided by distance in meters (not km). +
+ +
+
+

+ Housing cost burden +

+
+ Households that are low income and spend more than 30% of their + income to housing costs. +
+ +
+
+

+ Lead paint +

+
+ Percent of housing units built pre-1960, used as an + indicator of potential lead paint exposure in homes. +
+ +
+
+

+ Median home value +

+
+ Median home value of owner-occupied housing units in the area. +
+ +
+
+

+ Proximity to hazardous waste facilities +

+
+ + Count of hazardous waste facilities (Treatment, Storage, and Disposal Facilities and Large + Quantity Generators) within 5 km (or nearest beyond 5 km), each divided by distance in kilometers. + +
+ +
+
+

+ Proximity to National Priorities List (NPL) Sites +

+
+ + Count of proposed or listed NPL - also known as superfund - sites within 5 km (or nearest one + beyond 5 km), each divided by distance in kilometers. +
+ +
+
+

+ Proximity to Risk Management Plan (RMP) Sites +

+
+ + Count of RMP (potential chemical accident management plan) facilities within 5 km (or nearest + one beyond 5 km), each divided by distance in kilometers. +
+ +
+
+

+ Wastewater discharge +

+
+ Risk-Screening Environmental Indicators (RSEI) modeled Toxic Concentrations at + stream segments within 500 meters, divided by distance in kilometers (km). +
+ +
+
+

+ Asthma +

+
+ Weighted number of respondents people who answer “yes” both + to both of the following questions: “Have you ever been told by a doctor, + nurse, or other health professional that you have asthma?” and the question + “Do you still have asthma?” +
+ +
+
+

+ Diabetes +

+
+ People ages 18 years and older who report having ever been + told by a doctor, nurse, or other health professionals that they have + diabetes other than diabetes during pregnancy. +
+ +
+
+

+ Heart disease +

+
+ People ages 18 years and older who report ever having been told + by a doctor, nurse, or other health professionals that they had angina or + coronary heart disease. +
+ +
+
+

+ Low life expectancy +

+
+ Average number of years of life a person who has attained a given age can expect to live. +
+ +
+
+

+ Low median Income +

+
+ Median income of the census tract calculated as a percent of the area’s median income. +
+ +
+
+

+ Linguistic Isolation +

+
+ Households in which no one age 14 and over speaks English only or also speaks + a language other than English +
+ +
+
+

+ Unemployment +

+
+ Number of unemployed people as a percentage of the civilian labor force +
+ +
+
+

+ Poverty +

+
+ Percent of a tract's population in households where the household income is at or below 100% of the federal poverty level. +
+ +
+
+

+ High school degree achievement rate +

+
+ Percent of people ages 25 years or older in a census tract whose + education level is less than a high school diploma. +
+ +
+
-
-

- Diabetes -

-
- People ages 18 years and older who report having ever been - told by a doctor, nurse, or other health professionals that they have - diabetes other than diabetes during pregnancy. -
- -
-
-

- Asthma -

-
- Weighted number of respondents people who answer “yes” both - to both of the following questions: “Have you ever been told by a doctor, - nurse, or other health professional that you have asthma?” and the question - “Do you still have asthma?” -
- -
-
-

- Heart disease -

-
- People ages 18 years and older who report ever having been told - by a doctor, nurse, or other health professionals that they had angina or - coronary heart disease. -
- -
-
-

- Life expectancy -

-
- Estimated years of life expectancy. -
- -
-
-

- Traffic proximity and volume -

-
- Count of vehicles (average annual daily traffic) at major roads - within 500 meters, divided by distance in meters (not km). -
- -
-
-

- FEMA Risk Index Expected Annual Loss Score -

-
- Average economic loss in dollars resulting from natural - hazards each year. It is calculated for each hazard type and quantifies - loss for relevant consequence types: buildings, people, and agriculture. -
- -
-
-

- Energy burden -

-
- Average annual energy cost ($) divided by household income. -
- -
-
-

- Housing cost burden -

-
- Households that are low income and spend more than 30% of their - income to housing costs. -
- -
-
-

- Wastewater discharge -

-
- RSEI modeled Toxic Concentrations at stream segments within 500 - meters, divided by distance in kilometers (km). -
- -
-
-

- Lead paint -

-
- Percent of housing units built pre-1960, used as an - indicator of potential lead paint exposure in homes. -
- -
-
-

- Diesel particulate matter -

-
- Mixture of particles that is part of diesel exhaust in the air. -
- -
-
-

- PM2.5 -

-
- Fine inhalable particles, with diameters that are generally - 2.5 micrometers and smaller. -
- -
-
-
- -
-
-
-

- Methodology -

-
-
-

- The methodology for identifying communities of focus is calculated at the census block group level. Census block geographical boundaries are determined by the U.S. Census Bureau once every ten years. This tool utilizes the census block boundaries from 2010. -

-

- The following describes the process for identifying communities of focus. -

-
-
-
    -
  1. -

    - Gather datasets -

    -

    - -

    -

    - The methodology includes the following inputs that are equally weighted. -

    -

    - Percent of Area Median Income -

    -

    - If a census block group is in a metropolitan area, this value is the median income of the census block group calculated as a percent of the metropolitan area’s median income. -

    -

    - If a census block group is not in a metropolitan area, this value is the median income of the census block group calculated as a percent of the state’s median income. -

    -

    - Percent of households below or at 100% of the federal poverty line -

    - This is the percent of households in a state with a household income - below or at 100% of the - - federal poverty line - - . This federal poverty line is calculated - based on the composition of each household (e.g., based on household size), but it does not vary geographically. -

    - The high school degree achievement rate for adults 25 years and older -

    -

    - The percent of individuals who are 25 or older who have received a high school degree. -

    -
  2. -
  3. -

    - Determine communites of focus -

    -

    - -

    -

    - Under the existing formula, a census block group will be considered a community of focus if: -

    -

    - (The median income is less than 80% of the area median income -

    - -

    - OR -

    - -

    - households living in poverty (at or below 100% of the federal poverty level) is greater than 20%) -

    - -

    - AND -

    - -

    - The high school degree achievement rate for adults 25 years and older is greater than 95% -

    -
  4. -
+ Return to top +
diff --git a/client/src/pages/methodology.tsx b/client/src/pages/methodology.tsx index d48080ec..26cf8c1d 100644 --- a/client/src/pages/methodology.tsx +++ b/client/src/pages/methodology.tsx @@ -2,11 +2,14 @@ import * as React from 'react'; import {Grid} from '@trussworks/react-uswds'; import {useIntl} from 'gatsby-plugin-intl'; +import Categories from '../components/Categories'; import DatasetContainer from '../components/DatasetContainer'; import DownloadPacket from '../components/DownloadPacket'; import J40MainGridContainer from '../components/J40MainGridContainer'; +import MethodologyFormula from '../components/MethodologyFormula'; import Layout from '../components/layout'; -import ScoreStepsList from '../components/scoreStepsList'; +import LowIncome from '../components/LowIncome'; +// import ScoreStepsList from '../components/scoreStepsList'; import * as METHODOLOGY_COPY from '../data/copy/methodology'; @@ -14,7 +17,6 @@ interface MethodPageProps { location: Location; } -// markup const IndexPage = ({location}: MethodPageProps) => { const intl = useIntl(); @@ -25,29 +27,44 @@ const IndexPage = ({location}: MethodPageProps) => {

{intl.formatMessage(METHODOLOGY_COPY.PAGE.HEADING)}

+ {/* First column */} - +

{intl.formatMessage(METHODOLOGY_COPY.PAGE.DESCRIPTION)}

+ + {/* Formula section */} + + + {/* Category description */} +
+

+ {intl.formatMessage(METHODOLOGY_COPY.PAGE.CATEGORY_TEXT)} +

+
- + + {/* Second column */} + + + - + {/* - + */} ); }; diff --git a/client/src/styles/global.scss b/client/src/styles/global.scss index 885e6983..c5d26062 100644 --- a/client/src/styles/global.scss +++ b/client/src/styles/global.scss @@ -81,14 +81,19 @@ p.flush { @include j40-element('sm', 4, 'normal', 0); } +// 24 pixel margin-bottom +.j40-mb-3 { + @include u-margin-bottom(3) +} + // 40 pixel margin-bottom .j40-mb-5 { @include u-margin-bottom(5) } -// 24 pixel margin-bottom -.j40-mb-3 { - @include u-margin-bottom(3) +// 56 pixel margin-top +.j40-mt-7 { + @include u-margin-top(7) } .j40-footer-ceq-font { diff --git a/client/src/styles/theme/_uswds-theme-typography.scss b/client/src/styles/theme/_uswds-theme-typography.scss index f0046858..8c14dc2e 100644 --- a/client/src/styles/theme/_uswds-theme-typography.scss +++ b/client/src/styles/theme/_uswds-theme-typography.scss @@ -319,13 +319,13 @@ Or use `false` for unneeded weights. ---------------------------------------- */ -$theme-font-weight-thin: false; +$theme-font-weight-thin: 100; $theme-font-weight-light: 300; $theme-font-weight-normal: 400; -$theme-font-weight-medium: false; -$theme-font-weight-semibold: false; +$theme-font-weight-medium: 500; +$theme-font-weight-semibold: 600; $theme-font-weight-bold: 700; -$theme-font-weight-heavy: false; +$theme-font-weight-heavy: 800; // If USWDS is generating your @font-face rules, // should we generate all available weights