Browse Source

Remove nodes page

pull/31/head
Sacha Weatherstone 4 years ago
parent
commit
a8419da02b
  1. 2
      package.json
  2. 330
      pnpm-lock.yaml
  3. 2
      src/App.tsx
  4. 8
      src/components/layout/index.tsx
  5. 1
      src/core/router.ts
  6. 144
      src/pages/Nodes/index.tsx

2
package.json

@ -20,6 +20,7 @@
},
"homepage": "https://meshtastic.org",
"dependencies": {
"@arcgis/core": "^4.23.7",
"@emeraldpay/hashicon-react": "^0.5.2",
"@meshtastic/eslint-config": "^1.0.8",
"@meshtastic/meshtasticjs": "^0.6.63",
@ -32,7 +33,6 @@
"react": "^18.1.0",
"react-dom": "^18.1.0",
"react-error-boundary": "^3.1.4",
"react-flow-renderer": "^10.2.1",
"react-hook-form": "^7.30.0",
"react-icons": "^4.3.1",
"react-json-pretty": "^2.2.0",

330
pnpm-lock.yaml

@ -1,6 +1,7 @@
lockfileVersion: 5.4
specifiers:
'@arcgis/core': ^4.23.7
'@emeraldpay/hashicon-react': ^0.5.2
'@meshtastic/eslint-config': ^1.0.8
'@meshtastic/meshtasticjs': ^0.6.63
@ -24,7 +25,6 @@ specifiers:
react: ^18.1.0
react-dom: ^18.1.0
react-error-boundary: ^3.1.4
react-flow-renderer: ^10.2.1
react-hook-form: ^7.30.0
react-icons: ^4.3.1
react-json-pretty: ^2.2.0
@ -48,9 +48,10 @@ specifiers:
workbox-window: ^6.5.3
dependencies:
'@arcgis/core': 4.23.7
'@emeraldpay/hashicon-react': 0.5.2
'@meshtastic/eslint-config': 1.0.8
'@meshtastic/meshtasticjs': link:../meshtastic.js
'@meshtastic/meshtasticjs': 0.6.63
'@reduxjs/toolkit': 1.8.1_j24pcqpkbsj43woxscsovlj4au
'@tippyjs/react': 4.2.6_ef5jwxihqo6n7gxfmzogljlgcm
base64-js: 1.5.1
@ -60,7 +61,6 @@ dependencies:
react: 18.1.0
react-dom: 18.1[email protected]
react-error-boundary: 3.1[email protected]
react-flow-renderer: 10.2.1_ef5jwxihqo6n7gxfmzogljlgcm
react-hook-form: 7.30[email protected]
react-icons: 4.3[email protected]
react-json-pretty: 2.2.0_ef5jwxihqo6n7gxfmzogljlgcm
@ -98,6 +98,10 @@ devDependencies:
packages:
/@a11y/focus-trap/1.0.5:
resolution: {integrity: sha512-3JOd6g+BALysWS8LNf0qdB8ltR651H/RCLAvUmfS0LIHwHO579XfjZUIZbURYiAZrcbp1CBAq4QZ2YwKNQZ1hw==}
dev: false
/@ampproject/remapping/2.2.0:
resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==}
engines: {node: '>=6.0.0'}
@ -118,6 +122,18 @@ packages:
leven: 3.1.0
dev: true
/@arcgis/core/4.23.7:
resolution: {integrity: sha512-xi3eBV513CmoHQ6F1OurEt71aBt4FzDOaOrPKzsFVJnq0LeDPKUHfsBs4E8BoGLSk5df+gDCZG+WHTmzxu8c0w==}
dependencies:
'@esri/arcgis-html-sanitizer': 2.9.0
'@esri/calcite-colors': 6.0.1
'@esri/calcite-components': 1.0.0-beta.77
'@popperjs/core': 2.11.5
focus-trap: 6.7.3
luxon: 2.3.2
sortablejs: 1.14.0
dev: false
/@babel/code-frame/7.12.11:
resolution: {integrity: sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==}
dependencies:
@ -405,6 +421,8 @@ packages:
resolution: {integrity: sha512-n2Q6i+fnJqzOaq2VkdXxy2TCPCWQZHiCo0XqmrCvDWcZQKRyZzYi4Z0yxlBuN0w+r2ZHmre+Q087DSrw3pbJDQ==}
engines: {node: '>=6.0.0'}
hasBin: true
dependencies:
'@babel/types': 7.17.10
dev: true
/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.16.7_@[email protected]:
@ -1357,6 +1375,30 @@ packages:
- supports-color
dev: false
/@esri/arcgis-html-sanitizer/2.9.0:
resolution: {integrity: sha512-kF5gfE2W16Nu/p4P69bsGmo7CKzKiTHlK3oWOqrDy/ptaMxEDCorHLm9UKULCA478xlOQM6lSnq4o3HYgST5Lw==}
dependencies:
lodash.isplainobject: 4.0.6
xss: 1.0.11
dev: false
/@esri/calcite-colors/6.0.1:
resolution: {integrity: sha512-iGUIIpeMCJSTDGw4ZsxLwwxkml0QzOUJTtysjRryGbhSt183NEtwWKS+yQO19utXQz5LbQWjoav6x6CsawElkw==}
dev: false
/@esri/calcite-components/1.0.0-beta.77:
resolution: {integrity: sha512-fCE9ikXHzUQTHJSMXNYB1/WrPpKtQMUBbaypbbwwxM8y3ifavN0a5ns7NAC+W7uQJA+29fGpAlIMjXr/483eXw==}
dependencies:
'@a11y/focus-trap': 1.0.5
'@popperjs/core': 2.11.2
'@stencil/core': 2.13.0
'@types/color': 3.0.3
color: 4.2.0
form-request-submit-polyfill: 2.0.0
lodash-es: 4.17.21
sortablejs: 1.14.0
dev: false
/@gfx/zopfli/1.0.15:
resolution: {integrity: sha512-7mBgpi7UD82fsff5ThQKet0uBTl4BYerQuc+/qA1ELTwWEiIedRTcD3JgiUu9wwZ2kytW8JOb165rSdAt8PfcQ==}
engines: {node: '>= 8'}
@ -1483,13 +1525,26 @@ packages:
eslint-config-prettier: 8.5[email protected]
eslint-import-resolver-typescript: 2.7.1_gwd37gqv3vjv3xlpl7ju3ag2qu
eslint-plugin-eslint-comments: 3.2[email protected]
eslint-plugin-import: 2.26.0_[email protected]
eslint-plugin-import: 2.26.0_5v5qjrtguv7otneb3mumlvzpgm
eslint-plugin-react: 7.29[email protected]
eslint-plugin-react-hooks: 4.5[email protected]
prettier: 2.6.2
prettier-plugin-tailwindcss: 0.1[email protected]
typescript: 4.6.4
transitivePeerDependencies:
- eslint-import-resolver-webpack
- supports-color
dev: false
/@meshtastic/meshtasticjs/0.6.63:
resolution: {integrity: sha512-0OaiapSBrciOAR75pimxPzqH6K/HM7TBudL+YIvOq0EHYd1fmeIqQD99wSCITv+i/r/DUNs6hAh2N+lkOPKHNw==}
dependencies:
'@meshtastic/eslint-config': 1.0.8
'@protobuf-ts/runtime': 2.5.0
prettier: 2.6.2
sub-events: 1.8.9
transitivePeerDependencies:
- eslint-import-resolver-webpack
- supports-color
dev: false
@ -1511,10 +1566,18 @@ packages:
'@nodelib/fs.scandir': 2.1.5
fastq: 1.13.0
/@popperjs/core/2.11.2:
resolution: {integrity: sha512-92FRmppjjqz29VMJ2dn+xdyXZBrMlE42AV6Kq6BwjWV7CNUW1hs2FtxSNLQE+gJhaZ6AAmYuO9y8dshhcBl7vA==}
dev: false
/@popperjs/core/2.11.5:
resolution: {integrity: sha512-9X2obfABZuDVLCgPK9aX0a/x4jaOEweTTWE2+9sr0Qqqevj2Uv5XorvusThmc9XGYpS9yI+fhh8RTafBtGposw==}
dev: false
/@protobuf-ts/runtime/2.5.0:
resolution: {integrity: sha512-ClfuZQ3iPVABJ0CXLGI044eox1PtmrIbbXZaHYczdFJjaxxn8U7vnwb1dPBM9JZ2I6H1VLZu8A9Z5nRv7zydsg==}
dev: false
/@reduxjs/toolkit/1.8.1_j24pcqpkbsj43woxscsovlj4au:
resolution: {integrity: sha512-Q6mzbTpO9nOYRnkwpDlFOAbQnd3g7zj7CtHAZWz5SzE5lcV97Tf8f3SzOO8BoPOMYBFgfZaqTUZqgGu+a0+Fng==}
peerDependencies:
@ -1622,6 +1685,12 @@ packages:
resolution: {integrity: sha512-WfqfX/eXGiAd3RJe4VU2snh/ZPwtSjLG4ynQ/vYzvghTh7dHFcI1wl+nrkWG6lGhukOxOsUHfv8dUXr58D0ayg==}
dev: false
/@stencil/core/2.13.0:
resolution: {integrity: sha512-EEKHOHgYpg3/iFUKMXTZJjUayRul7sXDwNw0OGgkEOe4t7JWiibDkzUHuruvpbqEydX+z1+ez5K2bMMY76c2wA==}
engines: {node: '>=12.10.0', npm: '>=6.0.0'}
hasBin: true
dev: false
/@surma/rollup-plugin-off-main-thread/2.2.3:
resolution: {integrity: sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==}
dependencies:
@ -1649,6 +1718,22 @@ packages:
'@types/har-format': 1.2.8
dev: true
/@types/color-convert/2.0.0:
resolution: {integrity: sha512-m7GG7IKKGuJUXvkZ1qqG3ChccdIM/qBBo913z+Xft0nKCX4hAU/IxKwZBU4cpRZ7GS5kV4vOblUkILtSShCPXQ==}
dependencies:
'@types/color-name': 1.1.1
dev: false
/@types/color-name/1.1.1:
resolution: {integrity: sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==}
dev: false
/@types/color/3.0.3:
resolution: {integrity: sha512-X//qzJ3d3Zj82J9sC/C18ZY5f43utPbAJ6PhYt/M7uG6etcF6MRpKdN880KBy43B0BMzSfeT96MzrsNjFI3GbA==}
dependencies:
'@types/color-convert': 2.0.0
dev: false
/@types/estree/0.0.39:
resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==}
dev: true
@ -2282,10 +2367,6 @@ packages:
engines: {node: '>=10'}
dev: true
/classcat/5.0.3:
resolution: {integrity: sha512-6dK2ke4VEJZOFx2ZfdDAl5OhEL8lvkl6EHF92IfRePfHxQTqir5NlcNVUv+2idjDqCX2NDc8m8YSAI5NI975ZQ==}
dev: false
/cli-cursor/3.1.0:
resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==}
engines: {node: '>=8'}
@ -2311,11 +2392,6 @@ packages:
engines: {node: '>=0.8'}
dev: true
/clsx/1.1.1:
resolution: {integrity: sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==}
engines: {node: '>=6'}
dev: false
/color-convert/1.9.3:
resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
dependencies:
@ -2335,9 +2411,22 @@ packages:
/color-name/1.1.4:
resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
/color-string/1.9.1:
resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==}
dependencies:
color-name: 1.1.4
simple-swizzle: 0.2.2
dev: false
/color/4.2.0:
resolution: {integrity: sha512-hHTcrbvEnGjC7WBMk6ibQWFVDgEFTVmjrz2Q5HlU6ltwxv0JJN2Z8I7uRbWeQLF04dikxs8zgyZkazRJvSMtyQ==}
dependencies:
color-convert: 2.0.1
color-string: 1.9.1
dev: false
/commander/2.20.3:
resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
dev: true
/commander/7.2.0:
resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==}
@ -2398,82 +2487,31 @@ packages:
hasBin: true
dev: true
/csstype/3.0.11:
resolution: {integrity: sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw==}
/d3-color/3.1.0:
resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==}
engines: {node: '>=12'}
dev: false
/d3-dispatch/3.0.1:
resolution: {integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==}
engines: {node: '>=12'}
/cssfilter/0.0.10:
resolution: {integrity: sha1-xtJnJjKi5cg+AT5oZKQs6N79IK4=}
dev: false
/d3-drag/3.0.0:
resolution: {integrity: sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==}
engines: {node: '>=12'}
dependencies:
d3-dispatch: 3.0.1
d3-selection: 3.0.0
dev: false
/d3-ease/3.0.1:
resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==}
engines: {node: '>=12'}
dev: false
/d3-interpolate/3.0.1:
resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==}
engines: {node: '>=12'}
dependencies:
d3-color: 3.1.0
dev: false
/d3-selection/3.0.0:
resolution: {integrity: sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==}
engines: {node: '>=12'}
dev: false
/d3-timer/3.0.1:
resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==}
engines: {node: '>=12'}
dev: false
/d3-transition/[email protected]:
resolution: {integrity: sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==}
engines: {node: '>=12'}
peerDependencies:
d3-selection: 2 - 3
dependencies:
d3-color: 3.1.0
d3-dispatch: 3.0.1
d3-ease: 3.0.1
d3-interpolate: 3.0.1
d3-selection: 3.0.0
d3-timer: 3.0.1
dev: false
/d3-zoom/3.0.0:
resolution: {integrity: sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==}
engines: {node: '>=12'}
dependencies:
d3-dispatch: 3.0.1
d3-drag: 3.0.0
d3-interpolate: 3.0.1
d3-selection: 3.0.0
d3-transition: 3.0[email protected]
dev: false
/csstype/3.0.11:
resolution: {integrity: sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw==}
/debug/2.6.9:
resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
peerDependencies:
supports-color: '*'
peerDependenciesMeta:
supports-color:
optional: true
dependencies:
ms: 2.0.0
dev: false
/debug/3.2.7:
resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
peerDependencies:
supports-color: '*'
peerDependenciesMeta:
supports-color:
optional: true
dependencies:
ms: 2.1.3
dev: false
@ -2918,6 +2956,8 @@ packages:
dependencies:
debug: 3.2.7
resolve: 1.22.0
transitivePeerDependencies:
- supports-color
dev: false
/eslint-import-resolver-typescript/2.7.1_gwd37gqv3vjv3xlpl7ju3ag2qu:
@ -2929,7 +2969,7 @@ packages:
dependencies:
debug: 4.3.4
eslint: 8.15.0
eslint-plugin-import: 2.26.0_[email protected]
eslint-plugin-import: 2.26.0_5v5qjrtguv7otneb3mumlvzpgm
glob: 7.2.0
is-glob: 4.0.3
resolve: 1.22.0
@ -2938,12 +2978,31 @@ packages:
- supports-color
dev: false
/eslint-module-utils/2.7.3:
/eslint-module-utils/2.7.3_kvyt4kvbdmj4ueyk2ybejan4d4:
resolution: {integrity: sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==}
engines: {node: '>=4'}
peerDependencies:
'@typescript-eslint/parser': '*'
eslint-import-resolver-node: '*'
eslint-import-resolver-typescript: '*'
eslint-import-resolver-webpack: '*'
peerDependenciesMeta:
'@typescript-eslint/parser':
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.22.0_hcfsmds2fshutdssjqluwm76uu
debug: 3.2.7
eslint-import-resolver-node: 0.3.6
eslint-import-resolver-typescript: 2.7.1_gwd37gqv3vjv3xlpl7ju3ag2qu
find-up: 2.1.0
transitivePeerDependencies:
- supports-color
dev: false
/eslint-plugin-eslint-comments/[email protected]:
@ -2957,19 +3016,24 @@ packages:
ignore: 5.2.0
dev: false
/eslint-plugin-import/2.26.0_[email protected]:
/eslint-plugin-import/2.26.0_5v5qjrtguv7otneb3mumlvzpgm:
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.22.0_hcfsmds2fshutdssjqluwm76uu
array-includes: 3.1.5
array.prototype.flat: 1.3.0
debug: 2.6.9
doctrine: 2.1.0
eslint: 8.15.0
eslint-import-resolver-node: 0.3.6
eslint-module-utils: 2.7.3
eslint-module-utils: 2.7.3_kvyt4kvbdmj4ueyk2ybejan4d4
has: 1.0.3
is-core-module: 2.9.0
is-glob: 4.0.3
@ -2977,6 +3041,10 @@ packages:
object.values: 1.1.5
resolve: 1.22.0
tsconfig-paths: 3.14.1
transitivePeerDependencies:
- eslint-import-resolver-typescript
- eslint-import-resolver-webpack
- supports-color
dev: false
/eslint-plugin-react-hooks/[email protected]:
@ -3288,10 +3356,20 @@ packages:
vlq: 0.2.3
dev: true
/focus-trap/6.7.3:
resolution: {integrity: sha512-8xCEKndV4KrseGhFKKKmczVA14yx1/hnmFICPOjcFjToxCJYj/NHH43tPc3YE/PLnLRNZoFug0EcWkGQde/miQ==}
dependencies:
tabbable: 5.3.2
dev: false
/foreach/2.0.5:
resolution: {integrity: sha1-C+4AUBiusmDQo6865ljdATbsG5k=}
dev: true
/form-request-submit-polyfill/2.0.0:
resolution: {integrity: sha512-p0+M92y2gFnP0AuuL8VJ0GYVzAT0bYp3GsSkmPFhvUopdnfDLP/9xplQTBBc4w8qOjKRzdK7GaFcdL9IhlXdTQ==}
dev: false
/fraction.js/4.2.0:
resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==}
dev: true
@ -3583,6 +3661,10 @@ packages:
resolution: {integrity: sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=}
dev: true
/is-arrayish/0.3.2:
resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==}
dev: false
/is-bigint/1.0.4:
resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==}
dependencies:
@ -3913,10 +3995,18 @@ packages:
p-locate: 4.1.0
dev: true
/lodash-es/4.17.21:
resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==}
dev: false
/lodash.debounce/4.0.8:
resolution: {integrity: sha1-gteb/zCmfEAF/9XiUVMArZyk168=}
dev: true
/lodash.isplainobject/4.0.6:
resolution: {integrity: sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=}
dev: false
/lodash.merge/4.6.2:
resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
@ -3953,6 +4043,11 @@ packages:
dependencies:
yallist: 4.0.0
/luxon/2.3.2:
resolution: {integrity: sha512-MlAQQVMFhGk4WUA6gpfsy0QycnKP0+NlCBJRVRNPxxSIbjrCbQ65nrpJD3FVyJNZLuJ0uoqL57ye6BmDYgHaSw==}
engines: {node: '>=12'}
dev: false
/magic-string/0.25.9:
resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==}
dependencies:
@ -4490,18 +4585,6 @@ packages:
scheduler: 0.22.0
dev: false
/react-draggable/4.4.5_ef5jwxihqo6n7gxfmzogljlgcm:
resolution: {integrity: sha512-OMHzJdyJbYTZo4uQE393fHcqqPYsEtkjfMgvCHr6rejT+Ezn4OZbNyGH50vv+SunC1RMvwOTSWkEODQLzw1M9g==}
peerDependencies:
react: '>= 16.3.0'
react-dom: '>= 16.3.0'
dependencies:
clsx: 1.1.1
prop-types: 15.8.1
react: 18.1.0
react-dom: 18.1[email protected]
dev: false
/react-error-boundary/[email protected]:
resolution: {integrity: sha512-uM9uPzZJTF6wRQORmSrvOIgt4lJ9MC1sNgEOj2XGsDTRE4kmpWxg7ENK9EWNKJRMAOY9z0MuF4yIfl6gp4sotA==}
engines: {node: '>=10', npm: '>=6'}
@ -4512,23 +4595,6 @@ packages:
react: 18.1.0
dev: false
/react-flow-renderer/10.2.1_ef5jwxihqo6n7gxfmzogljlgcm:
resolution: {integrity: sha512-F2JG9Uc1t7DWzc+HK6REGooW/tt6X5/8frbXnq7ug6yObAPEmfWlTQjRP917cKVkIxFzI1pU38RwHdOoPdsfJw==}
engines: {node: '>=14'}
peerDependencies:
react: 16 || 17 || 18
react-dom: 16 || 17 || 18
dependencies:
'@babel/runtime': 7.17.9
classcat: 5.0.3
d3-selection: 3.0.0
d3-zoom: 3.0.0
react: 18.1.0
react-dom: 18.1[email protected]
react-draggable: 4.4.5_ef5jwxihqo6n7gxfmzogljlgcm
zustand: 3.7[email protected]
dev: false
/react-hook-form/[email protected]:
resolution: {integrity: sha512-DzjiM6o2vtDGNMB9I4yCqW8J21P314SboNG1O0obROkbg7KVS0I7bMtwSdKyapnCPjHgnxc3L7E5PEdISeEUcQ==}
engines: {node: '>=12.22.0'}
@ -4942,6 +5008,12 @@ packages:
- supports-color
dev: true
/simple-swizzle/0.2.2:
resolution: {integrity: sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=}
dependencies:
is-arrayish: 0.3.2
dev: false
/simple-zstd/1.4.0:
resolution: {integrity: sha512-9zBNnu7MkwRiZm7voFUX7ehCcLO2d1FmJ2RWEVsN8Exw2tVYK9k/0/8WjPUmSmtoHOyoFTkHHaOLuPSwkgFmrA==}
dependencies:
@ -4964,6 +5036,10 @@ packages:
is-fullwidth-code-point: 3.0.0
dev: true
/sortablejs/1.14.0:
resolution: {integrity: sha512-pBXvQCs5/33fdN1/39pPL0NZF20LeRbLQ5jtnheIPN9JQAaufGjKdWduZn4U7wCtVuzKhmRkI0DFYHYRbB2H1w==}
dev: false
/source-map-js/1.0.2:
resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
engines: {node: '>=0.10.0'}
@ -5110,6 +5186,11 @@ packages:
tslib: 2.4.0
dev: false
/sub-events/1.8.9:
resolution: {integrity: sha512-RhhA2amqVzL6nO+aiZOqxBCgcA3ZLfp4W9iHFUELwq8132TS7pUReJV+bcRjtNKdqm/Ep1sD/h01eAcTBtgrBQ==}
engines: {node: '>=10.0.0'}
dev: false
/supercluster/7.1.5:
resolution: {integrity: sha512-EulshI3pGUM66o6ZdH3ReiFcvHpM3vAigyK+vcxdjpJyEbIIrtbmBdY23mGgnI24uXiGFvrGq9Gkum/8U7vJWg==}
dependencies:
@ -5141,6 +5222,10 @@ packages:
react: 18.1.0
dev: false
/tabbable/5.3.2:
resolution: {integrity: sha512-6G/8EWRFx8CiSe2++/xHhXkmCRq2rHtDtZbQFHx34cvDfZzIBfvwG9zGUNTWMXWLCYvDj3aQqOzdl3oCxKuBkQ==}
dev: false
/table/6.8.0:
resolution: {integrity: sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==}
engines: {node: '>=10.0.0'}
@ -5750,6 +5835,15 @@ packages:
/wrappy/1.0.2:
resolution: {integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=}
/xss/1.0.11:
resolution: {integrity: sha512-EimjrjThZeK2MO7WKR9mN5ZC1CSqivSl55wvUK5EtU6acf0rzEE1pN+9ZDrFXJ82BRp3JL38pPE6S4o/rpp1zQ==}
engines: {node: '>= 0.10.0'}
hasBin: true
dependencies:
commander: 2.20.3
cssfilter: 0.0.10
dev: false
/xtend/4.0.2:
resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
engines: {node: '>=0.4'}
@ -5803,15 +5897,3 @@ packages:
y18n: 5.0.8
yargs-parser: 21.0.1
dev: true
/zustand/[email protected]:
resolution: {integrity: sha512-PIJDIZKtokhof+9+60cpockVOq05sJzHCriyvaLBmEJixseQ1a5Kdov6fWZfWOu5SK9c+FhH1jU0tntLxRJYMA==}
engines: {node: '>=12.7.0'}
peerDependencies:
react: '>=16.8'
peerDependenciesMeta:
react:
optional: true
dependencies:
react: 18.1.0
dev: false

2
src/App.tsx

@ -7,7 +7,6 @@ import { useAppSelector } from '@hooks/useAppSelector';
import { Extensions } from '@pages/Extensions/Index';
import { Map } from '@pages/Map';
import { Messages } from '@pages/Messages';
import { Nodes } from '@pages/Nodes';
import { NotFound } from '@pages/NotFound';
export const App = (): JSX.Element => {
@ -20,7 +19,6 @@ export const App = (): JSX.Element => {
<div className="flex h-full flex-col">
<div className="flex min-h-0 w-full flex-grow">
{route.name === 'messages' && <Messages />}
{route.name === 'nodes' && <Nodes />}
{route.name === 'map' && <Map />}
{route.name === 'extensions' && <Extensions />}
{route.name === false && <NotFound />}

8
src/components/layout/index.tsx

@ -3,7 +3,7 @@ import { useState } from 'react';
import { ErrorBoundary } from 'react-error-boundary';
import { FiMessageCircle, FiSettings } from 'react-icons/fi';
import { RiMindMap, RiRoadMapLine } from 'react-icons/ri';
import { RiRoadMapLine } from 'react-icons/ri';
import { VscExtensions } from 'react-icons/vsc';
import { ErrorFallback } from '@components/ErrorFallback';
@ -37,12 +37,6 @@ export const Layout = ({
link: routes.messages().link,
active: route.name === 'messages',
},
{
title: 'Nodes',
icon: <RiMindMap />,
link: routes.nodes().link,
active: route.name === 'nodes',
},
{
title: 'Map',
icon: <RiRoadMapLine />,

1
src/core/router.ts

@ -3,6 +3,5 @@ import { createRouter, defineRoute } from 'type-route';
export const { RouteProvider, useRoute, routes } = createRouter({
messages: defineRoute('/'),
map: defineRoute('/map'),
nodes: defineRoute('/nodes'),
extensions: defineRoute('/extensions'),
});

144
src/pages/Nodes/index.tsx

@ -1,144 +0,0 @@
import type React from 'react';
import { useEffect, useState } from 'react';
import { m } from 'framer-motion';
import type { Edge, Node } from 'react-flow-renderer';
import ReactFlow, { Background, Controls, MiniMap } from 'react-flow-renderer';
import { BiCrown } from 'react-icons/bi';
import { FiSettings } from 'react-icons/fi';
import { RiMindMap } from 'react-icons/ri';
import { IconButton } from '@components/generic/button/IconButton';
import { Tooltip } from '@components/generic/Tooltip';
import { Layout } from '@components/layout';
import { SidebarItem } from '@components/layout/Sidebar/SidebarItem';
import { Hashicon } from '@emeraldpay/hashicon-react';
import { useAppSelector } from '@hooks/useAppSelector';
export const Nodes = (): JSX.Element => {
const [graphNodes, setGraphNodes] = useState<Node[]>([]);
const [graphEdges, setGraphEdges] = useState<Edge[]>([]);
const [selected, setSelected] = useState<number>(0);
const nodes = useAppSelector((state) => state.meshtastic.nodes);
const myNodeNum = useAppSelector(
(state) => state.meshtastic.radio.hardware.myNodeNum,
);
useEffect(() => {
const tmpNodes: Node[] = [];
// User Terminal
tmpNodes.push({
id: '1',
type: 'input',
data: { label: 'User Terminal' },
position: { x: 160 + 500, y: 0 + 500 },
});
nodes.map((node, index) => {
tmpNodes.push({
id: node.data.num.toString(),
data: { label: node.data.user?.longName ?? `Unknown ${node.data.num}` },
position: { x: index * 160 + 500, y: 100 + 500 },
});
});
setGraphNodes(tmpNodes);
}, [nodes, myNodeNum]);
useEffect(() => {
const tmpEdges: Edge[] = [];
nodes.map((node, index) => {
if (node.data.num === myNodeNum) {
tmpEdges.push({
id: `e${1}-${myNodeNum}`,
source: '1',
target: myNodeNum.toString(),
type: 'smoothstep',
style: {
stroke: 'yellow',
strokeWidth: 2,
},
});
}
// node.routes.map((route) => {
// tmpEdges.push({
// id: `e${route.from}-${route.to}`,
// source: node.num.toString(),
// target: route.to.toString(),
// type: 'smoothstep',
// animated: true,
// });
// });
});
setGraphEdges(tmpEdges);
}, [nodes, myNodeNum]);
return (
<Layout
title="Nodes"
icon={<RiMindMap />}
sidebarContents={
<>
{nodes.map((node) => (
<SidebarItem
key={node.data.num}
selected={node.data.num === selected}
setSelected={(): void => {
setSelected(node.data.num);
}}
actions={
<IconButton
nested
onClick={(e): void => {
e.stopPropagation();
setSelected(node.data.num);
}}
icon={<FiSettings />}
/>
}
>
<div className="flex dark:text-white">
<div className="relative m-auto">
{node.data.num === myNodeNum && (
<Tooltip content="Your Node">
<m.div
whileHover={{ scale: 1.05 }}
className="absolute -right-1 -top-1 rounded-full bg-yellow-500 p-0.5"
>
<BiCrown className="h-3 w-3" />
</m.div>
</Tooltip>
)}
<Hashicon value={node.data.num.toString()} size={32} />
</div>
</div>
<div className="my-auto mr-auto text-xs font-semibold dark:text-gray-400">
{node.data.lastHeard
? new Date(node.data.lastHeard).toLocaleTimeString(
undefined,
{
hour: '2-digit',
minute: '2-digit',
},
)
: 'Never'}
</div>
</SidebarItem>
))}
</>
}
>
<div className="relative flex h-full w-full">
<ReactFlow nodes={graphNodes} edges={graphEdges}>
<MiniMap />
<Controls />
<Background />
</ReactFlow>
</div>
</Layout>
);
};
Loading…
Cancel
Save