Skip to content

Console lists: the list-view switcher becomes a dropdown on the list title (search, pinned default, recent), the flat view-tab row retires, and a starred view appears in the sidebar's 收藏 group #27594

Open

Description

@objectstack-fleet

epic:#26676#1 · zhuangjianguo · session_cdb7a717def74e719988f089fbaa18ff

Filed from the record-page epic #26676 as a sub-issue (the maintainer, 2026-10-29: 「另立两张 ui 卡:…列表视图选择器改下拉 + 收藏进侧栏」; the reasoning, verbatim: 「我们是元数据开发平台,类似 salesforce,每一种元数据的视图数量都不一定的」 and, on Attio: 「他可以把某个列表视图加到收藏,显示在左侧菜单上」). It is list-page work; it also frees a 44 px row inside #27545's narrowed list.

Source (main 273137d227)

  • The object list page draws its views as a flat tab row (e.g. HotCRM leads: 全部线索 · 我的线索 · 🔥 高热度线索 · 高优先级 · 还有 N 个 ▾) under the list header; authored views come from the object's *.view.ts (views: / navigation.tabs), reader-saved views join the same row. The row overflows at five and is cramped at 464 px (the split's list width).
  • Apps already pin a view into the sidebar on the AUTHOR side: crm.app.ts { type: 'object', objectName: 'crm_lead', viewName: 'my_leads', label: 'My Leads' } (nav_my_tasks, nav_my_deals, nav_my_leads, nav_my_calendar). There is no reader-side equivalent.
  • Salesforce (list view picker with search and pin), Attio (「All Deals ▾」 + favorites in the sidebar) and Twenty (「All People · 5 ▾」) all switch views from a dropdown on the title.

Target

  1. The list title is the view switcher: 「 ▾ · 」 at the top-left of the list header (the object name stays in the breadcrumb and the sidebar highlight); the flat view-tab row retires. The filter / sort / display controls keep their own row.
  2. The dropdown: a search box at the top (always, not only past N views); sections 📌 固定 · 最近 · 全部; in 全部 the authored views first in their declared order, then the reader's saved views; each row with its view-type icon (grid / kanban / calendar / gantt / gallery / map) and, on hover, ☆ and 📌; 「+ 新建视图」 at the bottom (the existing save-view flow).
  3. Pinned = default: one pinned view per object per reader opens by default; stored in console: one workspace-preference module (record open mode, drawer width, timeline / related column toggles) read per user × object, with a shared panel-toggle toolbar on the record page — defaults derived from the object, never metadata #27052's workspacePreference module, scope object:NAME; with none pinned the authored default (isDefault, else the first) opens.
  4. ☆ Favorite → sidebar 收藏 group: starring a view adds 「 」 to a 收藏 group at the top of the app's sidebar (reader preference, same module, scope app:NAME); unstarring removes it; drag to reorder inside the group; authored viewName navigation items are untouched and not duplicated (a view that is already an authored item shows ☆ disabled with the tooltip 「已在菜单中」).
  5. The split pane's list (Record drawer v4: a bounded peek over the list — md cap instead of the field-count bucket, no dim overlay, the list stays readable and clickable, ⤢ maximizes in place at the same URL; the full page is reached only from the row ↗ and the header ⋯ #27545) uses the same title switcher; nothing else is special-cased. No metadata key; ⛔ packages/spec/**.
  6. File surface

    ui/packages/plugin-list/src/** (the view tab row → the title switcher), ui/packages/app-shell/src/views/ObjectView.tsx + objectViewListRenderer.tsx (header), ui/packages/app-shell/src/components/UnifiedSidebar.tsx (收藏 group), ui/packages/app-shell/src/workspacePreference* (pinned / favorites), i18n in all ten packs, tests beside, changeset; ⛔ packages/spec/**.

    Acceptance

    1. Tests: the title opens the dropdown with search, sections and the authored-then-reader order; pin stores and restores the default per object; star adds / removes the sidebar entry and reorders; an authored viewName item is not duplicated; the tab row no longer renders; the split pane's list shows the same switcher at 464 px.
    2. Screenshots on HotCRM leads (dropdown open at 1440; the sidebar with a 收藏 entry) and in the split pane, on a never-merged evidence branch.
    3. The epic seat verifies in the console preview before ACCEPT (maintainer: 「车队开发完后你审核效果」).

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:recordsBusiness objects, records, the views that show data, usable forms, searchdomain:uienhancementNew feature or requestpm:queuepriority:p1High: required for production / M2

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions