* chore(packages): Update redux utils
* feat(Panes): Invert control of panes map creation
* feat(Modern): Add view
* feat(Panes): Decouple panes from Challenges
* fix(Challenges): Decouple challenge views from panes map
* fix(Challenge/views): PanesMap => mapStateToPanesMap
This clarifies what these functions are doing
* fix(Challenges): Add view type
* fix(Panes): Remove unneeded panes container
* feat(Panes): Invert control of pane content render
This decouples the Panes from the content they render, allowing for
greater flexibility.
* feat(Modern): Add side panel
This is common between modern and classic
* feat(seed): Array to string file content
* fix(files): Modern files should be polyvinyls
* feat(Modern): Create editors per file
* fix(seed/React): Incorrect keyfile name
* feat(Modern): Highligh jsx correctly
This adds highlighting for jsx. Unfortunately, this disables linting for
non-javascript files as jshint will only work for those
* feat(rechallenge): Add jsx ext to babel transformer
* feat(seed): Normalize challenge files head/tail/content
* refactor(rechallenge/build): Rename function
* fix(code-storage): Pull in files from localStorage
* feat(Modern/React): Add Enzyme to test runner
This enables testing of React challenges
* feat(Modern): Add submission type
* refactor(Panes): Rename panes map update action
The default text of the legend is confusing given the low range of
values used. Cal-heatmap expects higher legend values, such as [10, 20,
30, 40], rather than [1, 2, 3]. This change will hopefully make the
mouseover text for the legend a little less confusing.
BREAKING CHANGE: None
Closes#16124
* feat(seed): Add modern challenge
* chore(react): Use prop-types package
* feat: Initial refactor to redux-first-router
BREAKING CHANGE: Everything is different!
* feat: First rendering
* feat(routes): Challenges view render but failing
* fix(Challenges): Remove contain HOC
* fix(RFR): Add params selector
* fix(RFR): :en should be :lang
* fix: Update berks utils for redux
* fix(Map): Challenge link to arg
* fix(Map): Add trailing slash to map page
* fix(RFR): Use FCC Link
Use fcc Link to get around issue of lang being undefined
* fix(Router): Link to is required
* fix(app): Rely on RFR state for app lang
* chore(RFR): Remove unused RFR Link
* fix(RFR): Hydrate initial challenge using RFR and RO
* fix: Casing issue
* fix(RFR): Undefined links
* fix(RFR): Use onRoute<name> convention for route types
* feat(server/react): Add helpful redux logging/throwing
* fix(server/react): Strip out nonjson from state
This prevents thunks in routesMap from breaking serialization
* fix(RFR/Link): Should accept any renderable
* fix(RFR): Get redirects working
* fix(RFR): Redirects and not found's
* fix(Map): Move challenge onClick handler
* fix(Map): Allow Router.link to handle clicks after onClick
* fix(routes): Remove react-router-redux
* feat(Router): Add lang to all route actions by default
* fix(entities): Only fetch challenge if not already loaded
* fix(Files): Move files to own feature
* chore(Challenges): Remove vestigial hints logic
* fix(RFR): Update challenges on route challenges
* fix(code-storage): Should use events instead of commands
* fix(Map): ClickOnMap should not hold on to event
* chore(lint): Use eslint-config-freecodecamp
Closes#15938
* feat(Panes): Update panes on route instead of render
* fix(Panes): Store panesmap and update on fetchchallenges
* fix(Panes): Normalize panesmaps
* fix(Panes): Remove filter from createpanemap
* fix(Panes): Middleware on location meta object
* feat(Panes): Filter preview on nonhtml challenges
* build(babel): Add lodash babel plugin
* chore(lint): Lint js files
* fix(server/user-stats): Remove use of lodash chain
this interferes with babel-plugin-lodash
* feat(dev): Add remote redux devtools for ssr
* fix(Panes): Dispatch mount action
this is needed to trigger window/divider epics
* fix(Panes): Getpane to use new panesmap format
* fix(Panes): Always update panes after state
this lets the panes logic be affected by changes in state
Earlier we did not need emails for everyone, this is not the case
anymore. We now require emails, and all other auth mechanisms are
now deprecated for new users.