Address some code review feedback
Correct error code in test
Don't try to send emails to empty addresses
Add tests for subscriptions
Add tests for Next Steps email
Fix specs
Add reason for disabled test
Attempting to use a react-component-like system, where the Surface simply emits everything that
happens through the shared GameUIState, and the parent (in this case the ThangsTabView, but theoretically
anything that uses the surface) handles the events manually, to enforce desired behavior for that particular
context.
It's nice that all the event handling is centralized, but it's still a bit of a mess, and not thoroughly
stateful. But it's a start. This is in preparation for allowing multi-thang selection and manipulation
in the level editor.
Update classroom and gameplay Ux to surface practice levels as 3a, 3b,
etc.
Update next level logic to leverage practice levels based on per level
completion playtime thresholds.
Patrol buster and patrol buster A are live for testing.
Fix a few classroom Ux progress hover bubble info bugs.
Closes#3767
* Initial pass adding new game-dev level type.
* Fix a failing test with updated LevelSystem required properties
* Bring back normal Angel worker timeout times
* Fix another failing LevelSystem test since removing propertyDocumentation
* Switch from auth.loginUser to User.loginPasswordUser with Promise
* Remove a cascade of unused views that were using auth.loginUser: StudentLogInModal, StudentSignupModal, HourOfCodeView
* Also remove auth.createUser
Use selected hero in Course mode play
Show selected hero on Courses (in progress)
Add hero select modal
Use short names, only show warriors
Use box-shadow instead of borders
Add tests for HeroSelectModal
Refactor modal opening test
Address code review feedback
* Do not cache campaign
* Instead have an on leave message if there are unsaved changes
* Propagate campaignIndex values to campaign and levels so that they signal a change in order
The save modal seems to have a lot of issues with identifying what models have
changed. I tried using different methods, but none were consistent. Moving on
to other bugs.