Commit Graph
882 Commits
Author SHA1 Message Date
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
dependabot[bot]andDavid Lechner bf2dec362d build(deps): bump @blueprintjs/core from 4.13.0 to 4.14.1 (#1432)
* build(deps): bump @blueprintjs/core from 4.13.0 to 4.14.1

Bumps [@blueprintjs/core](https://github.com/palantir/blueprint/tree/HEAD/packages/core) from 4.13.0 to 4.14.1.
- [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.14.1/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>

* fix breaking path name change

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-11 15:54:05 +00:00
dependabot[bot]andDavid Lechner 9be97c7fdd build(deps-dev): bump prettier from 2.8.1 to 2.8.2 (#1426)
* build(deps-dev): bump prettier from 2.8.1 to 2.8.2

Bumps [prettier](https://github.com/prettier/prettier) from 2.8.1 to 2.8.2.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/2.8.1...2.8.2)

---
updated-dependencies:
- dependency-name: prettier
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

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

* yarn lint

Fixes breaking changes in eslint.

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-09 15:28:56 +00:00
David Lechner 5330821a96 pybricksMicropython: use new PythonError type property
This was introduced in Pyodide 0.22 and saves us from having to parse
the message for the type.

Could also affect https://github.com/pybricks/support/issues/772 (but
there is no known reproducible case to check it).
2023-01-04 11:20:52 -06:00
David Lechner 62d7fdff36 editor/sagas: disable code completion trigger on space
This gets in the way when typing comments and often results in
accepting a completion that was not intended.

Fixes: https://github.com/pybricks/support/issues/894
2022-12-30 16:07:52 -06:00
David Lechner 7d5c9710e5 editor/sagas: fix signature trigger characters
The intended behavior is that comma should trigger signature help when
it is not showing. retrigger only triggers if already showing.
2022-12-30 16:04:48 -06:00
David Lechner d119cb564e editor: fix find widget z-index
When open, the find widget was visible above modal dialogs because
of z-index.
2022-12-30 14:08:36 -06:00
David Lechner ca50d60b2c app: fix vertical resizing issues
Some new issues with layout when resizing the browser window vertically
were caused either by recent xterm updates or other recent style changes.

This works around those issues.
2022-12-30 14:08:36 -06:00
David Lechner 810ee362c6 editor/sagas: maintain jedi sort order
Now that jedi returns names that start with `_`, we need to make sure
they don't end up at the top of the list for completions.
2022-12-28 17:23:59 -06:00
David Lechner e153ffe295 pybricksMicropython: fix import completion for user module
The pybricks_jedi package was filtering on only pybricks modules but
now has a feature to amend the filter to include user modules.

Fixes: https://github.com/pybricks/support/issues/759
2022-12-28 17:04:23 -06:00