* feat(client): ts-migrate Flash/redux
* add app types
* convert Flash/redux/index to vanilla TS
* update redux types.ts
* use FlashState type over State type
* update typing
* fix: prettier errors I caused?
* fix: re-add comment I removed
* remove comment
Co-authored-by: Oliver Eyton-Williams <ojeytonwilliams@gmail.com>
* fix type to not include {}
* remove commented out code for future use
* remove unused initialState object
* rename Flash onClose prop to match action name
* directly type reducer to return state
Co-authored-by: Oliver Eyton-Williams <ojeytonwilliams@gmail.com>
Co-authored-by: moT01 <20648924+moT01@users.noreply.github.com>
Co-authored-by: Oliver Eyton-Williams <ojeytonwilliams@gmail.com>
* refactor: MultifileEditor to functional component.
* fix: make editor acquire focus once on mount
Now the editors can leave the dom (e.g. if a tab is clicked), but an
editor will only call for focus if the MultifileEditor itself remounts
* refactor: remove forbidden regions
We aren't using them and they're implemented badly. To recreate them, we
should simply track the editable region and update them when it's Range
changes.
* refactor: simplify the refs considerably
There's no point keeping an object with properties for all possible
editors when only one is created at once.
Instead of relying on heuristics like "does the current content
differ from the initial content?" this just resets if the reset button
has been pressed.
* feat(UI): language in the side menu is now a drop down. navigation items are now text wrapped
* fix: use redux navigation to redirect links instead
* fix: fix to use clientLocale as curent language instead
* fix: tests to use clientLocale
For legacy challenges, there's only one editor and it must be focused.
For project steps, only the editor with the editable region should call
for focus.