Browse Source

Add config store; make config page use either device config or template

pull/110/head
Malte Grimm 4 years ago
parent
commit
fa981c2d7d
  1. 181
      pnpm-lock.yaml
  2. 8
      src/components/PageComponents/Config/Device.tsx
  3. 141
      src/core/stores/configStore.ts
  4. 9
      src/pages/Config/DeviceConfig.tsx
  5. 2
      src/pages/Setup.tsx

181
pnpm-lock.yaml

@ -1,4 +1,4 @@
lockfileVersion: 5.3
lockfileVersion: 5.4
specifiers:
'@emeraldpay/hashicon-react': ^0.5.2
@ -66,16 +66,16 @@ specifiers:
dependencies:
'@emeraldpay/hashicon-react': 0.5.2
'@headlessui/react': 1.7.7_[email protected][email protected]
'@headlessui/react': 1.7.7_biqbaboplfbrettd7655fr4n2y
'@heroicons/react': 2.0[email protected]
'@hookform/error-message': 2.0.1_fe0ed15ef81626a24b6cb60d84df0ff5
'@hookform/error-message': 2.0.1_7yhncxxycytkes3mwygyjxyp6u
'@hookform/resolvers': 2.9[email protected]
'@meshtastic/meshtasticjs': 0.9.8
'@tailwindcss/typography': 0.5[email protected]
'@turf/turf': 6.5.0
base64-js: 1.5.1
chart.js: 4.1.1
chartjs-adapter-date-fns: 3.0.0_[email protected][email protected]
chartjs-adapter-date-fns: 3.0.0_iln6v37jwapfq6ambblo6nwala
class-transformer: 0.5.1
class-validator: 0.14.0
csstype: 3.0.10
@ -86,13 +86,13 @@ dependencies:
maplibre-gl: 2.4.0
pretty-ms: 8.0.0
react: 18.2.0
react-chartjs-2: 5.1.0_[email protected][email protected]
react-chartjs-2: 5.1.0_dxa6kz4w32vmgoazz4fv7vwm2e
react-dom: 18.2[email protected]
react-hook-form: 7.41[email protected]
react-hot-toast: 2.4.0_cd1aa7a7c37ce2553841751f727f4bac
react-json-tree: 0.17.0_5642dd39ea6eb7af96c6ee336ce01d77
react-map-gl: 7.0.20_f10590181dbdd16cde654615e2a1c094
react-qrcode-logo: 2.8.0_[email protected][email protected]
react-hot-toast: 2.4.0_zunkpj6dptrfkocboupxe72lvq
react-json-tree: 0.17.0_kzbn2opkn2327fwg5yzwzya5o4
react-map-gl: 7.0.20_6eczaga5xxiwzxtfiyk6fioasq
react-qrcode-logo: 2.8.0_biqbaboplfbrettd7655fr4n2y
rfc4648: 1.5.2
timeago-react: 3.0[email protected]
zustand: 4.2[email protected][email protected]
@ -106,14 +106,14 @@ devDependencies:
'@types/react-dom': 18.0.10
'@types/w3c-web-serial': 1.0.3
'@types/web-bluetooth': 0.0.16
'@typescript-eslint/eslint-plugin': 5.47.1_05da8f9785354fe9ae8569fc7b1a482c
'@typescript-eslint/parser': 5.47.1_[email protected][email protected]
'@typescript-eslint/eslint-plugin': 5.47.1_axni7f4fgvh6tlufnh6hwgsifq
'@typescript-eslint/parser': 5.47.1_iukboom6ndih5an6iafl45j2fe
'@vitejs/plugin-react': 3.0[email protected]
autoprefixer: 10.4[email protected]
eslint: 8.31.0
eslint-config-prettier: 8.5[email protected]
eslint-import-resolver-typescript: 3.5.2_72fe982162dd88c98c30db727c58d787
eslint-plugin-import: 2.26.0_[email protected]
eslint-import-resolver-typescript: 3.5.2_ol7jqilc3wemtdbq3nzhywgxq4
eslint-plugin-import: 2.26.0_bpx4furzt4ibermwbsj75osuwi
eslint-plugin-react: 7.31[email protected]
eslint-plugin-react-hooks: 4.6[email protected]
gzipper: 7.2.0
@ -121,7 +121,7 @@ devDependencies:
prettier: 2.8.1
prettier-plugin-tailwindcss: 0.2[email protected]
rollup-plugin-visualizer: 5.9.0
tailwindcss: 3.2.4
tailwindcss: 3.2[email protected]
tar: 6.1.13
tslib: 2.4.1
typescript: 4.9.4
@ -1549,7 +1549,7 @@ packages:
base64-js: 1.5.1
dev: true
/@headlessui/react/1.7.7_[email protected][email protected]:
/@headlessui/react/1.7.7_biqbaboplfbrettd7655fr4n2y:
resolution: {integrity: sha512-BqDOd/tB9u2tA0T3Z0fn18ktw+KbVwMnkxxsGPIH2hzssrQhKB5n/6StZOyvLYP/FsYtvuXfi9I0YowKPv2c1w==}
engines: {node: '>=10'}
peerDependencies:
@ -1569,7 +1569,7 @@ packages:
react: 18.2.0
dev: false
/@hookform/error-message/2.0.1_fe0ed15ef81626a24b6cb60d84df0ff5:
/@hookform/error-message/2.0.1_7yhncxxycytkes3mwygyjxyp6u:
resolution: {integrity: sha512-U410sAr92xgxT1idlu9WWOVjndxLdgPUHEB8Schr27C9eh7/xUnITWpCMF93s+lGiG++D4JnbSnrb5A21AdSNg==}
peerDependencies:
react: '>=16.8.0'
@ -1725,12 +1725,10 @@ packages:
dependencies:
'@nodelib/fs.stat': 2.0.5
run-parallel: 1.2.0
dev: true
/@nodelib/fs.stat/2.0.5:
resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
engines: {node: '>= 8'}
dev: true
/@nodelib/fs.walk/1.2.8:
resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
@ -1738,7 +1736,6 @@ packages:
dependencies:
'@nodelib/fs.scandir': 2.1.5
fastq: 1.15.0
dev: true
/@pkgr/utils/2.3.1:
resolution: {integrity: sha512-wfzX8kc1PMyUILA+1Z/EqoE4UCXGy0iRGMhPwdfae1+f0OXlLqCk+By+aMzgJBzR9AzS4CDizioG6Ss1gvAFJw==}
@ -1756,7 +1753,7 @@ packages:
resolution: {integrity: sha512-PVxsH81y9kEbHldxxG/8Y3z2mTXWQytRl8zNS0mTPUjkEC+8GUX6gj6LsA8EFp25fAs9V0ruh+aNWmPccEI9MA==}
dev: false
/@rollup/plugin-babel/5.3.1_@[email protected][email protected]:
/@rollup/plugin-babel/5.3.1_quedi3p7womesqmjrcxptomfpa:
resolution: {integrity: sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==}
engines: {node: '>= 10.0.0'}
peerDependencies:
@ -1880,7 +1877,7 @@ packages:
tailwindcss: '>=3.0.0 || >= 3.0.0-alpha.1'
dependencies:
mini-svg-data-uri: 1.4.4
tailwindcss: 3.2.4
tailwindcss: 3.2[email protected]
dev: true
/@tailwindcss/typography/[email protected]:
@ -1892,7 +1889,7 @@ packages:
lodash.isplainobject: 4.0.6
lodash.merge: 4.6.2
postcss-selector-parser: 6.0.10
tailwindcss: 3.2.4
tailwindcss: 3.2[email protected]
dev: false
/@turf/along/6.5.0:
@ -3027,7 +3024,6 @@ packages:
'@types/prop-types': 15.7.5
'@types/scheduler': 0.16.2
csstype: 3.1.1
dev: true
/@types/resolve/1.17.1:
resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==}
@ -3037,7 +3033,6 @@ packages:
/@types/scheduler/0.16.2:
resolution: {integrity: sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==}
dev: true
/@types/semver/7.3.13:
resolution: {integrity: sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==}
@ -3059,7 +3054,7 @@ packages:
resolution: {integrity: sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==}
dev: true
/@typescript-eslint/eslint-plugin/5.47.1_05da8f9785354fe9ae8569fc7b1a482c:
/@typescript-eslint/eslint-plugin/5.47.1_axni7f4fgvh6tlufnh6hwgsifq:
resolution: {integrity: sha512-r4RZ2Jl9kcQN7K/dcOT+J7NAimbiis4sSM9spvWimsBvDegMhKLA5vri2jG19PmIPbDjPeWzfUPQ2hjEzA4Nmg==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
@ -3070,10 +3065,10 @@ packages:
typescript:
optional: true
dependencies:
'@typescript-eslint/parser': 5.47.1_[email protected][email protected]
'@typescript-eslint/parser': 5.47.1_iukboom6ndih5an6iafl45j2fe
'@typescript-eslint/scope-manager': 5.47.1
'@typescript-eslint/type-utils': 5.47.1_[email protected][email protected]
'@typescript-eslint/utils': 5.47.1_[email protected][email protected]
'@typescript-eslint/type-utils': 5.47.1_iukboom6ndih5an6iafl45j2fe
'@typescript-eslint/utils': 5.47.1_iukboom6ndih5an6iafl45j2fe
debug: 4.3.4
eslint: 8.31.0
ignore: 5.2.4
@ -3086,7 +3081,7 @@ packages:
- supports-color
dev: true
/@typescript-eslint/parser/5.47.1_[email protected][email protected]:
/@typescript-eslint/parser/5.47.1_iukboom6ndih5an6iafl45j2fe:
resolution: {integrity: sha512-9Vb+KIv29r6GPu4EboWOnQM7T+UjpjXvjCPhNORlgm40a9Ia9bvaPJswvtae1gip2QEeVeGh6YquqAzEgoRAlw==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
@ -3114,7 +3109,7 @@ packages:
'@typescript-eslint/visitor-keys': 5.47.1
dev: true
/@typescript-eslint/type-utils/5.47.1_[email protected][email protected]:
/@typescript-eslint/type-utils/5.47.1_iukboom6ndih5an6iafl45j2fe:
resolution: {integrity: sha512-/UKOeo8ee80A7/GJA427oIrBi/Gd4osk/3auBUg4Rn9EahFpevVV1mUK8hjyQD5lHPqX397x6CwOk5WGh1E/1w==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
@ -3125,7 +3120,7 @@ packages:
optional: true
dependencies:
'@typescript-eslint/typescript-estree': 5.47[email protected]
'@typescript-eslint/utils': 5.47.1_[email protected][email protected]
'@typescript-eslint/utils': 5.47.1_iukboom6ndih5an6iafl45j2fe
debug: 4.3.4
eslint: 8.31.0
tsutils: 3.21[email protected]
@ -3160,7 +3155,7 @@ packages:
- supports-color
dev: true
/@typescript-eslint/utils/5.47.1_[email protected][email protected]:
/@typescript-eslint/utils/5.47.1_iukboom6ndih5an6iafl45j2fe:
resolution: {integrity: sha512-l90SdwqfmkuIVaREZ2ykEfCezepCLxzWMo5gVfcJsJCaT4jHT+QjgSkYhs5BMQmWqE9k3AtIfk4g211z/sTMVw==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
@ -3218,18 +3213,15 @@ packages:
acorn: 7.4.1
acorn-walk: 7.2.0
xtend: 4.0.2
dev: true
/acorn-walk/7.2.0:
resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==}
engines: {node: '>=0.4.0'}
dev: true
/acorn/7.4.1:
resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==}
engines: {node: '>=0.4.0'}
hasBin: true
dev: true
/acorn/8.8.1:
resolution: {integrity: sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==}
@ -3280,11 +3272,9 @@ packages:
dependencies:
normalize-path: 3.0.0
picomatch: 2.3.1
dev: true
/arg/5.0.2:
resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==}
dev: true
/argparse/2.0.1:
resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
@ -3415,7 +3405,6 @@ packages:
/binary-extensions/2.2.0:
resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==}
engines: {node: '>=8'}
dev: true
/bl/4.1.0:
resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==}
@ -3442,7 +3431,6 @@ packages:
engines: {node: '>=8'}
dependencies:
fill-range: 7.0.1
dev: true
/browserslist/4.21.4:
resolution: {integrity: sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==}
@ -3485,7 +3473,6 @@ packages:
/camelcase-css/2.0.1:
resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
engines: {node: '>= 6'}
dev: true
/caniuse-lite/1.0.30001441:
resolution: {integrity: sha512-OyxRR4Vof59I3yGWXws6i908EtGbMzVUi3ganaZQHmydk1iwDhRnvaPG2WaR0KcqrDFKrxVZHULT396LEPhXfg==}
@ -3515,7 +3502,7 @@ packages:
'@kurkle/color': 0.3.1
dev: false
/chartjs-adapter-date-fns/3.0.0_[email protected][email protected]:
/chartjs-adapter-date-fns/3.0.0_iln6v37jwapfq6ambblo6nwala:
resolution: {integrity: sha512-Rs3iEB3Q5pJ973J93OBTpnP7qoGwvq3nUnoMdtxO+9aoJof7UFcRbWcIDteXuYd1fgAvct/32T9qaLyLuZVwCg==}
peerDependencies:
chart.js: '>=2.8.0'
@ -3538,7 +3525,6 @@ packages:
readdirp: 3.6.0
optionalDependencies:
fsevents: 2.3.2
dev: true
/chownr/2.0.0:
resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==}
@ -3718,12 +3704,22 @@ packages:
/debug/2.6.9:
resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
peerDependencies:
supports-color: '*'
peerDependenciesMeta:
supports-color:
optional: true
dependencies:
ms: 2.0.0
dev: true
/debug/3.2.7:
resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
peerDependencies:
supports-color: '*'
peerDependenciesMeta:
supports-color:
optional: true
dependencies:
ms: 2.1.3
dev: true
@ -3800,7 +3796,6 @@ packages:
/defined/1.0.1:
resolution: {integrity: sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==}
dev: true
/density-clustering/1.3.0:
resolution: {integrity: sha512-icpmBubVTwLnsaor9qH/4tG5+7+f61VcqMN3V3pm9sxxSCt2Jcs0zWOgwZW9ARJYaKD3FumIgHiMOcIMRRAzFQ==}
@ -3814,11 +3809,9 @@ packages:
acorn-node: 1.8.2
defined: 1.0.1
minimist: 1.2.7
dev: true
/didyoumean/1.2.2:
resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==}
dev: true
/dir-glob/3.0.1:
resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
@ -3829,7 +3822,6 @@ packages:
/dlv/1.1.3:
resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==}
dev: true
/doctrine/2.1.0:
resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==}
@ -4020,9 +4012,11 @@ packages:
dependencies:
debug: 3.2.7
resolve: 1.22.1
transitivePeerDependencies:
- supports-color
dev: true
/eslint-import-resolver-typescript/3.5.2_72fe982162dd88c98c30db727c58d787:
/eslint-import-resolver-typescript/3.5.2_ol7jqilc3wemtdbq3nzhywgxq4:
resolution: {integrity: sha512-zX4ebnnyXiykjhcBvKIf5TNvt8K7yX6bllTRZ14MiurKPjDpCAZujlszTdB8pcNXhZcOf+god4s9SjQa5GnytQ==}
engines: {node: ^14.18.0 || >=16.0.0}
peerDependencies:
@ -4032,7 +4026,7 @@ packages:
debug: 4.3.4
enhanced-resolve: 5.12.0
eslint: 8.31.0
eslint-plugin-import: 2.26.0_[email protected]
eslint-plugin-import: 2.26.0_bpx4furzt4ibermwbsj75osuwi
get-tsconfig: 4.3.0
globby: 13.1.3
is-core-module: 2.11.0
@ -4042,32 +4036,54 @@ packages:
- supports-color
dev: true
/eslint-module-utils/2.7.4_[email protected]:
/eslint-module-utils/2.7.4_of6uaipqaoaobv57tu2gvxhnhu:
resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==}
engines: {node: '>=4'}
peerDependencies:
'@typescript-eslint/parser': '*'
eslint: '*'
eslint-import-resolver-node: '*'
eslint-import-resolver-typescript: '*'
eslint-import-resolver-webpack: '*'
peerDependenciesMeta:
'@typescript-eslint/parser':
optional: true
eslint:
optional: true
eslint-import-resolver-node:
optional: true
eslint-import-resolver-typescript:
optional: true
eslint-import-resolver-webpack:
optional: true
dependencies:
'@typescript-eslint/parser': 5.47.1_iukboom6ndih5an6iafl45j2fe
debug: 3.2.7
eslint: 8.31.0
eslint-import-resolver-node: 0.3.6
eslint-import-resolver-typescript: 3.5.2_ol7jqilc3wemtdbq3nzhywgxq4
transitivePeerDependencies:
- supports-color
dev: true
/eslint-plugin-import/[email protected]:
/eslint-plugin-import/2.26.0_bpx4furzt4ibermwbsj75osuwi:
resolution: {integrity: sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==}
engines: {node: '>=4'}
peerDependencies:
'@typescript-eslint/parser': '*'
eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8
peerDependenciesMeta:
'@typescript-eslint/parser':
optional: true
dependencies:
'@typescript-eslint/parser': 5.47.1_iukboom6ndih5an6iafl45j2fe
array-includes: 3.1.6
array.prototype.flat: 1.3.1
debug: 2.6.9
doctrine: 2.1.0
eslint: 8.31.0
eslint-import-resolver-node: 0.3.6
eslint-module-utils: 2.7.4_[email protected]
eslint-module-utils: 2.7.4_of6uaipqaoaobv57tu2gvxhnhu
has: 1.0.3
is-core-module: 2.11.0
is-glob: 4.0.3
@ -4075,6 +4091,10 @@ packages:
object.values: 1.1.6
resolve: 1.22.1
tsconfig-paths: 3.14.1
transitivePeerDependencies:
- eslint-import-resolver-typescript
- eslint-import-resolver-webpack
- supports-color
dev: true
/eslint-plugin-react-hooks/[email protected]:
@ -4253,7 +4273,6 @@ packages:
glob-parent: 5.1.2
merge2: 1.4.1
micromatch: 4.0.5
dev: true
/fast-json-stable-stringify/2.1.0:
resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
@ -4267,7 +4286,6 @@ packages:
resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==}
dependencies:
reusify: 1.0.4
dev: true
/file-entry-cache/6.0.1:
resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==}
@ -4287,7 +4305,6 @@ packages:
engines: {node: '>=8'}
dependencies:
to-regex-range: 5.0.1
dev: true
/find-up/4.1.0:
resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==}
@ -4367,7 +4384,6 @@ packages:
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
os: [darwin]
requiresBuild: true
dev: true
optional: true
/function-bind/1.1.1:
@ -4458,14 +4474,12 @@ packages:
engines: {node: '>= 6'}
dependencies:
is-glob: 4.0.3
dev: true
/glob-parent/6.0.2:
resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
engines: {node: '>=10.13.0'}
dependencies:
is-glob: 4.0.3
dev: true
/glob/7.2.3:
resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
@ -4691,7 +4705,6 @@ packages:
engines: {node: '>=8'}
dependencies:
binary-extensions: 2.2.0
dev: true
/is-boolean-object/1.1.2:
resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==}
@ -4710,7 +4723,6 @@ packages:
resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==}
dependencies:
has: 1.0.3
dev: true
/is-date-object/1.0.5:
resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==}
@ -4727,7 +4739,6 @@ packages:
/is-extglob/2.1.1:
resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
engines: {node: '>=0.10.0'}
dev: true
/is-fullwidth-code-point/3.0.0:
resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
@ -4739,7 +4750,6 @@ packages:
engines: {node: '>=0.10.0'}
dependencies:
is-extglob: 2.1.1
dev: true
/is-interactive/1.0.0:
resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==}
@ -4769,7 +4779,6 @@ packages:
/is-number/7.0.0:
resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
engines: {node: '>=0.12.0'}
dev: true
/is-obj/1.0.1:
resolution: {integrity: sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==}
@ -5009,7 +5018,6 @@ packages:
/lilconfig/2.0.6:
resolution: {integrity: sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==}
engines: {node: '>=10'}
dev: true
/lines-and-columns/1.2.4:
resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
@ -5137,7 +5145,6 @@ packages:
/merge2/1.4.1:
resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
engines: {node: '>= 8'}
dev: true
/micromatch/4.0.5:
resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
@ -5145,7 +5152,6 @@ packages:
dependencies:
braces: 3.0.2
picomatch: 2.3.1
dev: true
/mimic-fn/2.1.0:
resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
@ -5220,7 +5226,6 @@ packages:
resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==}
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true
dev: true
/natural-compare-lite/1.4.0:
resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==}
@ -5251,7 +5256,6 @@ packages:
/normalize-path/3.0.0:
resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
engines: {node: '>=0.10.0'}
dev: true
/normalize-range/0.1.2:
resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==}
@ -5265,7 +5269,6 @@ packages:
/object-hash/3.0.0:
resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==}
engines: {node: '>= 6'}
dev: true
/object-inspect/1.12.2:
resolution: {integrity: sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==}
@ -5451,7 +5454,6 @@ packages:
/path-parse/1.0.7:
resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
dev: true
/path-type/4.0.0:
resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
@ -5476,17 +5478,14 @@ packages:
/picocolors/1.0.0:
resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
dev: true
/picomatch/2.3.1:
resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
engines: {node: '>=8.6'}
dev: true
/pify/2.3.0:
resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
engines: {node: '>=0.10.0'}
dev: true
/pirates/3.0.2:
resolution: {integrity: sha512-c5CgUJq6H2k6MJz72Ak1F5sN9n9wlSlJyEnwvpm9/y3WB4E3pHBDT2c6PEiS1vyJvq2bUxUAIu0EGf8Cx4Ic7Q==}
@ -5515,7 +5514,6 @@ packages:
postcss-value-parser: 4.2.0
read-cache: 1.0.0
resolve: 1.22.1
dev: true
/postcss-js/[email protected]:
resolution: {integrity: sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==}
@ -5525,7 +5523,6 @@ packages:
dependencies:
camelcase-css: 2.0.1
postcss: 8.4.20
dev: true
/postcss-load-config/[email protected]:
resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==}
@ -5542,7 +5539,6 @@ packages:
lilconfig: 2.0.6
postcss: 8.4.20
yaml: 1.10.2
dev: true
/postcss-nested/[email protected]:
resolution: {integrity: sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==}
@ -5552,7 +5548,6 @@ packages:
dependencies:
postcss: 8.4.20
postcss-selector-parser: 6.0.11
dev: true
/postcss-selector-parser/6.0.10:
resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==}
@ -5568,11 +5563,9 @@ packages:
dependencies:
cssesc: 3.0.0
util-deprecate: 1.0.2
dev: true
/postcss-value-parser/4.2.0:
resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
dev: true
/postcss/8.4.20:
resolution: {integrity: sha512-6Q04AXR1212bXr5fh03u8aAwbLxAQNGQ/Q1LNa0VfOI06ZAlhPHtQvE4OIdpj4kLThXilalPnmDSOD65DcHt+g==}
@ -5581,7 +5574,6 @@ packages:
nanoid: 3.3.4
picocolors: 1.0.0
source-map-js: 1.0.2
dev: true
/potpack/1.0.2:
resolution: {integrity: sha512-choctRBIV9EMT9WGAZHn3V7t0Z2pMQyl0EZE6pFc/6ml3ssw7Dlf/oAOvFwjm1HVsqfQN8GfeFyJ+d8tRzqueQ==}
@ -5658,12 +5650,10 @@ packages:
/queue-microtask/1.2.3:
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
dev: true
/quick-lru/5.1.1:
resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==}
engines: {node: '>=10'}
dev: true
/quickselect/1.1.1:
resolution: {integrity: sha512-qN0Gqdw4c4KGPsBOQafj6yj/PA6c/L63f6CaZ/DCF/xF4Esu3jVmKLUDYxghFx8Kb/O7y9tI7x2RjTSXwdK1iQ==}
@ -5707,7 +5697,7 @@ packages:
lodash.curry: 4.1.1
dev: false
/react-chartjs-2/5.1.0_[email protected][email protected]:
/react-chartjs-2/5.1.0_dxa6kz4w32vmgoazz4fv7vwm2e:
resolution: {integrity: sha512-Gt76b7+p7nMQq0MvkWfUSNAzIm/TLAnAO32zIpSzrQyc9JWRbVCtq8qOzPJmfpDzPcIJ7Y9Gp5g+VdTRrGITsQ==}
peerDependencies:
chart.js: ^4.1.1
@ -5736,7 +5726,7 @@ packages:
react: 18.2.0
dev: false
/react-hot-toast/2.4.0_cd1aa7a7c37ce2553841751f727f4bac:
/react-hot-toast/2.4.0_zunkpj6dptrfkocboupxe72lvq:
resolution: {integrity: sha512-qnnVbXropKuwUpriVVosgo8QrB+IaPJCpL8oBI6Ov84uvHZ5QQcTp2qg6ku2wNfgJl6rlQXJIQU5q+5lmPOutA==}
engines: {node: '>=10'}
peerDependencies:
@ -5753,7 +5743,7 @@ packages:
/react-is/16.13.1:
resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
/react-json-tree/0.17.0_5642dd39ea6eb7af96c6ee336ce01d77:
/react-json-tree/0.17.0_kzbn2opkn2327fwg5yzwzya5o4:
resolution: {integrity: sha512-hcWjibI/fAvsKnfYk+lka5OrE1Lvb1jH5pSnFhIU5T8cCCxB85r6h/NOzDPggSSgErjmx4rl3+2EkeclIKBOhg==}
peerDependencies:
'@types/react': ^16.3.0 || ^17.0.0 || ^18.0.0
@ -5768,7 +5758,7 @@ packages:
react-base16-styling: 0.9.1
dev: false
/react-map-gl/7.0.20_f10590181dbdd16cde654615e2a1c094:
/react-map-gl/7.0.20_6eczaga5xxiwzxtfiyk6fioasq:
resolution: {integrity: sha512-Q1formrWEdt9vY5DyW2vgdmAPuSMH2TFn8xKMlA+cmBlyS8veQvVTGoq4lAm8p3Hb/90ZpNmMtI4s107r931vQ==}
peerDependencies:
mapbox-gl: '*'
@ -5779,7 +5769,7 @@ packages:
react: 18.2.0
dev: false
/react-qrcode-logo/2.8.0_[email protected][email protected]:
/react-qrcode-logo/2.8.0_biqbaboplfbrettd7655fr4n2y:
resolution: {integrity: sha512-dbEgjsg6C4tK6+oGmCRDlJ7urQAWqybaGBLJtp8Z6ZYvVUP302HBXk/F7VRk54yWTwzlHwig3VK6HMKCha2YFw==}
peerDependencies:
react: '>=16.4.1'
@ -5816,7 +5806,6 @@ packages:
resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==}
dependencies:
pify: 2.3.0
dev: true
/read-pkg-up/7.0.1:
resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==}
@ -5863,7 +5852,6 @@ packages:
engines: {node: '>=8.10.0'}
dependencies:
picomatch: 2.3.1
dev: true
/regenerate-unicode-properties/10.1.0:
resolution: {integrity: sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==}
@ -5949,7 +5937,6 @@ packages:
is-core-module: 2.11.0
path-parse: 1.0.7
supports-preserve-symlinks-flag: 1.0.0
dev: true
/resolve/2.0.0-next.4:
resolution: {integrity: sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==}
@ -5971,7 +5958,6 @@ packages:
/reusify/1.0.4:
resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
dev: true
/rfc4648/1.5.2:
resolution: {integrity: sha512-tLOizhR6YGovrEBLatX1sdcuhoSCXddw3mqNVAcKxGJ+J0hFeJ+SjeWCv5UPA/WU3YzWPPuCVYgXBKZUPGpKtg==}
@ -6037,7 +6023,6 @@ packages:
resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
dependencies:
queue-microtask: 1.2.3
dev: true
/safe-buffer/5.1.2:
resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
@ -6151,7 +6136,6 @@ packages:
/source-map-js/1.0.2:
resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
engines: {node: '>=0.10.0'}
dev: true
/source-map-support/0.5.21:
resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
@ -6321,7 +6305,6 @@ packages:
/supports-preserve-symlinks-flag/1.0.0:
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
engines: {node: '>= 0.4'}
dev: true
/synckit/0.8.4:
resolution: {integrity: sha512-Dn2ZkzMdSX827QbowGbU/4yjWuvNaCoScLLoMo/yKbu+P4GBR6cRGKZH27k6a9bRzdqcyd1DE96pQtQ6uNkmyw==}
@ -6331,10 +6314,12 @@ packages:
tslib: 2.4.1
dev: true
/tailwindcss/3.2.4:
/tailwindcss/3.2.4[email protected]:
resolution: {integrity: sha512-AhwtHCKMtR71JgeYDaswmZXhPcW9iuI9Sp2LvZPo9upDZ7231ZJ7eA9RaURbhpXGVlrjX4cFNlB4ieTetEb7hQ==}
engines: {node: '>=12.13.0'}
hasBin: true
peerDependencies:
postcss: ^8.0.9
dependencies:
arg: 5.0.2
chokidar: 3.5.3
@ -6361,7 +6346,6 @@ packages:
resolve: 1.22.1
transitivePeerDependencies:
- ts-node
dev: true
/tapable/2.2.1:
resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==}
@ -6470,7 +6454,6 @@ packages:
engines: {node: '>=8.0'}
dependencies:
is-number: 7.0.0
dev: true
/topojson-client/3.1.0:
resolution: {integrity: sha512-605uxS6bcYxGXw9qi62XyrV6Q3xwbndjachmNxu8HWTtVPxZfEJN9fd/SZS1Q54Sn2y0TMyMxFj/cJINqGHrKw==}
@ -6598,7 +6581,7 @@ packages:
engines: {node: '>=14.0.0'}
hasBin: true
dependencies:
'@typescript-eslint/parser': 5.47.1_[email protected][email protected]
'@typescript-eslint/parser': 5.47.1_iukboom6ndih5an6iafl45j2fe
'@typescript-eslint/typescript-estree': 5.47[email protected]
chalk: 4.1.2
debug: 4.3.4
@ -6847,7 +6830,7 @@ packages:
'@babel/core': 7.20.7
'@babel/preset-env': 7.20.2_@[email protected]
'@babel/runtime': 7.20.7
'@rollup/plugin-babel': 5.3.1_@[email protected][email protected]
'@rollup/plugin-babel': 5.3.1_quedi3p7womesqmjrcxptomfpa
'@rollup/plugin-node-resolve': 11.2[email protected]
'@rollup/plugin-replace': 2.4[email protected]
'@surma/rollup-plugin-off-main-thread': 2.2.3
@ -6987,7 +6970,6 @@ packages:
/xtend/4.0.2:
resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
engines: {node: '>=0.4'}
dev: true
/y18n/5.0.8:
resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
@ -7005,7 +6987,6 @@ packages:
/yaml/1.10.2:
resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==}
engines: {node: '>= 6'}
dev: true
/yargs-parser/20.2.9:
resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==}

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

@ -13,9 +13,15 @@ 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";
import { useAppStore } from "@app/core/stores/appStore";
import { getCurrentConfig } from "@app/core/stores/configStore";
export const Device = (): JSX.Element => {
const { config, connection, setConfig } = useDevice();
// TODO: Apply to other pages as well
const { selectedDevice } = useAppStore();
const { config, moduleConfig } = getCurrentConfig();
// TODO: Put these in separate setCurrentConfig() function
const { connection, setConfig } = selectedDevice != -1 ? useDevice() : {connection: undefined, setConfig: undefined };
const {
register,
handleSubmit,

141
src/core/stores/configStore.ts

@ -0,0 +1,141 @@
import { createContext } from "react";
import { produce } from "immer";
import create from "zustand";
import { Channel, Page, MessageWithState, WaypointIDWithState, MessageState, processPacketParams, useDeviceStore } from "./deviceStore";
import { Protobuf, Types } from "@meshtastic/meshtasticjs";
import { useAppStore } from "./appStore";
export function getCurrentConfig(): Config {
const { selectedDevice } = useAppStore();
console.warn(`Selected device: ${selectedDevice}`);
if(selectedDevice !== -1) {
const device = useDeviceStore().getDevice(selectedDevice);
if(device === undefined)
throw "Invalid device selected";
return { config: device.config, moduleConfig: device.moduleConfig };
}
else {
console.warn("Requesting template config");
// TODO: Get currently selected template instead of the first one
let config = useConfigStore().getTemplateConfig(0);
if(config === undefined) {
console.warn("Creating...");
useConfigStore().addTemplateConfig();
}
console.warn("Returning template config");
return useConfigStore().getTemplateConfig(0)!;
}
}
export interface ConfigState {
// Current numbering system is: positive ID for devices, negative index for templates
configs: Map<number, Config>;
templateConfigs: Config[];
// addDeviceConfig: (id: number) => Config;
// removeDeviceConfig: (id: number) => void;
// getDeviceConfigs: () => Config[];
// getDeviceConfig: (id: number) => Config | undefined;
addTemplateConfig: () => Config;
// removeTemplateConfig: (index: number) => void;
// getTemplateConfigs: () => Config[];
getTemplateConfig: (index: number) => Config | undefined;
}
export const useConfigStore = create<ConfigState>((set, get) => ({
configs: new Map(),
templateConfigs: [],
// addDeviceConfig: (id: number) => {
// set(
// produce<ConfigState>((draft) => {
// draft.configs.set(id, {
// mainConfig: Protobuf.LocalConfig.create(),
// moduleConfig: Protobuf.LocalModuleConfig.create()
// });
// })
// );
// return get().configs.get(id)!;
// },
// removeDeviceConfig: (id: number) => {
// set(
// produce<ConfigState>((draft) => {
// draft.configs.delete(id);
// })
// );
// },
// getDeviceConfigs: () => {
// const configs = get().configs;
// const posKeys = Array.from(configs.keys()).filter(id => id > 0);
// return posKeys.map(key => configs.get(key)!);
// },
// getDeviceConfig: (id: number) => {
// return get().configs.get(id);
// }
addTemplateConfig: () => {
const newConfig = { config: Protobuf.LocalConfig.create(), moduleConfig: Protobuf.LocalModuleConfig.create() };
set(
produce<ConfigState>((draft) => {
draft.templateConfigs.push(newConfig)
})
);
return newConfig;
},
getTemplateConfig: (index: number) => {
return get().templateConfigs[index];
}
}));
export interface Config {
config: Protobuf.LocalConfig;
moduleConfig: Protobuf.LocalModuleConfig;
// activePage: Page; // What to do???
// peerInfoOpen: boolean;
// activePeer: number;
// waypoints: Protobuf.Waypoint[];
// regionUnset: boolean;
// currentMetrics: Protobuf.DeviceMetrics;
// importDialogOpen: boolean;
// QRDialogOpen: boolean;
// shutdownDialogOpen: boolean;
// rebootDialogOpen: boolean;
// pendingSettingsChanges: boolean;
// setReady(ready: boolean): void;
// setStatus: (status: Types.DeviceStatusEnum) => void;
// setConfig: (config: Protobuf.Config) => void;
// setModuleConfig: (config: Protobuf.ModuleConfig) => void;
// // setHardware: (hardware: Protobuf.MyNodeInfo) => void;
// // setMetrics: (metrics: Types.PacketMetadata<Protobuf.Telemetry>) => void;
// setActivePage: (page: Page) => void;
// setPeerInfoOpen: (open: boolean) => void;
// setActivePeer: (peer: number) => void;
// setPendingSettingsChanges: (state: boolean) => void;
// addChannel: (channel: Channel) => void;
// addWaypoint: (waypoint: Protobuf.Waypoint) => void;
// addNodeInfo: (nodeInfo: Protobuf.NodeInfo) => void;
// addUser: (user: Types.PacketMetadata<Protobuf.User>) => void;
// addPosition: (position: Types.PacketMetadata<Protobuf.Position>) => void;
// addConnection: (connection: Types.ConnectionType) => void;
// addMessage: (message: MessageWithState) => void;
// addWaypointMessage: (message: WaypointIDWithState) => void;
// addDeviceMetadataMessage: (
// metadata: Types.PacketMetadata<Protobuf.DeviceMetadata>
// ) => void;
// setMessageState: (
// channelIndex: number,
// messageId: number,
// state: MessageState
// ) => void;
// setImportDialogOpen: (open: boolean) => void;
// setQRDialogOpen: (open: boolean) => void;
// setShutdownDialogOpen: (open: boolean) => void;
// setRebootDialogOpen: (open: boolean) => void;
// processPacket: (data: processPacketParams) => void;
}

9
src/pages/Config/DeviceConfig.tsx

@ -11,11 +11,13 @@ import { Power } from "@components/PageComponents/Config/Power.js";
import { User } from "@components/PageComponents/Config/User.js";
import { useDevice } from "@core/providers/useDevice.js";
import { Tab } from "@headlessui/react";
import { useAppStore } from "@app/core/stores/appStore";
export const DeviceConfig = (): JSX.Element => {
const { selectedDevice } = useAppStore();
const { hardware } = useDevice();
const configSections = [
let configSections = [
{
label: "User",
element: User
@ -51,6 +53,11 @@ export const DeviceConfig = (): JSX.Element => {
}
];
// FIXME: Kinda hacky
if(selectedDevice == -1) {
configSections = configSections.slice(1);
}
return (
<Tab.Group as="div" className="flex w-full gap-3">
<Tab.List className="flex w-44 flex-col gap-1">

2
src/pages/Setup.tsx

@ -9,8 +9,10 @@ import {
QrCodeIcon
} from "@heroicons/react/24/outline";
import { Protobuf } from "@meshtastic/meshtasticjs";
import { Mono } from "@app/components/generic/Mono";
export const SetupPage = (): JSX.Element => {
return ( <Mono>Setup page goes here</Mono> )
const { channels, setQRDialogOpen, setImportDialogOpen } = useDevice();
const tabs: TabType[] = channels.map((channel) => {

Loading…
Cancel
Save