Repository navigation
feat(plugin-detail): record:related_list reads showViewAll, and "View all" opens the parent-scoped list (objectui#12741) - #12796
Merged
objectstack-fleet[bot] merged 4 commits intoOct 16, 2026
Conversation
…"View all" to the parent-scoped list The contract declares `showViewAll: z.boolean().default(true)`, "Show 'View All' link to see all related records", and nothing read it: no host passed `RelatedList` an `onViewAll`, so the declared default drew nothing. - `@object-ui/react`: `RelatedRecordHandlers` gains an optional `onViewAll`. - `@object-ui/app-shell`: the record-page bridge resolves it to the ADR-0055 bare data surface, `/apps/APP/OBJECT/data?filter[FIELD]=PARENT`, through `recordListPath`, now shared with `useOpenRecordList`. It is withheld where that route cannot show this parent's children: no relationship or parent value, a `multiple: true` relationship, or a relationship field the viewer cannot read. - `@object-ui/plugin-detail`: the renderer passes it unless `showViewAll === false`. `RelatedList` draws the link whenever it has `onViewAll` and records, without the old truncation-only gate the spec does not state. Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FRjGDuZzqZg3Dk3Wd2V1Ph
`RelatedRecordActionsBridge` now reads `perms.checkField` for the related list's "View all" (objectui#12741). Two bridge tests mocked `usePermissions` with a partial object that omitted it, and `PermissionContextValue` declares it required. The doubles gain an open `checkField`. Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FRjGDuZzqZg3Dk3Wd2V1Ph
…r own docblock `recordListPath` was inserted between `useOpenRecordList`'s docblock and its function, so hover docs attached to the wrong symbol. The block moves above that docblock. No code change. Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FRjGDuZzqZg3Dk3Wd2V1Ph
Contributor
✅ Console Performance Budget
The eager closure is every chunk the entry reaches through static imports — what the browser fetches and parses before the app renders. The entry chunk on its own is a small fraction of it. 📦 Bundle Size Report
Size Limits
|
Contributor
Author
席位核对 · ACCEPT ·
|
objectstack-fleet
Bot
deleted the
claude/issue-12741-related-list-view-all
branch
October 16, 2026 21:32
This was referenced Oct 16, 2026
Merged
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.
Fixes #12741
Clause-②: yes
record:related_listreadsshowViewAll, and its "View all" link opens the related object's records filtered to this parent. This is ENFORCE, the objectui half of objectstack-ai/objectstack#23941. The verdict carries over from the maintainer's ruling 5902374623 on objectstack-ai/objectstack#20665, with #11263 as the precedent.Clause-② is yes because
@object-ui/react's exportedRelatedRecordHandlersgains one optional member,onViewAll. No input, spec key or accept set changes. The claim anticipated this flip.What changed
@object-ui/react:RelatedRecordHandlers.onViewAll?: () => void. The host returns it fromresolveto open the child object's list page, scoped to the parent on the relationship it was handed. As with every handler on this interface, omitting it hides the affordance.@object-ui/app-shell:RelatedRecordActionsBridgeresolvesonViewAllto the ADR-0055 bare data surface,/apps/APP/OBJECT/data?filter[REL]=PARENT.recordListPathis extracted fromuseOpenRecordList, so the dashboard drill and View all spell this route in one place. The link is withheld where the route cannot show "this parent's children":multiple: truerelationship, because the URL grammar has no membership operator (the reasonRelatedList's raw-URL fetch refuses it);ObjectDataPagedrops that condition and would open the whole table.@object-ui/plugin-detail:onViewAllunlessshowViewAll === false. When the key is absent, the spec defaulttrueapplies.RelatedListdraws the link whenever it hasonViewAlland records. The old gate drew it only when records ran past one page, and the spec states no such condition. This renderer is the only caller that passesonViewAll.Measured before building (the card's premise)
showViewAllnoronViewAll.:objectName/datafor ObjectDataPage, which parsesfilter[FIELD]=VALUEand shows each condition as a chip.useOpenRecordListalready navigates there. No page or URL spelling was invented.MEMBER_PINSholds member shapes of array/object inputs only, and a test asserts every pin names one. A boolean has no slot, and the file passes unchanged.showViewAll: truewithlimit: 25and 4 rows.Live reading
Setup: a published
@objectstack/*@18.0.0-next.2backend (e2e/live/ci/start-backend.sh, showcase e5136ff10f1a) and the console dev server from each tree. PNGs are on branchclaude/issue-12741-evidenceunderevidence/12741/:before-sys-user-positions.png(base 236624d): no "View all" on any of the 10 tabs.after-sys-user-positions.png: "View all" under the 4 rows.after-view-all-target.png: the click lands on/apps/setup/sys_user_position/data?filter[user_id]=ADMIN_ID, which shows 4 records and the chip "User = ADMIN_ID".Tests
packages/plugin-detail/src/__tests__/RecordRelatedListRenderer.showViewAll-12741.test.tsx: through the real SchemaRenderer, registration, RelatedList and data table.true: the link draws.false: no link (control: the header's New is drawn).packages/app-shell/src/views/__tests__/RelatedRecordActionsBridge.viewAll-12741.test.tsx: through the real bridge under a router./apps/demo/task/data, and the search reads back viaparseUrlFilterTriplesas exactly[project, =, P-1].false, a multi-value relationship and an unreadable relationship field each draw no link.false;onViewAll;usePermissionswithout the requiredcheckField. They gain an open one.Gates
At f439fc1 the following exit 0:
The i18n family is not owed: no
t()call or rendered string changed.Acceptance notes
filteris not carried to the full list. View all opens all records related to this parent, as the spec's describe says.filter[FIELD]equality arm says it is used by related-list View all buttons. That was never wired, and View all now goes to/data. This is comment drift only, so nothing is filed.showViewAll: false.record:related_list.showViewAllis declared ("Show "View All" link") and read by no renderer; platform pages author it on 12 related lists. Enforce or retire objectstack#23941's ledger row moves once this is installable at.objectui-sha. No objectstack PR is owed, because the key stays as declared.Provenance: built by the cloud session
session_01FRjGDuZzqZg3Dk3Wd2V1Ph(claim6223401330) and opened by thedomain:uiseat 1 PM (session_011K9g23W67dy2zwnyzaoB6o) from that session's final message, because a cloud session cannot open a PR from its container. Before opening, the seat asked for one doc-only commit,043c3b0:recordListPathmoved aboveuseOpenRecordList's docblock so each docblock sits on its own function (a pure move, 27/27 lines; app-shell type-check and 18 files / 101 tests green at that head). The seat replaced the dev's footer lines with this paragraph and changed nothing else.Generated by Claude Code