j40-cejst-2/client/README.md
Vim 669d1d3f0e
Frontend release branch to main (#1829)
* Add Geolocation from behind feature flag

* Comment updates from PR feedback

* Modify geolocate icon and beacon to be black

* Upgrade lb dependencies

- upgrade uswds to 2.13.3
- upgrade trussworks to 3.1.0
- fix breaking changes on Accordion, Search, SummaryBox, Collections,

* Fixes links that were off center

* Modify styling for geolocation

* Modify geolocation message

* Add mobile and desktop geolocating

* Modify disabled label tooltip message

* Add indicators to Puerto Rico (to release branch) (#1688)

* Add indicators to Puerto Rico

* Remove linguistic iso in Puerto Rico only

* Adds demographics v1

- This uses the built-in accordion component

* Add custom Accordion component to match designs

* Update AreaDetail snapshots

* Adding some better comments

* Add USWDS expand to demographics side panel

* Remove justice40-tool from prefix-path

* Update staging link to new CDN link

* Remove messaging on mobile

* Prettify test file

* Add TractInfo component

* Style TractDemo component

* Move Methodology version to bottom of sidepanel

* Add custom expand / collapse component
- adds a11y
- adds chevron from USWDS icons

* Align Geolocate icon and Search

- align geolocate and search according to mock for desktop and mobile

* Add tribal toggle (UI only)

* Refactor Sources/Layers to allow for tribal switching

- Remove census tracts layers into it's own component
- Create a tribal layer component
- Update LayerSelector component tests
- update OS map to react to layer selector
-

* Add tribal info to side panel and feature selection

- create a state variable to keep track of weather or not the layer was toggled
- allow mapInfoPanel to reset on layer switch
- allow AreaDetail to show census and tribal info
- allow LayerSelector to set layer toggled
- Add selectedFeature to both MapTribal and MapTract components
- create various tribal constants for styling
- i18n constants

* Update snapshots

* Update tribal path on production build

* Comment update

* add QA feedback

- swap expand/collapse icons
- add parens and slash to copy

* Add initial AK points

- corrects filter expression
- adds radius and color to constants

* Update staging deploy script

- update domain name
- update path

* Update AK layer id

- make AK layer clickable

* Add OS map functionality

- split source/layers between Map*Layers.tsx and getOSBaseMap file
- update getOSBaseMap to return eithe tribal or tracts layers/sources

* Add geolocation locked signal to local storage

* Make source/layer comments correspond

- getOSBaseMap and Map*Layers should have the same layer comments
- modify constants to have matching styles between Tribal and Tracts

* Remove zooming in on Alaska data point

* Update Tribal shortname ID

* Adjust CSS to place LayerSelector in MapHeader

* Comment out markdown check on link

* Add flooding and wildfire indicators to side panel

* Add indicators

- barriers to transport
- lack of green space
- lack of plumbing
- leaky tanks

* Add back the selected feature layer

* Show Tract info/demo only when tracts are selected

* Update SCORE_HIGH_PROP from SM_PFS to SM_C

- Will allow high zoom tiles to load with BE staging branch 1822/e638

* Fix 2 demographics typos

- repeated demographic
- change to race/ethnicity

* Add HRS, AML, FUDS and demographics (#1861)

* Add HRS_ET

- refactor to add IndicatorTypes
- modify tests
- add intl

* Add AML and FUDS

- update indicatorFilter
- update tests each indicator has 3 states to test

* Connect BE signal for demographics

- update tests
- i18n-ize

* Remove obsolete tests snapshots

* Update to Score N constants

* Remove higher ed socio-economic indicator

- remove spacer "Meets both socio"
- update snapshots

* Update BE signal types for

- AML
- FUDS

* Filter out missing historic underinvest. indicators

- For the special case when historic underinvestments are missing do not show that indicator at all
- update unit tests

* Make AML appear as No for all that are missing

* Update snapshot

* Correct BE signal on low income (#1877)

* Adds adjacency, impute flag and custom colors

* Update Quickstart docker link

* Remove duplicate Higher Ed indicator, update higher ed types and correct copy on 404 page (#1886)

* remove duplicate high school degree indicator

- for island areas

* Update 404 page copy

* Remove link that is failing during markdown checks

* Updated FE indicators constants to remove _M

- by removing these _M suffix on the FE
constants, we remove any dependency on changes to the BE score

* Remove up/down arrows from indicators

* update style of side panel categories if supported

- if the browser has ":has" support, the new category styles will be applied
- if not, the older style will remain in place

* update snapshots

* update styling for indicator values

- refactor disadvantaged blue dot to utils.scss

* remove missing icon and reduce subtext font size

* Remove un-needed import in test file

* Update category, indicator copy

* Update copy indicator desc and titles

* update side panel styling for 1.0

* Update methodology version / styling

* 1.0 side panel indicator designs (#1896)

* Remove up/down arrows from indicators

* update style of side panel categories if supported

- if the browser has ":has" support, the new category styles will be applied
- if not, the older style will remain in place

* update snapshots

* update styling for indicator values

- refactor disadvantaged blue dot to utils.scss

* remove missing icon and reduce subtext font size

* Remove un-needed import in test file

* Update category, indicator copy

* Update copy indicator desc and titles

* update side panel styling for 1.0

* Update methodology version / styling

* Add USVI and GU to map

- remove shortcuts on mobile

* Fix all link colors, prevent logo from wrapping, update non-selected side-panel (#1908)

* Update links colors

- Language links
- Download links
- Simple links
- External links
- Side panel demographics links
- return to top links
- update snapshots

* Fix wrapping on logo title

- remove beta pill

* Update un-selected side panel copy (desktop)

- two icons are needed

* Remove icons on mobile view

* Remove the pub. eng. button on all pages

* Add usa-link class to all links

- will create consiste visible state on all links

* Remove tribal toggle

- remove tribal layer from feature flag and make it default

* Update copy on Explore the Map page (#1915)

* Add Explore the Data box

* Update explore page description

- Remove paragraph under map

* Update territories copy

- Remove How you can help

* Update Whitehouse footer icon

* Correct heading order to pass a11y

* Remove beta pill in Beta Banner
- update snapshots

* Update explore page description
- remove color key

* revert image back to eagle seal

* Update release date variable name

* Add Impute, Adj and tribal signals to side panel

* Remove test category

- move send feedback button outside of categorization div
- left justify send feedback button
- update snapshots

* Update links in the territories paragraph on explore page

* Update tribal lands copy on explore page

* Align geolocate icon on desktop and mobile

* Add inverted style to YES

- update snapshots

* About page 1.0 (#1933)

* Initial About page

* Update navigation links

- adds hover and current effects
- fits width of each nav link to content

* Add location prop to J40Header

* Fix a11y error on internal links

- remove AboutCard LinkTypeWrapper if url is not specified
- remove gherkin tests on new nav links
- update snapshots

* Fix mobile nav for new nav links

* Add usa-current class to dropdown nav

* side panel narwal (#1943)

* Adds the PrioritizationCopy and TractPriotization

- adds both components
- removes logic around selecting AK data points
- update snapshots

* Add tests for TractPrioritization

* Adds tests for PrioritizationCopy

* Add income icon and tilde

- this is dependent on imputed income and adjacency

* Add tool tip to low income icon

* Update snapshots

* Removing AreaDetail test to allow tooltip library

- This library react-tooltip creates random DOM ID which will not allow for snapshot testing as he IDs change on each build. Due to time constraints, we simply removed the AreaDetails test. The AreaDetails component is made up of sub component and each sub component has tests so this is low risk.

- This is a temporary solution. Some longer terms solutions may be
1. Remove this library and get the USWDS tool tip to work
2. Re-factor the areaDetail.tests.tsx snapshot tests to do more DOM assertions rather than snapshots
3. Some combination of the two.

* Fix Tribal percentage error

* Update copy based on bug party (#1973)

* Update copy from team debug party
- closes #1945
- Lack of green space description
- Lack of indoor plumbing

* Update copy
- closes #1950

* Update copy
- closes #1951

* Update survey button
- Text and link
- closes 1967

* Update copy

- correct tool tip copy
- closes #1959

* No issue number: Update front-end Readme (#1935)

* Addresses `nvm` install

* Updated side panel, with two paragraphs, "Completely surrounded" and "Adjusted low income" and more! (#1990)

* Update logic for TractPrioritization and bug fix

- fix wildfire bug closes #1953
- rename TractPri API to better align with BE signal names
- redo test and all test cases

* Add PrioCopy1 and PrioCopy2

- fix rounding
- limited tests for each component. Many more test cases are needed
- add copy to i18n

* Adjust LowInc tool tip only on IMP_FLG=T

- remove threshold change for low income

* Add copy for comp. surr and Adj low inc

- create a new component DonutCopy
- add tests
- modify styling to work in both 1 para case and 2 para case

* Add Donut copy

* Fix typo on 2nd paragraph

* Update browser list

* Adds TA_COUNT_AK, TA_COUNT_C and TA_PERC_FE

- Prio1 and Prio2 both take TA_COUNT_C which should be null
- updates basic tests

* Remvoe cypress tests

* Update CONUS number to troubleshoot

* Copy adjustments

- move test copy to console.log
- move donutCopy to only show when ADJ_ET is true

* Update copy from Word Doc (#2001)

* add tsc compile

* fix TS warning around headingLevel

* Temporary fix around availableFor type error

- correlated to fix needed in ticket 2000

* Add copy update from CEJST pages - STATUS doc

- Add a period in Get the Data box
- Update unselected side panel text
- Update text under explore the map
- Content and styling for territories note
- persistent FAB - “Help improve the tool”
- Water needs to be “Water and Wastewater”
- Styling on demographics ( show )  => (show)
- Update age in demographics to be Elderly over 65
- Wildfire description is not correct
- Lead paint description needs to be updated
- remove bullet from How you can help
- Footer - remove RFI
- Footer - remove Eng cal
- add sign up link

* Update side panel non-selected copy

* Add back PEC button to each main page

* Remove console logs from J40Header

* Fix DOM warning on About page

- can't have <li> in <p>

* Fix nested DOM warning on Explore page

- Modify ExploreDataBox styling

* Update side panel non-selected with icons

- update height on mobile
- update snapshots

* Remove markdown ignore comments

- hoping this will build and match main so that the FE doesn't trigger the BE

* Add comments back to match main

* Update methodology page copy to Content 1.0 (#2009)

* Update methodology copy

- update categories
- update snapshots

* Add button to datasets page

- add tests

* Update copy for meth page according to Content1.0

* FAQS page (#2016)

* Fix a11y issue on Ling Iso card

* Add layout of new FAQs page

* Reorder SubNav links on About page

* Add NEW tag to new Burdens

* Add first 6 questions to FAQs

* Add the rest of the FAQs onto the page

* Adjust sub-nav order in About header

- update snapshots
- ensure that FAQ in SubNav is active

* Previous versions page narwal (#2018)

* Add Previous Version page

- Create a new DownloadButton component
- Add PreviousVersion link to main nav
- Extract out download button from PublicVideo component
- Update SidePageNav to render PrevVersion
- Add Beta start date
- Create previous-version page
- Add public eng to all pages
- update snapshots

* Update cypress test to test prev version page

- Add <ul> around card as it fails a11y without it.

* Add updated tribal base map

- this removes the LAR suffix in MapBox studio

* Initial Download page (#2021)

* Intial version of 1.0 download page

* fix a11y errors

* Update snapshots

* FRT copy update, isDAC to use SN_C and new base map of custom colors + updated tribal names (#2029)

* Update FRT copy in isDAC copy in side panel

* Update base map
- custom colors + updated tribal names
- closes #2005

* Update isDAC logic to use SN_C

- update component props
- update test cases
- closes #2024

* Update snapshots

* Remove unused vars from the constants (#2020) (#2023)

* Update release copy (#2036)

* Update Pub Eng page (#2043)

- Refactor download button to have gray buttons also
- Add a beta version of the PublicVideoBox in SCSS
- Update copy on Pub Eng page

* Change geojson to shapefile (#2044)

* geojson -> shapefile (#1931)

* Update test too (#1931)

* Beta and narwal links (#2051)

* Update download links to 1.0

* Update previous versions with two beta links

* Add beta data doc to prod .env

* Update PEC page

- add new icons (expired)
- create placeholder for 1.0 copy
- remove narwal links

* Add sign-up link on About page

* Update FRT copy

* Update contact page

* Point map to new 1.0 versions path on S3

- remove FILE_DL prefix on from .env variables as the path is for both file download and map tiles now
- Update MapTractLayers to use 1.0 score path
- Update downloads file to use updated score path names

* Only show two rows (ADJ and ADJ threshold) if

- ADJ_ET is true AND
- total number of disadv cats is 0

* Make 'PARTIALLY' highlighted like `YES`

* Highlight indicator value if

- ADJ_ET is true
- Imputed poverty income is > threshold (50)

* Update RAW true value for HRS_ET

* Make the logo and title of header nav back to map

* Content 1.0 updates, test tracts updated, some UI tweaks tasks (#2063)

* Content 1.0 updates

* Import variables rather than entire constant files

* Add "--" to all tract info

* Show "--" for when Adjusted low income is missing

* Add non disadvn case

- ADJ_ET is true and threshold isn't met

* Replace socio-economic with socioeconomic

* Add mouse pointer icon to side panel
- this looks like the bird lol

* Update sign up link

- closes #1640
- update snapshots

* Update tract feedback button to include tractid

- this is dependent on SM enabling multiple responses
- closes #1969

* Update HOLC long description note

- closes #2066

* Add content to question 2 of FAQs

- closes #2067
- update snapshots

* Update copy
- closes #2059
- updates release date to 11.21
- updates snapshots

* Remove language links

- closes #2055
- updates snapshots

* Update Two tribal strings

- fix if we have TA_COUNT_AK and TA_PERC
- Add "Partially surrounded" copy
- Add comment on how to find the logic truth table for paragraph1 and 2

* Revert date

* Update low income tooltip

- take into account pop = null
- update comments

* Update side panel copy

* Update copy on Methodology page

* Updated About page copy

* Update FAQs copy

* Update New tags to bold

- closes

* Add banner

- closes #2019

* Updated top of downloads page

- update change log copy

* Copy updates

- closes #2082

* Add and remove burdens for PR:

- closes #2083

* Correct burdens for Puerto Rico

* Add 3 download files to FE

- beta training slides to .env
- instructions to .env
- comp. chart to .env
- add comp chart to FAQ
- update snapshots

* Update priotization copy

- closes #2086
- closes #2085
- reorders ifs, placed all ifs with dependency no CC > =1 w/i in the first if block

* Update copy
- update icon in side panel (unselected)
- update copy in methodology cards

* Update link in FAQs

* Update linked text on note Tribal Nations

* Remove download file links from FAQs

* Update top of Download page

* Final copy update

-closes #2082

* Update space in About page copy

* Update copy based on Katherine's findings

- update snapshots
- remaining changes from Content 1.0

* Undo BE settings file

* Fix FUDS bug

- closes #2090

* Fix Low Income tooltip copy

* Final copy updates

-closes #2092

* Final final copy changes

* Update 1.0 communities list on download page

Co-authored-by: Jorge Escobar <83969469+esfoobar-usds@users.noreply.github.com>
Co-authored-by: Lucas Merrill Brown <lucas.m.brown@omb.eop.gov>
Co-authored-by: Matt Bowen <83967628+mattbowen-usds@users.noreply.github.com>
2022-11-21 15:20:34 -08:00

14 KiB
Raw Blame History

Staging Production

Justice40 Client

This README contains the following content:

Installing and running the client site

Via npm

Install Node using NVM

This will work for both MacOS and Win10. Follow instructions on this link. Be sure to read through the whole doc to find the sections within each step relevant to you (e.g. if you're using Homebrew, when you get to Step 2 look for the section, "Install NVM with Homebrew").

If you install NVM using Homebrew, make sure to read the output in terminal after you run brew install nvm. You will need to add a few lines to your ~/.bash_profile and perhaps complete a couple other tasks.

Once you install NVM, don't forget to install Node! This is included in the linked tutorial above. This will also install npm which you need for the steps below.

After you've downloaded the nvm and the latest node (using the above steps) also install node version 14 by:

nvm install 14

You should then be able to switch to that version of node by:

nvm use 14

To validate you are using node 14, type:

node -v

This should return Now using node 14.x.x (npm v6.x.x)

Install Yarn

Install yarn if you do not have it yet. Open your terminal and run sudo npm install -global yarn. This works on MacOS and Win10. To confirm it is installed, run yarn -v. A version number should be returned.

Run The Application

  1. Navigate to the base directory of this repository, and go to the client directory (cd client).
  2. Run the command npm install to install the dependencies.
  3. Run npm start to start up the client app.
  4. Open your browser and navigate to http://localhost:8000

Note that while this app uses npm as the package manager, yarn is required to build the uswds library.

Via docker

  • Launch VS code in the top level directory (above client)
  • Install the Microsoft docker VS code extension
  • make sure you are in the main repo's directory
  • Type docker-compose up
  • Running this on MacBook Pro with a 2.6GHz 6-core i7 with 16 GB of memory can take upto 20 minutes to complete.
  • This will create three images, j4_website, j40_score_server and j40_data_pipeline. It will take up ~ 30 to 35 GB of image disk space

By navigating to the client folder, the Dockerfile runs npm start. This will create a development version of the app.

Re-building j4_website

If you've made changes to the docker-compose file and want to re-build the j40_website:

docker-compose build --no-cache j40_website

This will not use the cache and re-build the image. Then do

docker-compoe up

docker hangs

  • Ensure that there's enough disk image space in docker. The Docker Desktop app will show the total disk image used (gear cog -> Resources -> Disk image size). This application will require ~ 30 - 35 GB. Allocating 50-60 GB should be sufficient. If the amount used is significantly greater than 35 GB you may need to prune the docker images:

docker image system

This should reduce the total used space.

Changing the source of tile / map layer

If you don't want to use the local data-pipeline location for getting the tile / map layers, you can change the DATA_SOURCE env variable in the docker-compose.yml. See environment variables for more info.

Troubleshooting docker

Viewing data on the map

See VIEW_MAP_DATA.md for more details on this.

Generating React components

Each React component requires a barrell, test, sass file and sass types file. You can run the auto-generated component to ensure you are following the style guide on creating React component for J40.

Please see this README for more information

Linting and Formatting

This project uses ESLint for code linting and Prettier for formatting. They are integrated via gatsby-plugin-prettier-eslint.

Linting is a required check before merges can happen, please lint your code, for the sake of consistency!

To use:

  1. During development:

    1. npx gatsby develop will automatically run prettier and eslint during development as files change, watch the console for updates.
    2. Alternatively, if you're using VSCode:
      1. Install the Prettier and ESLint plugins
      2. Enable editor.formatOnSave, and optionally "editor.codeActionsOnSave": {"source.fixAll": true}, to apply settings on save
  2. Before a PR: npm run lint:fix can be run locally to apply auto-fixes to issues that can be fixed

  3. Before merge (automatic): npm run lint is run against all PRs by a github action.

The ruleset is simply the base ruleset + Google.

Testing

This project uses jest for unit testing, using react-test-renderer to output to text-based snapshot files.

To run tests: npm test To rebuild snapshots when you know a component has changed: npm run test:update

The app has end-to-end tests using cypress which can be started by:

npm run cy:open

This will open the test runner. Choose any tests to run!

Localization

About

This project uses Gatsby Plugin Intl to manage internationalization and localization.

There are a number of components to this, but for the purposes of localization, this utizes the popular react-intl package from FormatJS.

This works by directing users to a locale-appropriate version of the page they wish to visit based on their browser settings, populated automatically at build time by the contents of json files in the src/intl directory.

Writing

For this library to work optimally, the following principles should be obeyed (see here for more detail):

  • All user-visible strings should be wrapped with the intl.formatMessage function or the <FormattedMessage> tag, with a description and defaultMessage set. Do not yet set the "id" tag, it will be generated for you. To generate files for localization, run npm run intl:extract to update the file at src/intl/en.json with the extracted contents of all FormattedMessage components.
  • Take note of the id in this file, and add this back as a parameter of your function/prop for your component (this is done to avoid naming collisions as detailed here)
  • All Link components should be imported from gatsby-plugin-intl instead to get the locale-appropriate link
  • All pages should import and use useIntl from gatsby-plugin-intl

We will later add integration with Github Actions to ensure that all messages have been formatted as a condition/check for committed code.

Translating

From there, send src/intl/en.json to translators. (Depending on the TMS (Translation Management System) in use, we may need a different format, so we can alter the settings in package.json if needbe). When they return with the other language file, e.g. es.json, place this in src/intl/ as a sibling to en.json.

Consuming

React-Intl works according to Google SEO best practices by creating locale-specific URLs.

To access a translated version of a page, e.g. pages/index.js, add the locale as a portion of the URL path, as follows:

  • English: localhost:8000/en/, or localhost:8000/ (the default fallback is English)

Environment Variables

There are 3 environment variables that can be set:

  1. DATA_SOURCE (required) = can be set to 'cdn' or 'local'. This is used to change where the tiles are sourced from. It is used in the constants file to determine which TILE_BASE_URL to use.
  2. SITE_URL = set this to change the base URL for the website's public html folder. If none is provided, then localhost:8000 is used. This is used for the site_map.xml file and robots.txt file. This is only used during production build aka npm build.
  3. PATH_PREFIX = set this to add an additional path(s) to SITE_URL. If none is provided then no additional paths are added to the SITE_URL. This is only used during production build aka npm build.

Note when setting environment variables in docker-compose, DATA_SOURCE is the only one that is applicable.

Feature Toggling

We have implemented very simple feature flagging for this app, accessible via URL parameters.

There are a lot of benefits to using feature toggles -- see Martin Fowler for a longer justification, but in short, they enable shipping in-progress work to production without enabling particular features for all users.

Viewing Features

To view features, add the flags parameter to the URL, and set the value to a comma-delimited list of features to enable, e.g. localhost:8000?flags=1,2,3 will enable features 1, 2, and 3.

In the future we may add other means of audience-targeting, but for now we will be sharing links with flags enabled as a means of sharing in-development funcitonality

Using Flags

When developing, to use a flag:

  1. Pass the Gatsby-provided location variable to your component. You have several options here:
    1. If your page uses the Layout component, you automatically get URLFlagProvider (see FlagContext for more info).
    2. If your page does not use Layout, you need to surround your component with a URLFlagProvider component and pass location. You can get location from the default props of the page (more here). See Index.tsx for an example.
  2. Use the useFlags() hook to get access to an array of flags, and check this array for the presence of the correct feature identifier. See J40Header for an example.

When to use flags:

  1. The feature is an experimental change
  2. The feature is an outcome of a spike where the direct work wasnt prioritized in the current sprint however there's a desire to help design to see / use it - eg. fullscreen / geolocation (future sprint purposes)
  3. The feature is something with multiple possible implementations that we want to give our team the experience of trying out separately for comparison purposes - eg. mapbox vs. openlayers, different low tile layers for low zoom

Debugging

  1. Ensure that VS code is open in the client folder
  2. Run the app with npm start in the terminal
  3. Click on the debugger (SHIFT+CMD+D on mac)
  4. Run the Debug Chrome configuration by hitting the green play button
  5. Install the CORS chrome extension in the browser that is launched by the debugger.
  6. Set breakpoints in VS code!

Package Versions

The following attemps to explain why certain packages versions have been chosen and what their current limitations are

package current version latest version using latest? how does it break?
gatsby 3.14.6 4.14.2 No when attempting to update - breaks all unit tests. Compatibility warning come up with all plugins but this doesn't seems to effect functionality. This is the latest version we can release without investigating unit tests.
gatsby-cli 3.14.2 4.15.2 No when attempting to update - breaks all unit tests. Compatibility warning come up with all plugins but this doesn't seems to effect functionality. This is the latest version we can release without investigating unit tests.
sass 1.32.12 1.52.3 No This version is needed to surpress the dart warnings on / as division for each component. See here for more information
uswds 2.13.3 3.0.2 No Needs to stay at 2.13.3 for peer dependency on trussworks
trussworks 3.1.0 3.1.0 No latest!