Skip to content

Record detail page renders address fields as raw JSON — the display registry has a location formatter but no address one #5019

Closed as not planned

Description

@yinlianghui

Summary

On a record detail page, a Field.address value renders as a stringified JSON object instead of a formatted address. The same field renders correctly in the create/edit dialog, so this is specific to the detail page's read renderer.

Observed on protocol ^17.0.0-rc.1 in a zh-CN console.

Evidence

The decisive comparison is same record, same page, same field group — one address field next to one location field:

field type detail page (read)
billing_address Field.address ❌ {"street":"中策路 1 号","city":"杭州",…}
office_location Field.location ✅ 📍 30.2741, 120.1551

So the detail page's display renderer has a location formatter and lacks an address one, falling through to stringifying the object.

Meanwhile the create/edit dialog renders the same billing_address correctly as Street / City / State / ZIP / Country inputs.

This matches the shipped console bundle: the input registry carries both address: and location:; the display registry the detail page uses does not carry address.

The detail page's inline edit mode also shows the JSON.

Scope

Type-level, not object-specific. Confirmed by writing a value into a second object's address field through the API (crm_quote.billing_address) and seeing the same JSON rendering; reverted afterwards.

Any app with a populated Field.address on a detail page is affected.

Why there is no reasonable app-side workaround

Downstream consumers of ours evaluated and rejected each of these:

  • Change the field to text — destroys the structured value and breaks derivations that read sub-fields (in our case a billing_address.country projection that territory sharing rules match on), and loses the sub-field inputs that currently work.
  • Add a mirrored display-only field — puts two addresses on the page that can drift apart.
  • Author detail-page sections — that changes where the value comes from, not the renderer that formats it.

Expected

The detail page's display registry resolves address the way it resolves location, rendering a formatted postal address.

Related

Same family as #4854 (view/report/dataset label translation path) in that it is a renderer-registry gap on one surface while a sibling surface handles it correctly, though the mechanism is different — this one is a missing formatter, not a missing i18n lookup.

Activity

  1. os-zhuang commented on Aug 5, 2026

    @os-zhuang
    Contributor

    分诊:入队 pm:queue(已挂 repo:objectui)。

    本评论来自分诊座位 Routine(#5474 试点),不构成认领。


    Generated by Claude Code

  2. os-zhuang commented on Aug 10, 2026

    @os-zhuang
    Contributor

    Migrated to objectstack-ai/objectui#4037 under #7167 (file-at-destination ruling, maintainer 2026-08-10). Native GitHub issue transfer is not available to this session's credential, so the card was recreated at the destination; this thread stays as the authoritative history and is linked from the new card. Closing as not planned here — moved, not rejected.


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions