Browse Source

Update protobufs

pull/39/head
Sacha Weatherstone 4 years ago
parent
commit
4e45990ef5
No known key found for this signature in database GPG Key ID: 7AB2D7E206124B31
  1. 6
      package.json
  2. 110
      pnpm-lock.yaml
  3. 2
      src/components/Dialog/PeersDialog.tsx
  4. 4
      src/components/PageComponents/Config/Bluetooth.tsx
  5. 15
      src/components/PageComponents/Config/Device.tsx
  6. 51
      src/components/PageComponents/Config/Network.tsx
  7. 2
      src/components/PageComponents/Config/Position.tsx
  8. 13
      src/components/PageComponents/Config/Power.tsx
  9. 6
      src/core/stores/deviceStore.ts
  10. 6
      src/pages/Config/DeviceConfig.tsx
  11. 5
      src/validation/config/device.ts
  12. 2
      src/validation/config/lora.ts
  13. 20
      src/validation/config/network.ts
  14. 7
      src/validation/config/power.ts
  15. 17
      src/validation/config/wifi.ts

6
package.json

@ -22,7 +22,7 @@
"@emeraldpay/hashicon-react": "^0.5.2",
"@hookform/resolvers": "^2.9.7",
"@meshtastic/eslint-config": "^1.0.8",
"@meshtastic/meshtasticjs": "^0.6.97",
"@meshtastic/meshtasticjs": "^0.6.98",
"base64-js": "^1.5.1",
"class-transformer": "^0.5.1",
"class-validator": "^0.13.2",
@ -46,7 +46,7 @@
"devDependencies": {
"@types/chrome": "^0.0.196",
"@types/geodesy": "^2.2.3",
"@types/node": "^18.7.15",
"@types/node": "^18.7.16",
"@types/react": "^18.0.18",
"@types/react-dom": "^18.0.6",
"@types/w3c-web-serial": "^1.0.2",
@ -56,7 +56,7 @@
"rollup-plugin-visualizer": "^5.8.1",
"tar": "^6.1.11",
"tslib": "^2.4.0",
"typescript": "^4.8.2",
"typescript": "^4.8.3",
"vite": "^3.1.0",
"vite-plugin-environment": "^1.1.2"
}

110
pnpm-lock.yaml

@ -4,10 +4,10 @@ specifiers:
'@emeraldpay/hashicon-react': ^0.5.2
'@hookform/resolvers': ^2.9.7
'@meshtastic/eslint-config': ^1.0.8
'@meshtastic/meshtasticjs': ^0.6.97
'@meshtastic/meshtasticjs': ^0.6.98
'@types/chrome': ^0.0.196
'@types/geodesy': ^2.2.3
'@types/node': ^18.7.15
'@types/node': ^18.7.16
'@types/react': ^18.0.18
'@types/react-dom': ^18.0.6
'@types/w3c-web-serial': ^1.0.2
@ -35,7 +35,7 @@ specifiers:
rollup-plugin-visualizer: ^5.8.1
tar: ^6.1.11
tslib: ^2.4.0
typescript: ^4.8.2
typescript: ^4.8.3
vite: ^3.1.0
vite-plugin-environment: ^1.1.2
zustand: 4.1.1
@ -44,7 +44,7 @@ dependencies:
'@emeraldpay/hashicon-react': 0.5.2
'@hookform/resolvers': 2.9[email protected]
'@meshtastic/eslint-config': 1.0.8
'@meshtastic/meshtasticjs': 0.6.97
'@meshtastic/meshtasticjs': 0.6.98
base64-js: 1.5.1
class-transformer: 0.5.1
class-validator: 0.13.2
@ -68,7 +68,7 @@ dependencies:
devDependencies:
'@types/chrome': 0.0.196
'@types/geodesy': 2.2.3
'@types/node': 18.7.15
'@types/node': 18.7.16
'@types/react': 18.0.18
'@types/react-dom': 18.0.6
'@types/w3c-web-serial': 1.0.2
@ -78,7 +78,7 @@ devDependencies:
rollup-plugin-visualizer: 5.8.1
tar: 6.1.11
tslib: 2.4.0
typescript: 4.8.2
typescript: 4.8.3
vite: 3.1.0
vite-plugin-environment: 1.1[email protected]
@ -524,28 +524,28 @@ packages:
/@meshtastic/eslint-config/1.0.8:
resolution: {integrity: sha512-Jzwaf3TyYFGeFuxLRQA5Yj5Rmz097VleFQUkswXH9nvLO81JjJbHgJWbHQ6RpxC31q/2hWV03QdaH98swpYcQA==}
dependencies:
'@typescript-eslint/eslint-plugin': 5.36.2_iurrlxgqcgk5svigzxakafpeuu
'@typescript-eslint/parser': 5.36.2_yqf6kl63nyoq5megxukfnom5rm
'@typescript-eslint/eslint-plugin': 5.36.2_2l2r3i3lm6jysqd4ac3ql4n2mm
'@typescript-eslint/parser': 5.36.2_itqs5654cmlnjraw6gjzqacppi
eslint: 8.23.0
eslint-config-prettier: 8.5[email protected]
eslint-import-resolver-typescript: 2.7.1_faomjyrlgqmwswvqymymzkxcqi
eslint-plugin-eslint-comments: 3.2[email protected]
eslint-plugin-import: 2.26.0_ijmu6epd3rsbb7y7umh7oqxvja
eslint-plugin-react: 7.31.7[email protected]
eslint-plugin-react: 7.31.8[email protected]
eslint-plugin-react-hooks: 4.6[email protected]
prettier: 2.7.1
prettier-plugin-tailwindcss: 0.1[email protected]
typescript: 4.8.2
typescript: 4.8.3
transitivePeerDependencies:
- eslint-import-resolver-webpack
- supports-color
dev: false
/@meshtastic/meshtasticjs/0.6.97:
resolution: {integrity: sha512-r1QEQLn560VD+R/AE/xXNjh95ksSwfZdocmotJ3A0yQqw+JxOIcZ6ku8ZhXYPYmjhPGo6bxFb6FlvIRB/7xdwA==}
/@meshtastic/meshtasticjs/0.6.98:
resolution: {integrity: sha512-ZEG0q2ZSfBqoS49ESjrnDou3NGZozd8/So586FtTB96J1RsQuWukZJu3vE1eWvzQ1yP3Oweg14s+Wycq1J2yTA==}
dependencies:
'@meshtastic/eslint-config': 1.0.8
'@protobuf-ts/runtime': 2.8.0
'@protobuf-ts/runtime': 2.8.1
'@serialport/stream': 10.3.0
prettier: 2.7.1
serialport: 10.4.0
@ -576,8 +576,8 @@ packages:
fastq: 1.13.0
dev: false
/@protobuf-ts/runtime/2.8.0:
resolution: {integrity: sha512-70LH3oLG5E608jTP+v4nYyinvrpEgkGy0p8gJsog3fwlEuJgARldOQAk+ci5StZUOXHB7MVw0vZ/T0shqIe/pw==}
/@protobuf-ts/runtime/2.8.1:
resolution: {integrity: sha512-D9M5hSumYCovIfNllt7N6ODh4q+LrjiMWtNETvooaf+a2XheZJ7kgjFlsFghti0CFWwtA//of4JXQfw9hU+cCw==}
dev: false
/@segment/react-tiny-virtual-list/[email protected]:
@ -766,8 +766,8 @@ packages:
'@types/pbf': 3.0.2
dev: false
/@types/node/18.7.15:
resolution: {integrity: sha512-XnjpaI8Bgc3eBag2Aw4t2Uj/49lLBSStHWfqKvIuXD7FIrZyMLWp8KuAFHAqxMZYTF9l08N1ctUn9YNybZJVmQ==}
/@types/node/18.7.16:
resolution: {integrity: sha512-EQHhixfu+mkqHMZl1R2Ovuvn47PUw18azMJOTwSZr9/fhzHNGXAJ0ma0dayRVchprpCj0Kc1K1xKoWaATWF1qg==}
dev: true
/@types/pbf/3.0.2:
@ -815,7 +815,7 @@ packages:
resolution: {integrity: sha512-w7hEHXnPMEZ+4nGKl/KDRVpxkwYxYExuHOYXyzIzCDzEZ9ZCGMAewulr9IqJu2LR4N37fcnb1XVeuZ09qgOxhA==}
dev: true
/@typescript-eslint/eslint-plugin/5.36.2_iurrlxgqcgk5svigzxakafpeuu:
/@typescript-eslint/eslint-plugin/5.36.2_2l2r3i3lm6jysqd4ac3ql4n2mm:
resolution: {integrity: sha512-OwwR8LRwSnI98tdc2z7mJYgY60gf7I9ZfGjN5EjCwwns9bdTuQfAXcsjSB2wSQ/TVNYSGKf4kzVXbNGaZvwiXw==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
@ -826,23 +826,23 @@ packages:
typescript:
optional: true
dependencies:
'@typescript-eslint/parser': 5.36.2_yqf6kl63nyoq5megxukfnom5rm
'@typescript-eslint/parser': 5.36.2_itqs5654cmlnjraw6gjzqacppi
'@typescript-eslint/scope-manager': 5.36.2
'@typescript-eslint/type-utils': 5.36.2_yqf6kl63nyoq5megxukfnom5rm
'@typescript-eslint/utils': 5.36.2_yqf6kl63nyoq5megxukfnom5rm
'@typescript-eslint/type-utils': 5.36.2_itqs5654cmlnjraw6gjzqacppi
'@typescript-eslint/utils': 5.36.2_itqs5654cmlnjraw6gjzqacppi
debug: 4.3.4
eslint: 8.23.0
functional-red-black-tree: 1.0.1
ignore: 5.2.0
regexpp: 3.2.0
semver: 7.3.7
tsutils: 3.21[email protected].2
typescript: 4.8.2
tsutils: 3.21[email protected].3
typescript: 4.8.3
transitivePeerDependencies:
- supports-color
dev: false
/@typescript-eslint/parser/5.36.2_yqf6kl63nyoq5megxukfnom5rm:
/@typescript-eslint/parser/5.36.2_itqs5654cmlnjraw6gjzqacppi:
resolution: {integrity: sha512-qS/Kb0yzy8sR0idFspI9Z6+t7mqk/oRjnAYfewG+VN73opAUvmYL3oPIMmgOX6CnQS6gmVIXGshlb5RY/R22pA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
@ -854,10 +854,10 @@ packages:
dependencies:
'@typescript-eslint/scope-manager': 5.36.2
'@typescript-eslint/types': 5.36.2
'@typescript-eslint/typescript-estree': 5.36[email protected].2
'@typescript-eslint/typescript-estree': 5.36[email protected].3
debug: 4.3.4
eslint: 8.23.0
typescript: 4.8.2
typescript: 4.8.3
transitivePeerDependencies:
- supports-color
dev: false
@ -870,7 +870,7 @@ packages:
'@typescript-eslint/visitor-keys': 5.36.2
dev: false
/@typescript-eslint/type-utils/5.36.2_yqf6kl63nyoq5megxukfnom5rm:
/@typescript-eslint/type-utils/5.36.2_itqs5654cmlnjraw6gjzqacppi:
resolution: {integrity: sha512-rPQtS5rfijUWLouhy6UmyNquKDPhQjKsaKH0WnY6hl/07lasj8gPaH2UD8xWkePn6SC+jW2i9c2DZVDnL+Dokw==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
@ -880,12 +880,12 @@ packages:
typescript:
optional: true
dependencies:
'@typescript-eslint/typescript-estree': 5.36[email protected].2
'@typescript-eslint/utils': 5.36.2_yqf6kl63nyoq5megxukfnom5rm
'@typescript-eslint/typescript-estree': 5.36[email protected].3
'@typescript-eslint/utils': 5.36.2_itqs5654cmlnjraw6gjzqacppi
debug: 4.3.4
eslint: 8.23.0
tsutils: 3.21[email protected].2
typescript: 4.8.2
tsutils: 3.21[email protected].3
typescript: 4.8.3
transitivePeerDependencies:
- supports-color
dev: false
@ -895,7 +895,7 @@ packages:
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dev: false
/@typescript-eslint/typescript-estree/[email protected].2:
/@typescript-eslint/typescript-estree/[email protected].3:
resolution: {integrity: sha512-8fyH+RfbKc0mTspfuEjlfqA4YywcwQK2Amcf6TDOwaRLg7Vwdu4bZzyvBZp4bjt1RRjQ5MDnOZahxMrt2l5v9w==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
@ -910,13 +910,13 @@ packages:
globby: 11.1.0
is-glob: 4.0.3
semver: 7.3.7
tsutils: 3.21[email protected].2
typescript: 4.8.2
tsutils: 3.21[email protected].3
typescript: 4.8.3
transitivePeerDependencies:
- supports-color
dev: false
/@typescript-eslint/utils/5.36.2_yqf6kl63nyoq5megxukfnom5rm:
/@typescript-eslint/utils/5.36.2_itqs5654cmlnjraw6gjzqacppi:
resolution: {integrity: sha512-uNcopWonEITX96v9pefk9DC1bWMdkweeSsewJ6GeC7L6j2t0SJywisgkr9wUTtXk90fi2Eljj90HSHm3OGdGRg==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
@ -925,7 +925,7 @@ packages:
'@types/json-schema': 7.0.11
'@typescript-eslint/scope-manager': 5.36.2
'@typescript-eslint/types': 5.36.2
'@typescript-eslint/typescript-estree': 5.36[email protected].2
'@typescript-eslint/typescript-estree': 5.36[email protected].3
eslint: 8.23.0
eslint-scope: 5.1.1
eslint-utils: 3.0[email protected]
@ -1084,8 +1084,8 @@ packages:
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true
dependencies:
caniuse-lite: 1.0.30001390
electron-to-chromium: 1.4.242
caniuse-lite: 1.0.30001393
electron-to-chromium: 1.4.246
node-releases: 2.0.6
update-browserslist-db: 1.0[email protected]
dev: true
@ -1105,8 +1105,8 @@ packages:
engines: {node: '>=6'}
dev: false
/caniuse-lite/1.0.30001390:
resolution: {integrity: sha512-sS4CaUM+/+vqQUlCvCJ2WtDlV81aWtHhqeEVkLokVJJa3ViN4zDxAGfq9R8i1m90uGHxo99cy10Od+lvn3hf0g==}
/caniuse-lite/1.0.30001393:
resolution: {integrity: sha512-N/od11RX+Gsk+1qY/jbPa0R6zJupEa0lxeBG598EbrtblxVCTJsQwbRBm6+V+rxpc5lHKdsXb9RY83cZIPLseA==}
dev: true
/chalk/2.4.2:
@ -1183,7 +1183,7 @@ packages:
dev: false
/concat-map/0.0.1:
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=}
dev: false
/convert-source-map/1.8.0:
@ -1350,8 +1350,8 @@ packages:
resolution: {integrity: sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==}
dev: false
/electron-to-chromium/1.4.242:
resolution: {integrity: sha512-nPdgMWtjjWGCtreW/2adkrB2jyHjClo9PtVhR6rW+oxa4E4Wom642Tn+5LslHP3XPL5MCpkn5/UEY60EXylNeQ==}
/electron-to-chromium/1.4.246:
resolution: {integrity: sha512-/wFCHUE+Hocqr/LlVGsuKLIw4P2lBWwFIDcNMDpJGzyIysQV4aycpoOitAs32FT94EHKnNqDR/CVZJFbXEufJA==}
dev: true
/emoji-regex/8.0.0:
@ -1709,7 +1709,7 @@ packages:
eslint-import-resolver-webpack:
optional: true
dependencies:
'@typescript-eslint/parser': 5.36.2_yqf6kl63nyoq5megxukfnom5rm
'@typescript-eslint/parser': 5.36.2_itqs5654cmlnjraw6gjzqacppi
debug: 3.2.7
eslint: 8.23.0
eslint-import-resolver-node: 0.3.6
@ -1739,7 +1739,7 @@ packages:
'@typescript-eslint/parser':
optional: true
dependencies:
'@typescript-eslint/parser': 5.36.2_yqf6kl63nyoq5megxukfnom5rm
'@typescript-eslint/parser': 5.36.2_itqs5654cmlnjraw6gjzqacppi
array-includes: 3.1.5
array.prototype.flat: 1.3.0
debug: 2.6.9
@ -1769,8 +1769,8 @@ packages:
eslint: 8.23.0
dev: false
/eslint-plugin-react/7.31.7[email protected]:
resolution: {integrity: sha512-8NldBTeYp/kQoTV1uT0XF6HcmDqbgZ0lNPkN0wlRw8DJKXEnaWu+oh/6gt3xIhzvQ35wB2Y545fJhIbJSZ2NNw==}
/eslint-plugin-react/7.31.8[email protected]:
resolution: {integrity: sha512-5lBTZmgQmARLLSYiwI71tiGVTLUuqXantZM6vlSY39OaDSV0M7+32K5DnLkmFrwTe+Ksz0ffuLUC91RUviVZfw==}
engines: {node: '>=4'}
peerDependencies:
eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8
@ -1951,8 +1951,8 @@ packages:
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
dev: false
/fast-glob/3.2.11:
resolution: {integrity: sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==}
/fast-glob/3.2.12:
resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==}
engines: {node: '>=8.6.0'}
dependencies:
'@nodelib/fs.stat': 2.0.5
@ -2174,7 +2174,7 @@ packages:
dependencies:
array-union: 2.1.0
dir-glob: 3.0.1
fast-glob: 3.2.11
fast-glob: 3.2.12
ignore: 5.2.0
merge2: 1.4.1
slash: 3.0.0
@ -2972,7 +2972,7 @@ packages:
dev: false
/quotemeta/0.0.0:
resolution: {integrity: sha512-1XGObUh7RN5b58vKuAsrlfqT+Rc4vmw8N4pP9gFCq1GFlTdV0Ex/D2Ro1Drvrqj++HPi3ig0Np17XPslELeMRA==}
resolution: {integrity: sha1-UdOgbuD81uO1AdvSiQQ1Gtelo4w=}
dev: true
/react-dom/[email protected]:
@ -3474,14 +3474,14 @@ packages:
resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==}
dev: true
/tsutils/[email protected].2:
/tsutils/[email protected].3:
resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==}
engines: {node: '>= 6'}
peerDependencies:
typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta'
dependencies:
tslib: 1.14.1
typescript: 4.8.2
typescript: 4.8.3
dev: false
/type-check/0.4.0:
@ -3496,8 +3496,8 @@ packages:
engines: {node: '>=10'}
dev: false
/typescript/4.8.2:
resolution: {integrity: sha512-C0I1UsrrDHo2fYI5oaCGbSejwX4ch+9Y5jTQELvovfmFkK3HHSZJB8MSJcWLmCUBzQBchCrZ9rMRV6GuNrvGtw==}
/typescript/4.8.3:
resolution: {integrity: sha512-goMHfm00nWPa8UvR/CPSvykqf6dVV8x/dp0c5mFTMTIu0u0FlGWRioyy7Nn0PGAdHxpJZnuO/ut+PpQ8UiHAig==}
engines: {node: '>=4.2.0'}
hasBin: true

2
src/components/Dialog/PeersDialog.tsx

@ -94,7 +94,7 @@ export const PeersDialog = ({
onClick={() => {
void connection?.sendPacket(
Protobuf.AdminMessage.toBinary({
variant: {
payloadVariant: {
oneofKind: "getConfigRequest",
getConfigRequest:
Protobuf.AdminMessage_ConfigType.LORA_CONFIG,

4
src/components/PageComponents/Config/Bluetooth.tsx

@ -50,7 +50,7 @@ export const Bluetooth = (): JSX.Element => {
const pairingMode = useWatch({
control,
name: "mode",
defaultValue: Protobuf.Config_BluetoothConfig_PairingMode.RandomPin,
defaultValue: Protobuf.Config_BluetoothConfig_PairingMode.RANDOM_PIN,
});
return (
@ -82,7 +82,7 @@ export const Bluetooth = (): JSX.Element => {
<TextInputField
display={
pairingMode !== Protobuf.Config_BluetoothConfig_PairingMode.FixedPin
pairingMode !== Protobuf.Config_BluetoothConfig_PairingMode.FIXED_PIN
? "none"
: "block"
}

15
src/components/PageComponents/Config/Device.tsx

@ -1,13 +1,7 @@
import type React from "react";
import { useEffect, useState } from "react";
import {
FormField,
SelectField,
Switch,
TextInputField,
toaster,
} from "evergreen-ui";
import { FormField, SelectField, Switch, toaster } from "evergreen-ui";
import { Controller, useForm } from "react-hook-form";
import { DeviceValidation } from "@app/validation/config/device.js";
@ -105,13 +99,6 @@ export const Device = (): JSX.Element => {
)}
/>
</FormField>
<TextInputField
label="NTP Server"
description="This is a description."
isInvalid={!!errors.ntpServer?.message}
validationMessage={errors.ntpServer?.message}
{...register("ntpServer")}
/>
</Form>
);
};

51
src/components/PageComponents/Config/WiFi.tsx → src/components/PageComponents/Config/Network.tsx

@ -11,13 +11,13 @@ import {
import { Controller, useForm, useWatch } from "react-hook-form";
import { renderOptions } from "@app/core/utils/selectEnumOptions.js";
import { WiFiValidation } from "@app/validation/config/wifi.js";
import { NetworkValidation } from "@app/validation/config/network.js";
import { Form } from "@components/form/Form";
import { useDevice } from "@core/providers/useDevice.js";
import { classValidatorResolver } from "@hookform/resolvers/class-validator";
import { Protobuf } from "@meshtastic/meshtasticjs";
export const WiFi = (): JSX.Element => {
export const Network = (): JSX.Element => {
const { config, connection } = useDevice();
const [loading, setLoading] = useState(false);
const {
@ -26,32 +26,32 @@ export const WiFi = (): JSX.Element => {
formState: { errors, isDirty },
control,
reset,
} = useForm<WiFiValidation>({
defaultValues: config.wifi,
resolver: classValidatorResolver(WiFiValidation),
} = useForm<NetworkValidation>({
defaultValues: config.network,
resolver: classValidatorResolver(NetworkValidation),
});
const wifiEnabled = useWatch({
control,
name: "enabled",
name: "wifiEnabled",
defaultValue: false,
});
useEffect(() => {
reset(config.wifi);
}, [reset, config.wifi]);
reset(config.network);
}, [reset, config.network]);
const onSubmit = handleSubmit((data) => {
setLoading(true);
void connection?.setConfig(
{
payloadVariant: {
oneofKind: "wifi",
wifi: data,
oneofKind: "network",
network: data,
},
},
async () => {
toaster.success("Successfully updated WiFi config");
toaster.success("Successfully updated Network config");
reset({ ...data });
setLoading(false);
await Promise.resolve();
@ -63,11 +63,11 @@ export const WiFi = (): JSX.Element => {
<FormField
label="WiFi Enabled"
description="Description"
isInvalid={!!errors.enabled?.message}
validationMessage={errors.enabled?.message}
isInvalid={!!errors.wifiEnabled?.message}
validationMessage={errors.wifiEnabled?.message}
>
<Controller
name="enabled"
name="wifiEnabled"
control={control}
render={({ field: { value, ...field } }) => (
<Switch height={24} marginLeft="auto" checked={value} {...field} />
@ -77,24 +77,31 @@ export const WiFi = (): JSX.Element => {
<SelectField
label="WiFi Mode"
description="This is a description."
{...register("mode", { valueAsNumber: true })}
{...register("wifiMode", { valueAsNumber: true })}
>
{renderOptions(Protobuf.Config_WiFiConfig_WiFiMode)}
{renderOptions(Protobuf.Config_NetworkConfig_WiFiMode)}
</SelectField>
<TextInputField
label="SSID"
description="This is a description."
isInvalid={!!errors.ssid?.message}
validationMessage={errors.ssid?.message}
{...register("ssid")}
isInvalid={!!errors.wifiSsid?.message}
validationMessage={errors.wifiSsid?.message}
{...register("wifiSsid")}
/>
<TextInputField
label="PSK"
type="password"
description="This is a description."
isInvalid={!!errors.psk?.message}
validationMessage={errors.psk?.message}
{...register("psk")}
isInvalid={!!errors.wifiPsk?.message}
validationMessage={errors.wifiPsk?.message}
{...register("wifiPsk")}
/>
<TextInputField
label="NTP Server"
description="This is a description."
isInvalid={!!errors.ntpServer?.message}
validationMessage={errors.ntpServer?.message}
{...register("ntpServer")}
/>
</Form>
);

2
src/components/PageComponents/Config/Position.tsx

@ -144,7 +144,7 @@ export const Position = (): JSX.Element => {
.filter(
(value) =>
parseInt(value[0]) !==
Protobuf.Config_PositionConfig_PositionFlags.POS_UNDEFINED
Protobuf.Config_PositionConfig_PositionFlags.UNSET
)
.map((value) => {
return {

13
src/components/PageComponents/Config/Power.tsx

@ -1,15 +1,13 @@
import type React from "react";
import { useEffect, useState } from "react";
import { FormField, SelectField, Switch, TextInputField } from "evergreen-ui";
import { FormField, Switch, TextInputField } from "evergreen-ui";
import { Controller, useForm } from "react-hook-form";
import { PowerValidation } from "@app/validation/config/power.js";
import { Form } from "@components/form/Form";
import { useDevice } from "@core/providers/useDevice.js";
import { renderOptions } from "@core/utils/selectEnumOptions.js";
import { classValidatorResolver } from "@hookform/resolvers/class-validator";
import { Protobuf } from "@meshtastic/meshtasticjs";
export const Power = (): JSX.Element => {
const { config, connection } = useDevice();
@ -47,15 +45,6 @@ export const Power = (): JSX.Element => {
});
return (
<Form loading={loading} dirty={isDirty} onSubmit={onSubmit}>
<SelectField
label="Charge current"
description="This is a description."
isInvalid={!!errors.chargeCurrent?.message}
validationMessage={errors.chargeCurrent?.message}
{...register("chargeCurrent", { valueAsNumber: true })}
>
{renderOptions(Protobuf.Config_PowerConfig_ChargeCurrent)}
</SelectField>
<TextInputField
label="Shutdown on battery delay"
description="This is a description."

6
src/core/stores/deviceStore.ts

@ -140,8 +140,8 @@ export const useDeviceStore = create<DeviceState>((set, get) => ({
case "power":
device.config.power = config.payloadVariant.power;
break;
case "wifi":
device.config.wifi = config.payloadVariant.wifi;
case "network":
device.config.network = config.payloadVariant.network;
break;
case "display":
device.config.display = config.payloadVariant.display;
@ -150,7 +150,7 @@ export const useDeviceStore = create<DeviceState>((set, get) => ({
device.config.lora = config.payloadVariant.lora;
device.regionUnset =
config.payloadVariant.lora.region ===
Protobuf.Config_LoRaConfig_RegionCode.Unset;
Protobuf.Config_LoRaConfig_RegionCode.UNSET;
break;
}
}

6
src/pages/Config/DeviceConfig.tsx

@ -3,6 +3,7 @@ import { useState } from "react";
import { Pane, Tab, Tablist } from "evergreen-ui";
import { Network } from "@app/components/PageComponents/Config/Network.js";
import { Bluetooth } from "@components/PageComponents/Config/Bluetooth.js";
import { Device } from "@components/PageComponents/Config/Device.js";
import { Display } from "@components/PageComponents/Config/Display.js";
@ -10,7 +11,6 @@ import { LoRa } from "@components/PageComponents/Config/LoRa.js";
import { Position } from "@components/PageComponents/Config/Position.js";
import { Power } from "@components/PageComponents/Config/Power.js";
import { User } from "@components/PageComponents/Config/User.js";
import { WiFi } from "@components/PageComponents/Config/WiFi.js";
import { useDevice } from "@core/providers/useDevice.js";
export const DeviceConfig = (): JSX.Element => {
@ -35,8 +35,8 @@ export const DeviceConfig = (): JSX.Element => {
element: Power,
},
{
label: "WiFi",
element: WiFi,
label: "Network",
element: Network,
disabled: !hardware.hasWifi,
},
{

5
src/validation/config/device.ts

@ -1,4 +1,4 @@
import { IsBoolean, IsEnum, Length } from "class-validator";
import { IsBoolean, IsEnum } from "class-validator";
import { Protobuf } from "@meshtastic/meshtasticjs";
@ -14,7 +14,4 @@ export class DeviceValidation implements Protobuf.Config_DeviceConfig {
@IsBoolean()
debugLogEnabled: boolean;
@Length(2, 30)
ntpServer: string;
}

2
src/validation/config/lora.ts

@ -15,7 +15,7 @@ export class LoRaValidation implements Protobuf.Config_LoRaConfig {
bandwidth: number;
@IsInt()
@Min(7)
// @Min(7)
@Max(12)
spreadFactor: number;

20
src/validation/config/network.ts

@ -0,0 +1,20 @@
import { IsBoolean, IsEnum, Length } from "class-validator";
import { Protobuf } from "@meshtastic/meshtasticjs";
export class NetworkValidation implements Protobuf.Config_NetworkConfig {
@IsBoolean()
wifiEnabled: boolean;
@IsEnum(Protobuf.Config_NetworkConfig_WiFiMode)
wifiMode: Protobuf.Config_NetworkConfig_WiFiMode;
@Length(1, 33)
wifiSsid: string;
@Length(8, 64)
wifiPsk: string;
@Length(2, 30)
ntpServer: string;
}

7
src/validation/config/power.ts

@ -1,11 +1,8 @@
import { IsBoolean, IsEnum, IsInt, Max, Min } from "class-validator";
import { IsBoolean, IsInt, Max, Min } from "class-validator";
import { Protobuf } from "@meshtastic/meshtasticjs";
import type { Protobuf } from "@meshtastic/meshtasticjs";
export class PowerValidation implements Protobuf.Config_PowerConfig {
@IsEnum(Protobuf.Config_PowerConfig_ChargeCurrent)
chargeCurrent: Protobuf.Config_PowerConfig_ChargeCurrent;
@IsBoolean()
isPowerSaving: boolean;

17
src/validation/config/wifi.ts

@ -1,17 +0,0 @@
import { IsBoolean, IsEnum, Length } from "class-validator";
import { Protobuf } from "@meshtastic/meshtasticjs";
export class WiFiValidation implements Protobuf.Config_WiFiConfig {
@IsBoolean()
enabled: boolean;
@IsEnum(Protobuf.Config_WiFiConfig_WiFiMode)
mode: Protobuf.Config_WiFiConfig_WiFiMode;
@Length(1, 33)
ssid: string;
@Length(8, 64)
psk: string;
}
Loading…
Cancel
Save