Commit Graph
50 Commits
Author SHA1 Message Date
David Lechner c49f37f5e4 editor: lazy load
This makes the required changes needed to make the editor components
and sagas lazy-load to improve the time before the first render of the
app.

This is done by making sure we only import types from the monaco editor
module anywhere other than the saga and the component modules and using
React.lazy to lazy-load the component and start the sagas.

This cuts the main bundle time to less than 1/2 so load time should be
over twice as fast now.
2022-10-27 13:17:51 -05:00
David Lechner 7e726fffaf mpy/alerts: implement compiler error
This shows the output from mpy-cross and has a button to go to the
error.
2022-10-19 18:26:37 -05:00
David Lechner 5948952174 hub: fix tooltip when download complete
The tooltip was still showing "Downloading... 100%" after downloading
was complete instead of returning to the normal tooltip.
2022-10-17 13:44:21 -05:00
David Lechner bd0b276ea5 hub/sagas: fix scaling of download progress
This was missed in 06b204dd53.

Fixes: https://github.com/pybricks/pybricks-code/issues/1219
2022-10-17 13:44:21 -05:00
David Lechner e67ae1c52b use "error" when type is Error
This renames "err" to "error" when the type is Error for consistency
(fixes redux complaints about non-serializable err).
2022-10-17 13:44:21 -05:00
David Lechner 06b204dd53 hub/sagas: fix handleDownloadAndRun slicing
Some of the math was assuming i was incremented with ++ instead += chunkSize.
2022-10-17 11:16:28 -05:00
David Lechner 960a3163ed add support for Pybricks Profile v1.2.0
This adds support to the BLE Pybricks Profile v1.2.0. This includes a
new method to download and run programs and a new file format for the
user program.

Code for the old download and run is kept for backwards compatibility.
However, the PnP ID characteristic is no longer optional, so the
minimum Pybricks Profile is now v1.1.0.
2022-10-14 16:21:18 -05:00
9994e8f4b4 build(deps): bump jest and @types/jest (#1131)
* build(deps): bump jest and @types/jest

Bumps [jest](https://github.com/facebook/jest/tree/HEAD/packages/jest) and [@types/jest](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/jest). These dependencies needed to be updated together.

Updates `jest` from 28.1.3 to 29.0.3
- [Release notes](https://github.com/facebook/jest/releases)
- [Changelog](https://github.com/facebook/jest/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/jest/commits/v29.0.3/packages/jest)

Updates `@types/jest` from 28.1.8 to 29.0.1
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/jest)

---
updated-dependencies:
- dependency-name: jest
  dependency-type: direct:production
  update-type: version-update:semver-major
- dependency-name: "@types/jest"
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* [dependabot skip] Fix yarn.lock

* update test snapshots for jest 29

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: dependabot-fix <dependabot-fix@example.com>
Co-authored-by: David Lechner <david@pybricks.com>
2022-09-13 17:06:24 +00:00
David Lechner bbe7eb4df3 ble: avoid aliases for UUID constants 2022-07-15 18:05:48 -05:00
David Lechner ecd32e61b9 ble/actions: namespace actions
This way we don't have to use aliases when importing.
2022-07-15 11:16:23 -05:00
David Lechner 90cd4865e8 Add support for MPY ABI v6.
Pybricks firmware v3.2.0b2 has updated to MicroPython 1.19 which
includes breaking changes to the MPY binary file format.
2022-07-06 12:51:01 -05:00
David Lechner c158e4f0e2 editor: add editorGetValue() saga
This is another step towards removing the 'editor' context.
2022-03-26 13:44:55 -05:00
David Lechner 5dd61fa4c3 toolbar/buttons: consolidate buttons 2022-03-25 15:54:04 -05:00
David Lechner 9f254f035f i18n: use babel-loader plugin 2022-03-25 15:54:04 -05:00
David Lechner 46faff981d toolbar: add label to buttons
This improves accessability by letting us get buttons by the label.
2022-03-16 15:24:48 -05:00
David Lechner c75f3720f5 editor: drop EditorContext
We want to rely less on directly accessing the editor object.
2022-03-12 18:29:56 -06:00
David Lechner ecbcb09846 hub/ReplButton: convert to function component 2022-03-12 16:18:38 -06:00
David Lechner 8e4045449c src: use prop unpacking pattern
This makes the code a bit shorter by not having to use `props.` all of
the time. Also make everything VoidFunctionComponent while we are
touching this.
2022-03-12 16:07:31 -06:00
David Lechner 31fb3b9e4c test: drop state from AsyncSaga constructor params
This uses the real rootReducer to populate the initial state in the test
AsyncSaga. This way we don't have to populate default values. Since it
isn't used often, we can omit the parameter and just call the updateState()
method after creating the object if modifications are needed.
2022-03-11 16:04:09 -06:00
David Lechner 569217d5dc editor: don't put editor in redux store
The redux store should not have non-serializable objects like the editor
in it.
2022-03-02 18:56:47 -06:00
David Lechner a9f4eaa32d actions: simplify usage of Matchable
This removes use of the pseudo-internal toString() function and also
removes extraneous uses of ReturnType<>. Also, a new when() method
is added to simplify additional uses.
2022-02-26 12:43:10 -06:00
David Lechner 9641898a75 actions: refactor actions
The pattern we were using for actions required actions to be defined in
three places, an enum member containing the type string, an type
definition and a function. This combines all three of these into one by
using a helper function based on the ideas from [1].

[1]: https://phryneas.de/redux-typescript-no-discriminating-union
2022-02-25 17:58:30 -06:00
David Lechner cf8744a6cd actions: drop typed dispatch
This doesn't provide much benefit and is just one more rule to remember,
so we can do without it.
2022-02-24 17:16:52 -06:00
David Lechner 54ec447061 actions: added typed useDispatch() hook 2021-12-27 18:01:51 -06:00
David Lechner 8d26f768bf reducers: use typed useSelector hook
This refactors the code to use a typed useSelector() hook.
2021-12-27 17:48:41 -06:00
David Lechner 4c4061561d ble-nordic-uart-service: rename directory
This follows the pattern of other ble service directories.
2021-12-27 13:30:36 -06:00
David Lechner ade06ab2cc ble: add id and name to didConnect action 2021-12-27 12:38:51 -06:00
David Lechner e92d5c1511 ble-device-info-service: add actions
This adds actions that are triggered when the device info service
characteristics are read.
2021-12-27 12:38:51 -06:00
David Lechner 6a9e867fe9 ble-pybricks-service: rename statusReportEvent
New name is didReceiveStatusReport which is more consistent with existing
naming patterns.
2021-12-27 12:38:51 -06:00
David Lechner 57038360f4 hub/sagas: don't log to console in tests 2021-12-27 12:38:50 -06:00
David Lechner c9894de95e hub: convert StopButton to function 2021-12-27 12:38:50 -06:00
David Lechner f57bbdf8e2 hub: convert RunButton to function 2021-12-27 12:38:50 -06:00
David Lechner dbda94c33f hub: convert BluetoothButton to function 2021-12-27 12:38:50 -06:00
David Lechner 788b77fda0 notifications: add firmware version check
This adds a firmware version check that shows an error message if the
connected hub is running an older Pybricks firmware version.

Issue: https://github.com/pybricks/support/issues/482
2021-09-15 16:49:51 -05:00
David Lechner 4e2902730a hub: fix buttons not enabled after connection
A previous commit broke buttons after connecting since state all state
transitions were changed to be ignored if the current state was
"disconnected". This made it impossible to get into any other state.

This brings back use of the "unknown" state upon initial connection
to provide a path out of the "disconnected" state.

Fixes: 7a5aa75894
2021-07-06 10:53:56 -05:00
David Lechner d95c550248 editor: change from ace to monaco
This replaces the ace editor with the monaco editor. It fixes quite a
few small paper-cut bugs and should be easier to add code completion
to in the future.

Many of the snippets are omitted but can be added back later if needed.
Otherwise, we have tried to preserve the existing look and feel as much
as possible.
2021-07-02 20:59:09 -05:00
David Lechner 7a5aa75894 hub: fix bad hub runtime state when disconnected
This fixes a bad hub runtime state when the hub disconnects during a
download. This caused the run button in the UI to be enabled when the
hub was disconnected.

Issue: https://github.com/pybricks/support/issues/378
2021-07-01 11:58:04 -05:00
David Lechner 12f3f40e36 use spinner when bluetooth is connecting
It can take a while (especially on Windows) before the connection is
ready and the other buttons become enabled. So use a spinner to let
the user know that we are working on it.

Issue: https://github.com/pybricks/support/issues/315
2021-05-17 13:03:32 -05:00
David Lechner ec6753c314 yarn lint
rules seem to have changed a bit after upgrading packages
2021-05-11 12:45:43 -05:00
David Lechner e8c4472e50 Add progress bar for user program download. 2021-04-12 16:24:36 -05:00
David Lechner 1964c9c485 Add timeout while waiting for checksum
This adds a timeout while waiting for the checksum from the hub when
downloading and running a program. Without this, we can get stuck in
the "loading" state if the hub doesn't respond as expected. This can
happen, for example, if a program is started with the hub button at the
same time as the start button in Pybricks Code is pressed.

Issue: https://github.com/pybricks/support/issues/301
2021-04-12 13:24:10 -05:00
David Lechner 7f9e6bd4db Fix download and run race condition
It was possible for a program to start and finish running before the
final checksum message was received, which resulted in a bad state
(run button disabled).

This fixes it by using proper didStart/didFinish/didFailToFinish
actions for the download saga and updates the reducer to handle all
cases.
2021-04-07 12:28:36 -05:00
David Lechner a081c4a798 Fix download and run race condition
This fixes a race condition where the hub program running status flag
is received before the last checksum from the download process.

Issue: https://github.com/pybricks/support/issues/290
2021-04-07 11:27:40 -05:00
David Lechner 605a910746 Fix failing download and run
The firmware was changed to send status updates at a regular interval
which caused the hub state to change back to idle prematurely during
download and run. This caused any program more than one or two lines
long to fail.

Issue: https://github.com/pybricks/support/issues/290
2021-04-06 13:48:38 -05:00
David Lechner 76a5f8fe26 drop HubRuntimeStatusType Idle and Running
These are no longer used
2021-04-06 13:42:26 -05:00
David Lechner 4b3a6fea5e hub: fix missed notification when connecting
This fixes the first notification being missed due to the notification
handler not being started until after notifications are enabled.

It also fixes the DidConnect action changing the state to Unknown after
a notification was received that set the state to a known value.
2021-03-10 10:30:15 -06:00
David Lechner 430147487e implement Pybricks service stop command 2021-03-10 10:30:15 -06:00
David Lechner 61c34fc4b1 implement BLE Pybricks service status notifications
This is the beginning of the BLE Pybricks service implementation, so
changes are made to get a handle to the Pybricks control characteristic
and enable notifications.

Currently, only one event (the status report event) and no commands are
implemented on this characteristic.

The new status report event replaces monitoring the UART for >>>>
strings to get the current hub state.

Also includes some minor cleanup in the ble-uart/actions for consistency.
2021-03-10 10:30:15 -06:00
David Lechner e5073399a0 drop explicit state interfaces
This could cause subtle bugs like the one fixed here where license
was renamed to licenses.
2021-02-01 10:26:05 -06:00
David Lechner 6f204a65f6 reorganize src/ directory
Makes for much less scrolling/jumping around.

https://redux.js.org/style-guide/style-guide#structure-files-as-feature-folders-or-ducks
2021-02-01 10:26:05 -06:00