contacts: polish detail view — header, status pill, unified layout, parallel fetch #80

Merged
zaelgohary merged 4 commits from development_fix_contacts_ui into development 2026-04-20 09:36:34 +00:00
Member

Summary

Polish the Contacts detail view so it reads cleanly. No new fields, no server-side changes, no new features.

Fixes

# Fix
73 Drop the (name) line under the header when alias is absent or equal to the name.
74 Reuse the list row's coloured status_badge pill on the detail view (was plain {:?} text).
75 Drop the user-facing Metadata section entirely — SID is internal, Created/Updated aren't shown to users.
77 ContactForm preserves created_at / updated_at on edit so saves don't zero them in storage, even though they aren't displayed.
78 contact_get loops in archipelago.rs are now parallel via futures::future::join_all. Follow-up: add a server-side contact_list_all() -> [Contact] batch RPC.
79 Detail body is one consistent `Label
hover fix Selected row's highlight no longer disappears while the cursor is on it — selection moved to a .selected class, :hover gated on :not(.selected).

Test plan

  • cargo check -p hero_archipelagos_contacts green
  • cargo fmt --check -p hero_archipelagos_contacts green
  • cargo clippy -p hero_archipelagos_contacts --no-deps -- -D warnings green
  • cargo test -p hero_archipelagos_contacts green (0 tests)
  • Browser smoke: header shows name only, status pill renders, breadcrumb uses contact name, clicking any row pins its highlight under the cursor.

Closes #73
Closes #74
Closes #75
Closes #77
Closes #78
Closes #79

## Summary Polish the Contacts detail view so it reads cleanly. No new fields, no server-side changes, no new features. ### Fixes | # | Fix | |---|---| | 73 | Drop the `(name)` line under the header when alias is absent or equal to the name. | | 74 | Reuse the list row's coloured `status_badge` pill on the detail view (was plain `{:?}` text). | | 75 | Drop the user-facing Metadata section entirely — SID is internal, Created/Updated aren't shown to users. | | 77 | ContactForm preserves `created_at` / `updated_at` on edit so saves don't zero them in storage, even though they aren't displayed. | | 78 | `contact_get` loops in `archipelago.rs` are now parallel via `futures::future::join_all`. Follow-up: add a server-side `contact_list_all() -> [Contact]` batch RPC. | | 79 | Detail body is one consistent `Label | Value` grid — no section headings, Public Key / Notes / Tags all in the same column layout. Breadcrumb reads `Contacts > <name>` instead of generic `Contact`. | | hover fix | Selected row's highlight no longer disappears while the cursor is on it — selection moved to a `.selected` class, `:hover` gated on `:not(.selected)`. | ## Test plan - [x] `cargo check -p hero_archipelagos_contacts` green - [x] `cargo fmt --check -p hero_archipelagos_contacts` green - [x] `cargo clippy -p hero_archipelagos_contacts --no-deps -- -D warnings` green - [x] `cargo test -p hero_archipelagos_contacts` green (0 tests) - [x] Browser smoke: header shows name only, status pill renders, breadcrumb uses contact name, clicking any row pins its highlight under the cursor. Closes https://forge.ourworld.tf/lhumina_code/hero_archipelagos/issues/73 Closes https://forge.ourworld.tf/lhumina_code/hero_archipelagos/issues/74 Closes https://forge.ourworld.tf/lhumina_code/hero_archipelagos/issues/75 Closes https://forge.ourworld.tf/lhumina_code/hero_archipelagos/issues/77 Closes https://forge.ourworld.tf/lhumina_code/hero_archipelagos/issues/78 Closes https://forge.ourworld.tf/lhumina_code/hero_archipelagos/issues/79
- Drop the `(name)` line when alias is absent or matches the name.
- Reuse the list's coloured `status_badge` pill on the detail view.
- Drop SID from the user-facing panel; keep Created / Updated as a muted footer.
- `format_timestamp`: diff against `platform::current_timestamp_ms() / 1000` instead of treating Unix seconds as days.
- Preserve `created_at` / `updated_at` in ContactForm on edit; still send 0 on create so the server stamps them.
- Parallelise `contact_get` loops in archipelago.rs with `futures::future::join_all`.
- Tighten the detail layout: grouped "Identity" / "Notes" / "Tags" blocks, inline Created/Updated footer.
contacts: apply cargo fmt
Some checks failed
Build and Test / build (pull_request) Failing after 8s
606813e16d
zaelgohary changed title from contacts: polish detail view — header, status pill, metadata, timestamps, parallel fetch to contacts: polish detail view — header, status pill, unified layout, parallel fetch 2026-04-20 09:04:56 +00:00
contacts: hide timestamps from detail view, breadcrumb uses name, uniform field rows
Some checks failed
Build and Test / build (pull_request) Failing after 8s
a729db10d3
- Detail body drops the Created / Updated rows — timestamps stay in storage for
  correctness (#77) but aren't shown to users.
- Breadcrumb reads `Contacts > <name>` / `Edit <name>` instead of generic labels.
- Collapse FieldGroup + FieldRow into a single FieldRow with a `children` slot so
  Public Key, Notes, and Tags all render as a consistent `Label | Value` grid.
- Drop section headings (IDENTITY / NOTES / TAGS) — the columns read cleaner
  without them.

Scope trimmed: #76 (timestamp formatter) closed as no-longer-needed; #77 kept —
the form still preserves existing created_at / updated_at on edit so server
state doesn't get zeroed out.
contacts: fix hover wiping selected-row highlight
Some checks failed
Build and Test / build (pull_request) Failing after 8s
9d8a7f519a
Selection moves from inline bg/border to a .selected class. :hover is gated on
:not(.selected) so hovering a selected row no longer removes its highlight.
zaelgohary merged commit af56c070c2 into development 2026-04-20 09:36:34 +00:00
zaelgohary deleted branch development_fix_contacts_ui 2026-04-20 09:36:35 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
lhumina_code/hero_archipelagos!80
No description provided.