From aa01bb206f6da6ebe41487a811397c859dd172e9 Mon Sep 17 00:00:00 2001 From: Sacha Weatherstone Date: Sun, 23 Oct 2022 12:39:43 +1000 Subject: [PATCH] Update deps, add ethernet config --- package.json | 6 +- pnpm-lock.yaml | 169 ++++++++++++++++-- .../PageComponents/Config/Network.tsx | 55 ++++++ src/components/Sidebar.tsx | 2 +- src/components/form/Input.tsx | 16 +- src/components/form/Select.tsx | 2 +- src/validation/config/network.ts | 26 ++- 7 files changed, 257 insertions(+), 19 deletions(-) diff --git a/package.json b/package.json index ac06ac46..bcec64ea 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ "@heroicons/react": "^2.0.12", "@hookform/resolvers": "^2.9.10", "@meshtastic/eslint-config": "^1.0.8", - "@meshtastic/meshtasticjs": "^0.6.109", + "@meshtastic/meshtasticjs": "^0.6.110", "@tailwindcss/line-clamp": "^0.4.2", "@tailwindcss/typography": "^0.5.7", "base64-js": "^1.5.1", @@ -35,7 +35,7 @@ "class-validator": "^0.13.2", "date-fns": "^2.29.3", "geodesy": "^2.4.0", - "immer": "^9.0.15", + "immer": "^9.0.16", "mapbox-gl": "npm:empty-npm-package@^1.0.0", "maplibre-gl": "^2.4.0", "pretty-ms": "^8.0.0", @@ -50,7 +50,7 @@ "react-map-gl": "^7.0.19", "react-qrcode-logo": "^2.8.0", "rfc4648": "^1.5.2", - "zustand": "4.1.2" + "zustand": "4.1.3" }, "devDependencies": { "@tailwindcss/forms": "^0.5.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fc80fa3f..a7f70e14 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -6,7 +6,7 @@ specifiers: '@heroicons/react': ^2.0.12 '@hookform/resolvers': ^2.9.10 '@meshtastic/eslint-config': ^1.0.8 - '@meshtastic/meshtasticjs': ^0.6.109 + '@meshtastic/meshtasticjs': ^0.6.110 '@tailwindcss/forms': ^0.5.3 '@tailwindcss/line-clamp': ^0.4.2 '@tailwindcss/typography': ^0.5.7 @@ -27,7 +27,7 @@ specifiers: date-fns: ^2.29.3 geodesy: ^2.4.0 gzipper: ^7.1.0 - immer: ^9.0.15 + immer: ^9.0.16 mapbox-gl: npm:empty-npm-package@^1.0.0 maplibre-gl: ^2.4.0 postcss: ^8.4.18 @@ -53,7 +53,7 @@ specifiers: unimported: ^1.22.0 vite: ^3.1.8 vite-plugin-environment: ^1.1.3 - zustand: 4.1.2 + zustand: 4.1.3 dependencies: '@emeraldpay/hashicon-react': 0.5.2 @@ -61,7 +61,7 @@ dependencies: '@heroicons/react': 2.0.12_react@18.2.0 '@hookform/resolvers': 2.9.10_react-hook-form@7.38.0 '@meshtastic/eslint-config': 1.0.8 - '@meshtastic/meshtasticjs': link:../meshtastic.js + '@meshtastic/meshtasticjs': 0.6.110 '@tailwindcss/line-clamp': 0.4.2_tailwindcss@3.2.1 '@tailwindcss/typography': 0.5.7_tailwindcss@3.2.1 base64-js: 1.5.1 @@ -71,7 +71,7 @@ dependencies: class-validator: 0.13.2 date-fns: 2.29.3 geodesy: 2.4.0 - immer: 9.0.15 + immer: 9.0.16 mapbox-gl: /empty-npm-package/1.0.0 maplibre-gl: 2.4.0 pretty-ms: 8.0.0 @@ -86,7 +86,7 @@ dependencies: react-map-gl: 7.0.19_6eczaga5xxiwzxtfiyk6fioasq react-qrcode-logo: 2.8.0_biqbaboplfbrettd7655fr4n2y rfc4648: 1.5.2 - zustand: 4.1.2_immer@9.0.15+react@18.2.0 + zustand: 4.1.3_immer@9.0.16+react@18.2.0 devDependencies: '@tailwindcss/forms': 0.5.3_tailwindcss@3.2.1 @@ -636,6 +636,17 @@ packages: - supports-color dev: false + /@meshtastic/meshtasticjs/0.6.110: + resolution: {integrity: sha512-pqWDg12NKcWRFqvrrG0KIaESZG+e4HqT9zFQKOcf0DwI1xw0f7d7qaa4UNYK6BSOtY7CxAjYuTwxn6O4vYXwZw==} + dependencies: + '@protobuf-ts/runtime': 2.8.1 + '@serialport/stream': 10.3.0 + serialport: 10.4.0 + sub-events: 1.9.0 + transitivePeerDependencies: + - supports-color + dev: false + /@nodelib/fs.scandir/2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -654,6 +665,106 @@ packages: '@nodelib/fs.scandir': 2.1.5 fastq: 1.13.0 + /@protobuf-ts/runtime/2.8.1: + resolution: {integrity: sha512-D9M5hSumYCovIfNllt7N6ODh4q+LrjiMWtNETvooaf+a2XheZJ7kgjFlsFghti0CFWwtA//of4JXQfw9hU+cCw==} + dev: false + + /@serialport/binding-mock/10.2.2: + resolution: {integrity: sha512-HAFzGhk9OuFMpuor7aT5G1ChPgn5qSsklTFOTUX72Rl6p0xwcSVsRtG/xaGp6bxpN7fI9D/S8THLBWbBgS6ldw==} + engines: {node: '>=12.0.0'} + dependencies: + '@serialport/bindings-interface': 1.2.2 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: false + + /@serialport/bindings-cpp/10.7.0: + resolution: {integrity: sha512-Xx1wA2UCG2loS32hxNvWJI4smCzGKhWqE85//fLRzHoGgE1lSLe3Nk7W40/ebrlGFHWRbQZmeaIF4chb2XLliA==} + engines: {node: '>=12.17.0 <13.0 || >=14.0.0'} + requiresBuild: true + dependencies: + '@serialport/bindings-interface': 1.2.1 + '@serialport/parser-readline': 10.3.0 + debug: 4.3.4 + node-addon-api: 4.3.0 + node-gyp-build: 4.5.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@serialport/bindings-interface/1.2.1: + resolution: {integrity: sha512-63Dyqz2gtryRDDckFusOYqLYhR3Hq/M4sEdbF9i/VsvDb6T+tNVgoAKUZ+FMrXXKnCSu+hYbk+MTc0XQANszxw==} + engines: {node: ^12.22 || ^14.13 || >=16} + dev: false + + /@serialport/bindings-interface/1.2.2: + resolution: {integrity: sha512-CJaUd5bLvtM9c5dmO9rPBHPXTa9R2UwpkJ0wdh9JCYcbrPWsKz+ErvR0hBLeo7NPeiFdjFO4sonRljiw4d2XiA==} + engines: {node: ^12.22 || ^14.13 || >=16} + dev: false + + /@serialport/parser-byte-length/10.3.0: + resolution: {integrity: sha512-pJ/VoFemzKRRNDHLhFfPThwP40QrGaEnm9TtwL7o2GihEPwzBg3T0bN13ew5TpbbUYZdMpUtpm3CGfl6av9rUQ==} + engines: {node: '>=12.0.0'} + dev: false + + /@serialport/parser-cctalk/10.3.0: + resolution: {integrity: sha512-8ujmk8EvVbDPrNF4mM33bWvUYJOZ0wXbY3WCRazHRWvyCdL0VO0DQvW81ZqgoTpiDQZm5r8wQu9rmuemahF6vQ==} + engines: {node: '>=12.0.0'} + dev: false + + /@serialport/parser-delimiter/10.3.0: + resolution: {integrity: sha512-9E4Vj6s0UbbcCCTclwegHGPYjJhdm9qLCS0lowXQDEQC5naZnbsELemMHs93nD9jHPcyx1B4oXkMnVZLxX5TYw==} + engines: {node: '>=12.0.0'} + dev: false + + /@serialport/parser-inter-byte-timeout/10.3.0: + resolution: {integrity: sha512-wKP0QK85NHgvT6BBB1qBfKBBU4pf8kespNXAZBUYmFT+P4n8r8IZE2mqigCD+AiZcfWNQoAizwOsT/Jx/qeVig==} + engines: {node: '>=12.0.0'} + dev: false + + /@serialport/parser-packet-length/10.3.0: + resolution: {integrity: sha512-bj0cWzt8YSQj/E5fRQVYdi4TsfTlZQrXlXrUwjyTsCONv8IPOHzsz+yY0fw5SEMiJtaLyqvPkCHLsttOd/zFsg==} + engines: {node: '>=8.6.0'} + dev: false + + /@serialport/parser-readline/10.3.0: + resolution: {integrity: sha512-ki3ATZ3/RAqnqGROBKE7k+OeZ0DZXZ53GTca4q71OU5RazbbNhTOBQLKLXD3v9QZXCMJdg4hGW/2Y0DuMUqMQg==} + engines: {node: '>=12.0.0'} + dependencies: + '@serialport/parser-delimiter': 10.3.0 + dev: false + + /@serialport/parser-ready/10.3.0: + resolution: {integrity: sha512-1owywJ4p592dJyVrEJZPIh6pUZ3/y/LN6kGTDH2wxdewRUITo/sGvDy0er5i2+dJD3yuowiAz0dOHSdz8tevJA==} + engines: {node: '>=12.0.0'} + dev: false + + /@serialport/parser-regex/10.3.0: + resolution: {integrity: sha512-tIogTs7CvTH+UUFnsvE7i33MSISyTPTGPWlglWYH2/5coipXY503jlaYS1YGe818wWNcSx6YAjMZRdhTWwM39w==} + engines: {node: '>=12.0.0'} + dev: false + + /@serialport/parser-slip-encoder/10.3.0: + resolution: {integrity: sha512-JI0ILF5sylWn8f0MuMzHFBix/iMUTa79/Z95KaPZYnVaEdA7h7hh/o21Jmon/26P3RJwL1SNJCjZ81zfan+LtQ==} + engines: {node: '>=12.0.0'} + dev: false + + /@serialport/parser-spacepacket/10.3.0: + resolution: {integrity: sha512-PDF73ClEPsClD1FEJZHNuBevDKsJCkqy/XD5+S5eA6+tY5D4HLrVgSWsg+3qqB6+dlpwf2CzHe+uO8D3teuKHA==} + engines: {node: '>=12.0.0'} + dev: false + + /@serialport/stream/10.3.0: + resolution: {integrity: sha512-7sooi5fHogYNVEJwxVdg872xO6TuMgQd2E9iRmv+o8pk/1dbBnPkmH6Ka3st1mVE+0KnIJqVlgei+ncSsqXIGw==} + engines: {node: '>=12.0.0'} + dependencies: + '@serialport/bindings-interface': 1.2.1 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: false + /@stablelib/binary/1.0.1: resolution: {integrity: sha512-ClJWvmL6UBM/wjkvv/7m5VP3GMr9t0osr4yVgLZsLCOz4hGN9gIAFEqnJ0TsSMAN+n840nf2cHZnA5/KFqHC7Q==} dependencies: @@ -2430,8 +2541,8 @@ packages: resolution: {integrity: sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==} engines: {node: '>= 4'} - /immer/9.0.15: - resolution: {integrity: sha512-2eB/sswms9AEUSkOm4SbV5Y7Vmt/bKRwByd52jfLkW4OLYeaTP3EEiJ9agqU0O/tq6Dk62Zfj+TJSqfm1rLVGQ==} + /immer/9.0.16: + resolution: {integrity: sha512-qenGE7CstVm1NrHQbMh8YaSzTZTFNP3zPqr3YU0S0UY441j4bJTg4A2Hh5KAhwgaiU6ZZ1Ar6y/2f4TblnMReQ==} dev: false /import-fresh/3.3.0: @@ -2909,6 +3020,15 @@ packages: /natural-compare/1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + /node-addon-api/4.3.0: + resolution: {integrity: sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==} + dev: false + + /node-gyp-build/4.5.0: + resolution: {integrity: sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==} + hasBin: true + dev: false + /node-modules-regexp/1.0.0: resolution: {integrity: sha512-JMaRS9L4wSRIR+6PTVEikTrq/lMGEZR43a48ETeilY0Q0iMwVnccMFrUM1k+tNzmYuIU0Vh710bCUqHX+/+ctQ==} engines: {node: '>=0.10.0'} @@ -3633,6 +3753,28 @@ packages: dependencies: lru-cache: 6.0.0 + /serialport/10.4.0: + resolution: {integrity: sha512-PszPM5SnFMgSXom60PkKS2A9nMlNbHkuoyRBlzdSWw9rmgOn258+V0dYbWMrETJMM+TJV32vqBzjg5MmmUMwMw==} + engines: {node: '>=12.0.0'} + dependencies: + '@serialport/binding-mock': 10.2.2 + '@serialport/bindings-cpp': 10.7.0 + '@serialport/parser-byte-length': 10.3.0 + '@serialport/parser-cctalk': 10.3.0 + '@serialport/parser-delimiter': 10.3.0 + '@serialport/parser-inter-byte-timeout': 10.3.0 + '@serialport/parser-packet-length': 10.3.0 + '@serialport/parser-readline': 10.3.0 + '@serialport/parser-ready': 10.3.0 + '@serialport/parser-regex': 10.3.0 + '@serialport/parser-slip-encoder': 10.3.0 + '@serialport/parser-spacepacket': 10.3.0 + '@serialport/stream': 10.3.0 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: false + /shebang-command/2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -3798,6 +3940,11 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} + /sub-events/1.9.0: + resolution: {integrity: sha512-dnFBayilG9Ku0k/lNs1Y7WV4kv91+ovCoeBV3uIYrY49DylvBb6z9d9ED2ctcrvX2YlReFalpCgJNtSgmrOaJg==} + engines: {node: '>=10.0.0'} + dev: false + /supercluster/7.1.5: resolution: {integrity: sha512-EulshI3pGUM66o6ZdH3ReiFcvHpM3vAigyK+vcxdjpJyEbIIrtbmBdY23mGgnI24uXiGFvrGq9Gkum/8U7vJWg==} dependencies: @@ -4227,8 +4374,8 @@ packages: engines: {node: '>=10'} dev: false - /zustand/4.1.2_immer@9.0.15+react@18.2.0: - resolution: {integrity: sha512-gcRaKchcxFPbImrBb/BKgujOhHhik9YhVpIeP87ETT7uokEe2Szu7KkuZ9ghjtD+/KKkcrRNktR2AiLXPIbKIQ==} + /zustand/4.1.3_immer@9.0.16+react@18.2.0: + resolution: {integrity: sha512-AdFyr6+4sVD6xlyc/ArQaOrleqzxJEBbAXglufZ5lgvisoz8GUN3icOrKOnX1uRSxmpmdVUQPen9hhymWIzhBg==} engines: {node: '>=12.7.0'} peerDependencies: immer: '>=9.0' @@ -4239,7 +4386,7 @@ packages: react: optional: true dependencies: - immer: 9.0.15 + immer: 9.0.16 react: 18.2.0 use-sync-external-store: 1.2.0_react@18.2.0 dev: false diff --git a/src/components/PageComponents/Config/Network.tsx b/src/components/PageComponents/Config/Network.tsx index 6c163f3c..1c11d533 100644 --- a/src/components/PageComponents/Config/Network.tsx +++ b/src/components/PageComponents/Config/Network.tsx @@ -33,6 +33,12 @@ export const Network = (): JSX.Element => { defaultValue: false, }); + const ethEnabled = useWatch({ + control, + name: "ethEnabled", + defaultValue: false, + }); + useEffect(() => { reset(config.network); }, [reset, config.network]); @@ -108,8 +114,57 @@ export const Network = (): JSX.Element => { label="NTP Server" description="NTP server for time synchronization" error={errors.ntpServer?.message} + disabled={!wifiEnabled && !ethEnabled} {...register("ntpServer")} /> + ( + + )} + /> + + + + + ); }; diff --git a/src/components/Sidebar.tsx b/src/components/Sidebar.tsx index eae8b8d8..92e62792 100644 --- a/src/components/Sidebar.tsx +++ b/src/components/Sidebar.tsx @@ -34,7 +34,7 @@ export const Sidebar = (): JSX.Element => { removeDevice(selectedDevice ?? 0); }} reconnect={() => { - console.log(""); + void connection?.disconnect(); }} /> diff --git a/src/components/form/Input.tsx b/src/components/form/Input.tsx index 2b84923b..64b29c9f 100644 --- a/src/components/form/Input.tsx +++ b/src/components/form/Input.tsx @@ -16,7 +16,16 @@ export interface InputProps extends InputHTMLAttributes { } export const Input = forwardRef(function Input( - { label, description, prefix, suffix, action, error, ...rest }: InputProps, + { + label, + description, + prefix, + suffix, + action, + error, + disabled, + ...rest + }: InputProps, ref ) { return ( @@ -34,7 +43,10 @@ export const Input = forwardRef(function Input( ref={ref} className={`flex h-10 w-full rounded-md border-transparent bg-orange-100 px-3 text-sm focus:border-transparent focus:outline-none focus:ring-2 focus:ring-orange-500 ${ prefix ? "rounded-l-none" : "" - } ${action ? "rounded-r-none" : ""}`} + } ${action ? "rounded-r-none" : ""} ${ + disabled ? "cursor-not-allowed bg-orange-50 text-orange-200" : "" + }`} + disabled={disabled} {...rest} /> {suffix && ( diff --git a/src/components/form/Select.tsx b/src/components/form/Select.tsx index 93c12cc0..52989d23 100644 --- a/src/components/form/Select.tsx +++ b/src/components/form/Select.tsx @@ -43,7 +43,7 @@ export const Select = forwardRef(function Input( className={`flex h-10 w-full rounded-md border-transparent bg-orange-100 px-3 text-sm focus:border-transparent focus:outline-none focus:ring-2 focus:ring-orange-500 ${ prefix ? "rounded-l-none" : "" } ${action ? "rounded-r-none" : ""} ${ - disabled ? "cursor-not-allowed" : "" + disabled ? "cursor-not-allowed bg-orange-50 text-orange-200" : "" }`} disabled={disabled} {...rest} diff --git a/src/validation/config/network.ts b/src/validation/config/network.ts index 15907df6..b64dc954 100644 --- a/src/validation/config/network.ts +++ b/src/validation/config/network.ts @@ -1,4 +1,4 @@ -import { IsBoolean, IsEnum, Length } from "class-validator"; +import { IsBoolean, IsEnum, IsIP, Length } from "class-validator"; import { Protobuf } from "@meshtastic/meshtasticjs"; @@ -17,4 +17,28 @@ export class NetworkValidation implements Protobuf.Config_NetworkConfig { @Length(2, 30) ntpServer: string; + + @IsBoolean() + ethEnabled: boolean; + + @IsEnum(Protobuf.Config_NetworkConfig_EthMode) + ethMode: Protobuf.Config_NetworkConfig_EthMode; + + ethConfig: NetworkValidation_ethConfig; +} + +export class NetworkValidation_ethConfig + implements Protobuf.Config_NetworkConfig_NetworkConfig +{ + @IsIP() + ip: number; + + @IsIP() + gateway: number; + + @IsIP() + subnet: number; + + @IsIP() + dns: number; }