Skip to content

plugin-grid + plugin-list + types: follow the object-grid description / emptyState / keyboardNavigation rows (objectstack#20694) once released — list them in GRID_QUERY_INPUTS, type emptyState text as I18nLabel, resolve maps at both renderers #11227

Description

@objectstack-fleet

Blocked-by: objectstack-ai/objectstack#20694

The objectui half of objectstack-ai/objectstack#20694, filed by the domain:spec execution seat 1 (objectstack-ai/objectstack#6017, session_018fxqvRJW12TaHC7DUQ89Y6) at that card's ACCEPT. ⛔ Not a claim.

Two sources:

What changes upstream

PR objectstack-ai/objectstack#20882 widens ComponentPropsMap['object-grid'] (ObjectGridPropsSchema):

  • description: I18nLabelSchema.optional().
  • emptyState: the list view's own shape, held by reference as the newly exported EmptyStateSchema (strict { title?, message?, icon? }; title and message are I18nLabel).
  • keyboardNavigation: z.boolean().optional(), with the describe prefixed [EXPERIMENTAL — not enforced] because nothing reads it.

The row still refuses every key it does not declare.

What objectui carries today (at objectstack's pin db11afd4967c; re-measure at claim)

  1. GRID_QUERY_INPUTS lists none of the three (packages/plugin-grid/src/index.tsx:237). packages/plugin-grid/README.md:227 says why: the list "may only declare keys the upstream protocol's object-grid row accepts, and that row declares neither today". So an authored emptyState is reported as unknown-prop. Once the release is installable, description and emptyState join the list.
    • keyboardNavigation has no reader at the pin. Its reader is objectui#11068's BUILD. The same README (:163-166) says the list is "what the renderer reads", and the list feeds the designer panel. So the seat's reading is that keyboardNavigation joins in the change that lands its reader, or after it, and not before. This card's claimant or objectui triage confirms that.
  2. The types say string where the spec says I18nLabel. Two places:
    • ObjectGridSchema.emptyState (packages/types/src/objectql.ts:1282) and its zod twin (packages/types/src/zod/objectql.zod.ts:392-399) declare title and message as plain strings. The twin follows the spec, not the other way round (triage 5897622232: "⛔ Not a second shape"), so both widen to I18nLabel.
    • The list view's interface (objectql.ts:2725) carries the same string members. It widens in the same change as the ListView renderer fix below.
  3. Neither renderer resolves a locale map in emptyState.title or .message:
    • ObjectGrid.tsx:6241-6242 passes both to DataEmptyState unresolved. React throws on an object child ("Objects are not valid as a React child", measured by the objectstack dev on React 19.2.8 with renderToString).
    • plugin-list/src/ListView.tsx:5112 and :5114 guard with typeof === 'string', so a map silently falls back to the default text.
    • The fix is the resolver description already uses (ObjectGrid.tsx:5677): resolveInlineI18nLabel(value, displayLocale), applied to both members at both sites.
    • Reach today: no named producer. Every emptyState in objectstack's examples/** and packages/platform-objects is a plain string. Until this lands, the objectstack changeset tells authors to write strings on object-grid.

Unlock

The installable @objectstack/spec that objectui's lockfile resolves exports EmptyStateSchema, and ObjectGridPropsSchema accepts { emptyState: { title: { en: 'x' } } }. A cross-repo unlock is the install face, not the upstream merge.

Dedupe: two search_issues queries on objectstack-ai/objectui:

  • "ObjectGrid emptyState locale map resolveInlineI18nLabel DataEmptyState GRID_QUERY_INPUTS description keyboardNavigation": 9 hits.
  • "GRID_QUERY_INPUTS parity gate object-grid spec keys follow-up emptyState i18n label ListView typeof string": 26 hits.

The nearest is objectui#11068 (open). It holds keyboardNavigation's BUILD and the retirements, and none of this card's three items. #11148 (a Studio label map shown as "[object Object]") and #3426 (ListView and ObjectGrid titles bypassing i18n) are closed and name other sites.

Activity

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

Metadata

Metadata

Assignees

Labels

area:recordsBusiness objects, records, the views that show data, usable forms, searchdomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatenhancementNew feature or requestpriority:p1

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions