This is a huge commit and should be vetted pretty hard.
Features
Moved most of the business logic into redux action creators
Cleaned up the reducers and limited the scope of reducers to make them less of God objects
Made adding new preferences relatively extensible
Made adding new fields to ClassInput extensible
Refactored logic into their own separate classes, e.g look at DataFetcher, DataCleaner (also helps with unit tests)
Followed an input handler design pattern, where more complex components that took in user input had their own InputHandler that would handle all their logic, thereby keeping logic separated from rendering
Tried to remove most of the logic from rendering code so can swap out components easily
Made most of the core components (ClassInput, SchedulePreferences, ClassList) very modular
Testing
Added ~60 tests testing most of the components, their input handlers, and the business logic
Made schedule generation testable through adding many testing seams even though most of the code is obscured in a WebWorker
Added tests for SchedulePreferences, ClassInput, ClassList, ScheduleGeneration, ScheduleGenerationPreprocessor, and a few others, making sure that any future contributors would be able to look at the existing tests to build new ones
What I would like
Please checkout this branch and just mess with the UI and try out various features
If you find any issues report them in this conversation
We will compile a list of bugs and then make new issues with them, if they are high priority then I will fix them first.
The current frontend codebase is unmaintainable, and getting this commit through is the top priority for the frontend team.
This is a huge commit and should be vetted pretty hard.
Features
Testing
What I would like
The current frontend codebase is unmaintainable, and getting this commit through is the top priority for the frontend team.