Repository navigation
feat(plugin-list): a phone list offers Sort in the Display panel and a search that expands in place - #29054
Merged
Conversation
…search that expands in place Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QsR2jSR5zW3jcFhYpwXtjZ
…ce search Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QsR2jSR5zW3jcFhYpwXtjZ
Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QsR2jSR5zW3jcFhYpwXtjZ
Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QsR2jSR5zW3jcFhYpwXtjZ
Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QsR2jSR5zW3jcFhYpwXtjZ
Contributor
Author
|
domain:ui#1 · zhuangjianguo · session_01QsR2jUJ19MstFvFhjgiYTu 席位核对 · ACCEPT · 2026-11-02T06:40ZHead-sha:
|
This was referenced Nov 2, 2026
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 #28911
Clause-②: no
Metadata-protocol: none
维护者速读
userActions开关,桌面端外观不变。plugin-list的工具栏与「显示」面板;排序面板是把原有排序弹层的内容抽成一份、两处共用,写入路径与桌面端完全相同。「显示」面板在手机端改为屏宽(与筛选、排序弹层一致)。回滚即 revert 本 PR。ui/packages/plugin-list/src/ListView.tsx的displayOffered/sortInDisplay/sortPanelBody与「Search, phone form」一段;②ui/packages/plugin-list/src/components/ViewSettingsPopover.tsx新增的sort插槽;③ 新测试ListView.phoneSortSearch-28911.test.tsx。pnpm dev:crm后用 390 px 打开 客户 列表:工具栏是 筛选 · 显示 · 搜索;点放大镜输入 glo 只剩 Globex Ltd;打开「显示」顶部是「Sort Records」,加一条排序后卡片顺序随之改变。What changes
Below the
smbreakpoint the list toolbar drew Filter and Display only. Sort and the list's own search werehidden sm:inline-flex, with comments sending the reader to desktop or calling a list search redundant beside the global search. Both comments are gone.sm. The Sort popover's content is now one element,sortPanelBody, drawn by the toolbar's Sort popover and by a newsortslot ofViewSettingsPopover. The slot issm:hidden, so fromsmup the panel draws nothing new and Sort stays the bar's button. Both write through the samesetCurrentSort+emitSortChangedoor. It does not count in the Display badge, which counts display settings only.sortInDisplay = toolbarFlags.showSort && displayOffered, and the bar's Sort trigger hides belowsmonly whensortInDisplayholds.displayOfferedis the Display panel's existing condition, lifted out of the JSX unchanged. SocompactToolbar: falsegets the Sort button on the phone bar, and the toolbar gains no new control in either form.sm:hiddenicon button at the bar's touch size (h-7 min-w-7, the same as Filter and Display) expands in place into a field. The field is 16px text, so iOS Safari does not zoom on focus. Enter or Escape folds it back to the icon, which then carries the active keyword as the desktop trigger does. The clear button empties the term and folds it, and blurring an empty field folds it. It writes the same term as the desktop popover (handleSearchChange), so the fetch, the export and the desktop trigger all read one value.toolbarFlags.showSort/toolbarFlags.showSearch, souserActions.sort: false/userActions.search: false(and a searchless view or object) withhold them on the phone as on desktop. No new key and no new option.sm:w-[calc(100vw-2rem)] sm:w-80, as the Filter and Sort popovers already size. At 320 px the Sort rows wrapped "Sort by" onto two lines.list.search,list.clearSearch,table.searchand the Sort panel's existing keys. Card rows and the bottom action area of the console mobile (≤ 640 px): list as card rows with view chips and a FAB, the record page with a compact header, sticky tabs and a bottom action bar, related records pushed as full pages with a path row and back — the record is always a page on a phone #27058 phone layout are unchanged.Tests
ListView.phoneSortSearch-28911.test.tsx(9 tests). Narrow and wide are reproduced by mounting the base.hiddenrule, or that plus the twosm:rules, asListView.toolbarIconButtons-12695.test.tsxdoes. Narrow: no Sort button on the bar, Display carries the Sort panel, and Add sort reachesonSortChangeand a re-fetch. Wide: Sort on the bar, the Display Sort block not drawn.userActions.sort: falsewithholds both.compactToolbar: falsekeeps Sort on the phone bar at Filter's size. Search: the icon is at Filter's size, tapping opens a focused field in the bar (no popover), typing reachesonSearchChangeand the fetch, Enter folds to the icon carrying the keyword, Clear search empties and folds, blur on empty folds, wide draws only the desktop icon,userActions.search: falsewithholds it.ListView.displayPopover-12423.test.tsx: the cluster-order pin now listsphone-search-triggeraftersearch-icon-button. It mounts no stylesheet, so both forms of Search are in the DOM.Ablations (each mutation applied by a script under a
traprestore, the file restored toHEADbyte-identical by hash):sortInDisplay && "hidden sm:inline-flex"line removed): 1 of 9 red, the narrow Sort test;sm:hiddenremoved): 1 of 9 red, the wide search test.Acceptance notes
examples/app-crm, fresh boot, real Console against its backend). In the project folderissue-28911/, for the seat to link:01-list.png(bar: Filter · Display · Search),02-search-expanded.png(typinggloleaves Globex Ltd),03-search-folded.png(the icon carriesglo),04-display-sort.pngand05-display-sort-added.png(Sort Records at the top of Display),06-sorted-list.png(the cards in the new order), and07-desktop-1440-display.png(1440 px: the bar is unchanged and the Display panel draws no Sort block).toolbar-filter-trigger,toolbar-display-triggerandphone-search-trigger, each 28 × 28 px. Searchinggloleaves one card, and clearing brings back three. Adding a sort in Display re-orders the cards (Initech, Globex Ltd, Acme Corp became Acme Corp, Initech, Globex Ltd). At 1440 px the visible buttons aretoolbar-filter-trigger,toolbar-sort-trigger,toolbar-display-triggerandsearch-icon-button, anddisplay-sortis not visible.Verification
At head
8998c718(this branch withorigin/mainab085a04merged in; the merge brought only additive@object-ui/i18nlocale keys, no file underplugin-listorcomponents):pnpm exec vitest run packages/plugin-list/(fromui/,--maxWorkers=2, underos-verify-lock) at0f0991d3: 179 / 180 files, 1735 / 1736 tests; the one red was thedisplayPopover-12423cluster-order pin, updated in51eb0f6fabove.plugin-listtest files that name the Display panel, the Sort or Search triggers (the new file included), atee663d49and again at the merged head8998c718: 19 / 19 files, 390 / 390 tests.plugin-listthat name those triggers or the tool cluster (app-shellObjectView / PageView / print-stylesheet / grouped search,plugin-reportprint button): 11 / 11 files with the updated pin, 115 / 115 tests.pnpm --dir ui exec vitest run scripts/atee663d49: 169 files passed, 2 skipped; 4900 tests passed, 2 skipped.pnpm --filter @object-ui/plugin-list run type-check: exit 0 (at0032651dand at8998c718).eslinton the two source files and the new test: 0 errors.node scripts/pm/dispatch-gates.mjs --commands, 34 commands): 34 / 34 exit 0, reconciled by--ran(34 derived, 34 run, 0 NOT-MEASURED). Re-run at8998c718:check-sdui-manifestexit 0,check-changeset-no-major --base origin/mainexit 0,check:nul-bytesexit 0.check-changeset-no-major.mjs --base origin/mainwith this body asGITHUB_EVENT_PATH, andcheck-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_01QsR2jSR5zW3jcFhYpwXtjZ
Generated by Claude Code