web: reticulum aspects, identity groups, identity page, honest detail views - #899
Merged
Merged
Conversation
Codecov Report❌ Patch coverage is
📢 Thoughts on this report? Let us know! |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
ref #888
Makes RE7 visible. An identity has been one node since RE7, but the UI still rendered a peer's four addresses as four rows' worth of dashes.
Nodes table (RA1-RA3): a Reticulum identity is a parent row and its destinations are sub-rows. The protocol cell becomes the disclosure control, keeping the tile's violet inset so a collapsed group still reads as Reticulum; an identity with a single destination renders flat, since a caret that opens onto one row misrepresents depth. The parent takes the RE10-derived long_name and the newest last_heard across its destinations, and carries one role chip per aspect with a +N overflow. Counts read identities (destinations) -- 3 (8) -- on the Reticulum toggle and legend only; Meshtastic and Meshcore keep a bare count, so the bracket marks a real distinction instead of decorating every protocol. Sorting orders parents, and sub-rows follow theirs.
Destinations load in the background (RA4/RA8). /api/nodes carries none, so they are fetched separately and joined by node_id after first paint: the table renders from /api/nodes alone and gains groups as pages arrive. A slow, failing or truncated walk degrades to a table without groups, never a stalled one. /api/destinations gains ?since= and ?before= bounding last_heard, matching the seven other bulk collections including the inclusive boundary, and the walk reuses the existing paginateCollection cursor loop rather than adding a second implementation to drift from it.
Identity page (RA5): /nodes/:id gains an Identity group (full 32-hex identity hash, destination count, interface) and a Destinations table carrying the full 32-hex destination hashes -- the only view that shows them, since they are what a reader needs to message the peer. Both read from /api/destinations, because /api/nodes deliberately does not serve identity_hash.
Detail views drop the em-dash (RA6, amending UX4 and PD1): a detail view renders a field only when it has a value and a group only when a field survives, with one muted "No telemetry reported." when none do. The table keeps its dashes -- at table width a dash separates "not reported" from "still loading", which a detail view need not distinguish. PD1 restated the rule for this sheet, so amending UX4 alone would have left the second copy reinstating it.
Role fallbacks become protocol-native (RA9), from a field report: CLIENT is a Meshtastic role but was the fallback everywhere, labelling a Meshcore node as something its protocol has no concept of. defaultRoleFor resolves meshtastic -> CLIENT, meshcore -> COMPANION, reticulum -> PEER; getRoleColor falls back within the node's own palette before the Meshtastic one, so a role-less Meshcore node is no longer painted Meshtastic blue; and the ingest-side placeholder default gains its missing reticulum -> PEER branch. An unknown protocol keeps CLIENT.
rns.transport stays the stored aspect and renders as "no aspect" (RA7): it maps the row to the TRANSPORT role, so it is a display rule, not a data change.