Skip to content

feat(admin): surface member address fields on detail page #1973

@cdcore09

Description

@cdcore09

Summary

The admin member detail page's Identity tab does not currently expose city, region, countryId, publicLocation, showOnMap, or the geocoded latitude/longitude. Staff editing a member can't fix a typo'd city or toggle map visibility without going to the public dossier.

Requirements

  • MemberDetailPage.tsx Identity tab gains an Address section with editable fields:
    • City (text)
    • Region / state (text)
    • Country (vocab picker reusing the existing countries vocab endpoint)
    • Public location string (free-form override shown on the public dossier byline)
    • showOnMap toggle
  • Read-only preview of the geocoded result ("Pin: 42.36°N, 71.06°W") with a "Re-geocode now" button that bypasses the normal change-detection trigger
  • PATCH /admin/users/:id body schema extended (packages/api/src/routes/admin/users/byId.ts) to accept city, region, countryId, publicLocation, showOnMap
  • GET /admin/users/:id response includes the existing address fields and geocoded_at so the UI can render the timestamp
  • Soft-delete / restore controls left untouched

Context

profiles has city, region, countryId, publicLocation, latitude, longitude, showOnMap already (packages/api/src/db/schema/users.ts:103-117). The admin PATCH route just doesn't accept them yet; the detail page just doesn't display them yet.

Depends on #1972 for the geocoded-value population and geocoded_at column.

Implementation Notes

Country picker: the vocab endpoint at packages/api/src/routes/vocab.ts already exposes countries; the web account page uses the same dataset for its country picker (see apps/web/src/hooks/useVocab.ts). Reuse it to avoid a parallel vocab fetch.

showOnMap defaults to false per the schema — admins flipping it on is an explicit consent decision and should be paired with a small note like "Surfaces this member on the public community map at /map."

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions