This introduces Redux back into Treeherder. While redux is often considered
unnecessary for simple apps in favor of Context, Treeherder is not simple.
Using Redux here allows us to abstract out certain functionality into
libraries that can be self-contained. And it does a better job of managing
the functions needed to modify the state in these areas. This is the first
context I am converting and will likely have minimal (if any) noticeable
performance gain. But converting SelectedJob and Pusehs should end up having
a larger impact.
This is the second part to the Font Awesome conversion started in #4556.
After this PR, all that is left is the Perfherder parts, which can be
converted from the inline HTML style SVG+JS to using
`@fortawesome/react-fontawesome` as part of the React conversion.
Since it's more reliable (and strict) at code formatting than ESLint.
We use it via an ESLint plugin, and so disable the style-related AirBnB
preset rules, leaving the AirBnB guide to handle only correctness and
best practices rules.
It's highly encouraged to use an IDE integration or Git commit hook
to run Prettier (or `yarn lint --fix`) automatically. See:
* https://prettier.io/docs/en/editors.html
* https://prettier.io/docs/en/precommit.html
We may consider enabling a git commit hook out of the box (using eg
Husky) in the future, however they have previously been known to
interfere with partial-staging workflows, so would need to test the
fixes they have made for them thoroughly first.
In future PRs we may also want to start formatting JSON/CSS/Markdown
using Prettier too.