Commit Graph
891 Commits
Author SHA1 Message Date
David Lechner df84e41061 status-bar: allow selection version
This is useful for copy/pasting version for support.

Fixes: https://github.com/pybricks/support/issues/1083
2023-05-26 15:25:49 -05:00
David Lechner fc89c7b329 explorer: active file after duplicating
When duplicating a file users expect the file to be opened as in other
applications.

Fixes: https://github.com/pybricks/support/issues/1084
2023-05-26 11:13:31 -05:00
David Lechner 57c2b8a28b editor: add undo stop when switching model
Since we share the same editor instance with multiple models, we need
to ensure undo stack consistency when changing the model, otherwise
we can lose some history, e.g. if a not active model is modified.
2023-05-18 17:06:31 -05:00
David Lechner 7351dfb95c editor: fix replacing file when open in editor
When we import/replace a file that is open in an editor, instead of
modifying the file in storage, we need to modify the file in the editor.
This allows the modification to be pushed on the undo stack so that
the user can undo the change in case it wrote over any of their recent
changes.

Issue: https://github.com/pybricks/support/issues/975
2023-05-18 17:06:31 -05:00
David Lechner 3fc275eaed fix node 18 type resolution error
After updating to @types/node 18.x, we started getting an error when
mocking FileWithHandle. For some reason, the type hints don't allow
for partial implementation anymore.

Hack around the problem by just casting the partial implementation.
2023-05-18 09:42:07 -05:00
David Lechner c733881815 fix some test console errors
The react testing library prints errors to the console about not using
act(). This adds fixes/workarounds for most cases.
2023-05-17 16:33:47 -05:00
David Lechner bf4670b25d update to react 18
We were stuck on react 16.x for a long time but dependencies seem to
have caught up enough that migration is trivial now.
2023-05-17 16:33:47 -05:00
dependabot[bot]andDavid Lechner b603a7c3b8 build(deps): bump @blueprintjs/core from 4.18.0 to 4.19.0 (#1741)
* build(deps): bump @blueprintjs/core from 4.18.0 to 4.19.0

Bumps [@blueprintjs/core](https://github.com/palantir/blueprint/tree/HEAD/packages/core) from 4.18.0 to 4.19.0.
- [Release notes](https://github.com/palantir/blueprint/releases)
- [Changelog](https://github.com/palantir/blueprint/blob/develop/CHANGELOG.md)
- [Commits](https://github.com/palantir/blueprint/commits/@blueprintjs/core@4.19.0/packages/core)

---
updated-dependencies:
- dependency-name: "@blueprintjs/core"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

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

* replace use of deprecated Toaster type

Fixes breaking change where Toaster is now both a class and an interface.

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: David Lechner <david@pybricks.com>
2023-05-16 16:09:47 +00:00
David Lechner b4db152fca index.scss: change info toast color
The adjusted color made it look like the toast was disabled. Having
buttons the same color as the toast is a bit weird but consistent
with the Blueprintjs style for toasts.
2023-05-15 16:33:47 -05:00
David Lechner 6d844b78e3 ble-pybricks-service/protocol: add UserProgramMultiMpy6Native6p1
This adds a new flag from Pybricks Profile v1.3.0 for documentation
purposes. We currently don't support native modules in Pybricks Code
so we aren't using this for now.
2023-05-01 12:54:57 -05:00
David Lechner e4b6ea0960 editor: don't paste on middle click to close tab
To avoid the Linux feature of pasting on middle click, we need to
consume the mouse up event in the browser on middle click instead of
mouse down.

This also sets the `selectionClipboard` editor option to false which
should disable the feature altogether in the monaco editor but the
setting seems to be broken in the browser[1].

[1]: https://github.com/microsoft/vscode/issues/181050

Fixes: https://github.com/pybricks/support/issues/1046
2023-04-27 12:12:08 -05:00
David Lechner be7112c123 hub/sagas: fix not dispatching 100% progress
We were calling the action creator without actually dispatching the
action.

Fixes: https://github.com/pybricks/support/issues/1044
2023-04-25 12:02:30 -05:00
David Lechner 1219a377d4 ble/sagas: show alert when Pybricks Profile is newer
If the user sideloads a firmware that has communication features that
are newer than what is supported by the app, then show a warning message.
2023-04-24 17:38:53 -05:00
David Lechner 618f7840da always use * as for semver imports
The imported names are very short, so it is helpful to always include
semver.
2023-04-24 17:38:53 -05:00
David Lechner e3cfe856b9 index.scss: use pybricks blue for info toasts
This makes toasts fit better in the color scheme.
2023-04-24 11:18:13 -05:00
David Lechner 02a0d974f3 hub/sagas: don't stop user program after connect
Since we now have periodic status messages, we don't need to do anything
to get into a known state.

This caused unexpected behavior when connecting to a hub that is already
connected in a second window.
2023-04-19 13:03:48 -05:00
David Lechner 337209744c add support for Pybricks Profile v1.3.0 2023-04-19 13:03:48 -05:00
David Lechner 63a1026dae ble-pybricks-service: document @since 2023-04-19 13:03:48 -05:00
David Lechner 17ab06d32d hub/reducers: additional coverage 2023-04-19 13:03:48 -05:00
David Lechner c8002c743a hub/reducers: fix older firmware mpy version heuristics 2023-04-19 13:03:48 -05:00
David Lechner a28ea572ae status-bar: fix height styling
Since this is display: flex, it needs min/max-height instead of plain
height.
2023-04-05 19:27:48 -05:00
David Lechner 1e764b4e95 ble/sagas: spawn ble writes
Code depends on always receiving a didWrite/didFailToWrite, however
when a hub disconnected, these tasks were being cancelled. Spawning
protects them from cancellation.
2023-04-01 15:17:22 -05:00
David Lechner c8e7e86da0 toolbar/buttons/bluetooth: show progress on disconnect 2023-04-01 13:52:03 -05:00
David Lechner 379965e48f toolbar/buttons: debounce short progress
Don't flash progress for short actions like starting repl and stopping
user program. If the hub becomes disconnected, these actions can take
a long time before failing and in that case, we do want to show the
progress indicator.
2023-04-01 13:38:19 -05:00
David Lechner 3baaff5b61 ble/sagas: avoid Linux 5 second disconnect when possible
If the user did not request disconnection, then we know this is a true
disconnect event and not an early one so we don't need the delay hack
in that case.

Issue: https://github.com/pybricks/support/issues/600
Issue: https://github.com/pybricks/support/issues/1021
2023-04-01 13:38:19 -05:00
David Lechner 73248fe6aa hub/reducers: simplify Disconnected state logic
Reduce duplicate code by only checking for current state == Disconnected
once.
2023-04-01 13:38:19 -05:00
David Lechner 69605ada4a hub/reducers: consolidate command in progress states
The Loaded state is not used anywhere else, so we can replace it with
the Unknown state. Then we can make all other command-in-progress
states (start repl/stop user program) the same as download and run.
When the command completes, the hub is in an unknown state until a
status message is received. The Disconnected states overrides all other
states.
2023-04-01 13:38:19 -05:00
David Lechner ce29984be5 hub/sagas: show error if stopping failed
- Finish TODO to show error if stopping fails.
- Make button busy in case waiting for failure takes a long time.
2023-04-01 13:38:19 -05:00
David Lechner be3afa167a hub/sagas: fix error message not shown when starting repl
- Add check for repl start command success/fail.
- Show error message on fail.
- Rename start repl action.
- Add new did start/did fail to start repl actions.
- Change terminal saga to use did start repl action to focus terminal.
- Add more tests.
2023-04-01 13:38:19 -05:00
David Lechner 70020275a7 ble/alerts/Disconnected: better error message for disconnected
WebBluetooth generally uses DomException with name NetworkError to mean
that Bluetooth is disconnected, so we can use that to provide a helpful
error message.
2023-04-01 13:38:19 -05:00
David Lechner 19f6862bb5 hub/reducers: change hub runtime state when disconnecting
When disconnect is requested, we should not longer allow interacting
with the hub, so we say the runtime state is unknown until it is
confirmed to be disconnected.

Fixes: https://github.com/pybricks/support/issues/1021
2023-04-01 13:38:19 -05:00
David Lechner be32c37f18 editor/sagas: focus editor when activated
When a file is activated, it is an indication that the user wants to
edit the file right now, so the editor should be focused.
2023-03-28 10:44:23 -05:00
David Lechner 2f5d11b648 LicenseDialog: fix console errors in tests
useFetch() was trying to actually fetch the license file and mocking
fetch() caused errors about not wrapping code in act(). So instead,
we can avoid all errors by just mocking useFetch() instead.
2023-03-10 18:16:27 -06:00
David Lechner 3114ac4e2b mpy/sagas: fix tests attempting to load .wasm via http
Since we are using jsdom, the emscripten generated code doesn't use
the node filesystem lookup for .wasm files. But then it falls back to
node for file:// urls, but this doesn't work because node treats file:
as a drive letter.

We can work around this by modifying the node path.normalize() function
to return the correct path.

Fixes: https://github.com/pybricks/pybricks-code/issues/1584
2023-03-10 18:16:27 -06:00
David Lechner d88ce8998f test: wrap all user calls in act()
Some user events trigger react dom changes. These need to be wrapped in
act() to avoid a warning printed to the console. To be save, we wrap
all instances.
2023-03-10 18:16:27 -06:00
David Lechner 7d3c77664c fix vertical button margin in dialogs 2023-03-08 18:06:49 -06:00
David Lechner af160c99a8 more code coverage 2023-03-08 15:07:16 -06:00
David Lechner 6a9405e653 explorer: add support for importing ZIP
Also add a new dialog to get user input when file names conflict.

Previously, we were not supplying a list of existing files, so existing
files were silently written over.

Fixes: https://github.com/pybricks/support/issues/833
2023-03-07 14:31:12 -06:00
David Lechner 68d7932ef9 NewFileWizard: fix setUseTemplate casing 2023-03-07 14:31:12 -06:00
David Lechner bad7f1b066 app/constants: add zip file extension and mime type 2023-03-07 14:31:12 -06:00
David Lechner ac00b82cab firmware/installPybricksDialog: fix hub name error icon style 2023-02-16 14:10:07 -06:00
David Lechner 63597e4b88 firmware/installPybricksDialog: only call useFirmware() once
We were unpacking the firmware twice. Instead, we should only call
useFirmware() once and pass the results as props.
2023-02-16 14:10:07 -06:00
David Lechner a841562c6c firmware/installPybricksDialog: remove hard-coded hub name size check
The UI has been rearranged so we now have firmware metadata available
when we validate the hub name.
2023-02-16 14:10:07 -06:00
David Lechner 13c69918e1 firmware/installPybricksDialog: add basic metadata check
This will catch some errors. Mainly this is to ensure we show an error
if someone tries to use, e.g. a NXT firmware file that isn't supported
in Pybricks Code yet. Error message isn't great but we don't expect this
to be hit often, if ever, by non-developers.
2023-02-16 14:10:07 -06:00
David Lechner c8bcddbffd firmware/installPybricksDialog: fix use of useCustomFirmware()
useCustomFirmware() was called multiple times with the same file which
resulted in the same file being parsed 3 times. Instead we should only
call useCustomFirmware() and pass the results as props instead.
2023-02-16 14:10:07 -06:00
David Lechner 0d3447a0b6 editor: show error message on fail to activate
When gotoError fails to activate a file, we need to show an error
message, otherwise it just appears to the user that the button is
broken.

Fixes: https://github.com/pybricks/support/issues/924
2023-02-13 16:13:58 -06:00
dependabot[bot]andDavid Lechner 64625bec3a build(deps): bump monaco-editor from 0.34.1 to 0.35.0 (#1495)
* build(deps): bump monaco-editor from 0.34.1 to 0.35.0

Bumps [monaco-editor](https://github.com/microsoft/monaco-editor) from 0.34.1 to 0.35.0.
- [Release notes](https://github.com/microsoft/monaco-editor/releases)
- [Changelog](https://github.com/microsoft/monaco-editor/blob/main/CHANGELOG.md)
- [Commits](https://github.com/microsoft/monaco-editor/commits/v0.35.0)

---
updated-dependencies:
- dependency-name: monaco-editor
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

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

* yarn dedupe

* work around jest/monaco-editor performance.mark issue

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: David Lechner <david@pybricks.com>
2023-02-08 16:06:44 +00:00
David Lechner 876f1f2118 toolbar/ActionButton: drop workaround for https://github.com/palantir/blueprint/issues/5889
This was fixed in @blueprintjs/popover2 v1.12.1
2023-02-01 11:05:43 -06:00
dependabot[bot]andDavid Lechner 7b0dc47b04 build(deps): bump @blueprintjs/popover2 from 1.11.3 to 1.12.0 (#1454)
* build(deps): bump @blueprintjs/popover2 from 1.11.3 to 1.12.0

Bumps [@blueprintjs/popover2](https://github.com/palantir/blueprint/tree/HEAD/packages/core) from 1.11.3 to 1.12.0.
- [Release notes](https://github.com/palantir/blueprint/releases)
- [Changelog](https://github.com/palantir/blueprint/blob/develop/CHANGELOG.md)
- [Commits](https://github.com/palantir/blueprint/commits/@blueprintjs/popover2@1.12.0/packages/core)

---
updated-dependencies:
- dependency-name: "@blueprintjs/popover2"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

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

* fix breaking change in blueprintjs popover2

work around https://github.com/palantir/blueprint/issues/5889

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: David Lechner <david@pybricks.com>
2023-01-24 16:18:23 +00:00
dependabot[bot]andDavid Lechner a50cc9801c build(deps-dev): bump eslint-plugin-import from 2.26.0 to 2.27.2 (#1435)
* build(deps-dev): bump eslint-plugin-import from 2.26.0 to 2.27.2

Bumps [eslint-plugin-import](https://github.com/import-js/eslint-plugin-import) from 2.26.0 to 2.27.2.
- [Release notes](https://github.com/import-js/eslint-plugin-import/releases)
- [Changelog](https://github.com/import-js/eslint-plugin-import/blob/main/CHANGELOG.md)
- [Commits](https://github.com/import-js/eslint-plugin-import/compare/v2.26.0...v2.27.2)

---
updated-dependencies:
- dependency-name: eslint-plugin-import
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

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

* fix breaking changes in eslint sort order

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: David Lechner <david@pybricks.com>
2023-01-12 16:50:38 +00:00