Repository navigation
fix(plugin-detail): on a desktop the enlarged related tab draws the child object's list grid - #28902
Merged
Merged
Conversation
…ktop Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QsR2jV95ABcxitqSGp6kmv
…, its host channel and one count Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QsR2jV95ABcxitqSGp6kmv
…t a ref written in render Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QsR2jV95ABcxitqSGp6kmv
Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QsR2jV95ABcxitqSGp6kmv
Contributor
Author
|
domain:ui#4 · zhuangjianguo · session_01QsR2jR7ZFkpqmm4U8S1f9y 席位核对 · ACCEPT · 2026-11-02T04:14ZHead-sha:
Generated by Claude Code |
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.
Requested by Steedos · project thread
Fixes #28865
Clause-②: no
Metadata-protocol: none
维护者速读
object-grid(手机端自 console phone list: card rows draw every shown column as a label / value line — the board's row is the name, one subtitle line and one status chip #28484 起已是如此),不再是通用data-table。行高、密度、名称链接、行操作都与列表页一致;全部芯片已显示数量时,工具栏下方不再重复显示「N 条」。$top/$skip/$orderby不变),通过 grid 的宿主属性传入;行操作仍经宿主的onRowAction派发到子对象。唯一行为差异:筛选框有文字时,查找类列的表头不再提供排序(与所有列表页一致)。回滚即 revert 本 PR。ui/packages/plugin-detail/src/RelatedList.tsx的viewSchema放大分支与enlargedGridHost;② 同文件enlargedGridActions(把 grid 的行操作派发路由回宿主);③ 新测试RelatedList.enlargedListGrid-28865.test.tsx。pnpm dev:crm后打开 客户 Acme Corp → 商机列表 页签(1440 px):行高与商机列表页相同,名称是蓝色链接、点开即打开记录抽屉,数量只在「全部 4」芯片上出现一次。What changes
RelatedList's enlarged face (the record page's active related tab) now rendersobject-gridon every width, the branch the phone has taken since #28484. On a desktop it fell through to the genericdata-table.viewSchemareturnsobject-gridover the page of rows this list already read (data: { provider: 'value', items }), with the list's columns, the grid's own pager and search off (showPagination: false,showSearch: false). Under 768 px the grid draws the phone list's card rows, as before.SchemaRenderer(manualPagination,rowCount,page,pageSize,onPageChange,sort,onSortChange), the same onesplugin-list'sListViewhands the grid. Paging and sort stay the server's$top/$skip/$orderby; the list's own pager stays the one pager, because it also answers a window whose total the server did not send (hasMore).objectFieldsrides along so no column paints withheld while the grid reads the definition (objectui#10657).list_item, andrecord_relatedinside a parent record) ride to the grid's row menu asrowActionDefs, the non-author host key the console's object page uses. Row Edit is the host'sonRowEdit; row Delete is this list's confirm-then-delete.params._rowRecordand no object of its own; on the record page that runner's object is the parent's, and nothing would tell the list to read its rows again.RelatedListprovides the grid an action context (enlargedGridActions) that sends a dispatch carrying one of its own row action defs and a row to the host'sonRowAction(child object, row context, and the related-changed signal that refetches the list), and every other dispatch to the surrounding runner unchanged.plugin-grid.Why
#27524 item 9: the enlarged tab is "the full-width table (all columns, paging, sort, inline edit where the FK allows — the child object's list face)". Measured on
mainbefore this PR (account Acme Corp → 商机, 1440 px,examples/app-crm): rows 65 px against the opportunity list page's 41 px, the name as plain text, and the count shown twice (「全部 4」 and 「4 条」).Tests
RelatedList.enlargedListGrid-28865.test.tsx(11 tests): the desktop branch isobject-gridover the read rows with the grid's pager and search off; the host channel carries the window, page and sort and none of it rides as node keys; a header sort from the grid becomes one server$orderbyfrom page 1; a page from the grid reads the next window ($skip25); the pinned deviation below; the count shows once on 全部 and a narrowing chip keeps its own count; a grid row-action dispatch reachesonRowActionwith the def and the row, and (control) any other dispatch does not; row Edit is the host's and row Delete asks first; control: a list that is not enlarged keeps thedata-tablewith no host props.RelatedList.enlargedPhoneCards-28484.test.tsx: its desktop control now asserts the sameobject-gridbranch.RelatedList.enlargedToolbar-27524.test.tsx: registers a stand-inobject-grid(this package cannot importplugin-grid, which depends on it) and asserts the status line is not drawn when the 全部 chip carries the count.app-shellRecordDetailView.childWriteRefreshesParent-12244.test.tsx: the enlarged tab's row menu is now the grid's, so the test opens it byrow-action-trigger. The delete still re-reads the parent.Ablations (each through
scripts/ablation-replace.mjs, restored toHEADbyte-identical):enlargedFace && isMobile && …): 7 of 11 red in the new file;onRowAction: 1 red (the routing test);Acceptance notes
data-tablesorted such a column by its label in that one state. Pinned in the new test file.examples/app-crm, fresh boot) are in the project folderissue-28865/; the seat links them here:before-account-opportunities-1440.png,after-account-opportunities-1440.png, and for comparisonopportunity-list-page-1440.png; alsoafter-name-opens-record-1440.png,after-sorted-amount-desc-1440.png,after-leads-row-actions-1440.pngand the phone faceafter-account-opportunities-390.png.sort=amountthenamount descand the rows follow; the name opens the record drawer stepping 1 / 4; the 全部 chip says 4 and no line repeats it; on the leads tab the row menu holds 编辑, 删除 and Convert Lead, and Convert Lead postsactions/crm_lead/crm_convert_leadand the list then re-readscrm_lead.Verification
At head
47c53a5a(this branch withorigin/main7fa9873fmerged in; 4 later commits on main touch none of the changed files):pnpm exec vitest run packages/plugin-detail/(fromui/,--maxWorkers=2, underos-verify-lock): 361 files passed, 1 skipped; 3200 tests passed, 18 skipped (run before the main merge; the merge touched no file underplugin-detail,plugin-gridorreact).app-shell/console/plugin-view/plugin-gridtest files that nameRelatedList, the enlarged face or?related=: 30 / 30 files, 496 / 496 tests after the row-menu update above.plugin-detailfiles plus the 30 above, 33 / 33 files, 516 / 516 tests.pnpm --filter @object-ui/plugin-detail run type-check: exit 0.eslintonRelatedList.tsx: 0 errors, 99 warnings, the same count asmain.node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack, 34 commands, run at47c53a5a): 34 / 34 exit 0, reconciled by--ran(34 derived, 34 run, 0 NOT-MEASURED, every line with its exit code);pnpm --dir ui run check:spec-symbolsexit 0.node scripts/check-sdui-manifest.mjs: exit 0 (manifest present and intact, 106 components).check-changeset-no-major.mjs --base origin/mainwith this body asGITHUB_EVENT_PATH: exit 0 (Metadata-protocol: none, patch);check-adr-0087-registration,check-closing-keyword-parityandcheck-partof-closing-keywordon this body: exit 0.Human Minimum
packages/specholds no runtime logic. (not touched)pnpm lintpasses.main, one pull request.packages/spectouched: not touched.content/docs/references/,packages/*/CHANGELOG.mdorcontent/docs/releases/.🤖 Generated with Claude Code
https://claude.ai/code/session_01QsR2jV95ABcxitqSGp6kmv
Generated by Claude Code