Metabase Embedding SDK 的 CollectionBrowserListColumns 详解:集合项表格列的自定义与过滤
【免费下载链接】metabaseThe easy-to-use open source Business Intelligence and Embedded Analytics tool that lets everyone work with data :bar_chart:项目地址: https://gitcode.com/GitHub_Trending/me/metabase
导读
在 Metabase 的 Embedding SDK(嵌入式分析 SDK)中,CollectionBrowser是用于在宿主应用中浏览集合(Collection)及其条目的核心 React 组件。CollectionBrowserListColumns则是该组件用于声明"集合条目表格显示哪些列"的联合类型(union type)。本文以仓库中该类型定义及其使用文档为骨架,结合 CollectionBrowser.tsx 的真实实现与 columns.ts 的底层列定义,系统讲解该类型的全部取值含义、与visibleColumns属性的配合方式、默认行为以及在 "all" 虚拟根集合等特殊场景下的表现,帮助开发者准确控制嵌入式集合浏览器的列显示。
CollectionBrowserListColumns 类型定义
官方 API 片段
在 docs/embedding/sdk/api/snippets/CollectionBrowserListColumns.md 中,该类型的完整定义如下:
type CollectionBrowserListColumns = | "type" | "name" | "description" | "lastEditedBy" | "lastEditedAt" | "archive";这是一个由六个字符串字面量组成的联合类型,表示集合条目表格中可显示的六种列。它被用作CollectionBrowserProps中visibleColumns属性的元素类型:
visibleColumns?: CollectionBrowserListColumns[];源码中的真实定义
在 Embedding SDK 的源码中,该类型与文档定义完全一致,位于 CollectionBrowser.tsx:
export type CollectionBrowserListColumns = | "type" | "name" | "description" | "lastEditedBy" | "lastEditedAt" | "archive";同时,SDK 内部还维护了一份"默认可见列"清单 COLLECTION_BROWSER_LIST_COLUMNS:
const COLLECTION_BROWSER_LIST_COLUMNS: CollectionBrowserListColumns[] = [ "type", "name", "lastEditedBy", "lastEditedAt", "archive", ];对比可见:默认可见列不含"description"(描述列),其余五列默认均显示。这一默认清单也通过visibleColumns = COLLECTION_BROWSER_LIST_COLUMNS作为CollectionBrowserInner的默认参数值生效(见 CollectionBrowser.tsx 第 146 行)。
与核心表格列定义的对应关系
六个列名并非 SDK 独有,它们来自 Metabase 前端核心的集合内容列常量。在 frontend/src/metabase/common/collections/columns.ts 中:
export const COLLECTION_CONTENT_COLUMNS = [ "type", "name", "description", "lastEditedBy", "lastEditedAt", "actionMenu", "archive", ] as const;可以看到CollectionBrowserListColumns恰好是COLLECTION_CONTENT_COLUMNS去掉"actionMenu"(操作菜单列,SDK 场景下不暴露)后的子集。而核心的DEFAULT_VISIBLE_COLUMNS_LIST(见 columns.ts 第 18-24 行)为["type", "name", "lastEditedBy", "lastEditedAt", "actionMenu"],同样以"type"、"name"、编辑信息列为核心——这解释了为什么 SDK 默认隐藏描述列、突出内容定位信息。
六个列的语义与取值说明
| 列名 | 语义 | 展示内容 |
|---|---|---|
"type" | 条目类型 | 集合、仪表板、问题(Question)、模型(Model)等类型的图标/标识 |
"name" | 条目名称 | 集合或条目的显示名称 |
"description" | 条目描述 | 集合或条目的描述文本(默认不显示) |
"lastEditedBy" | 最后编辑者 | 最近一次修改该条目的用户 |
"lastEditedAt" | 最后编辑时间 | 最近一次修改的时间戳 |
"archive" | 归档操作 | 将条目移入归档的操作入口(默认显示) |
其中"type"、"name"、"description"、"lastEditedBy"、"lastEditedAt"为展示型列,"archive"为操作型列。在源码实现中,这些列名通过getVisibleColumnsMap(见 ItemsTable/utils.ts)被转换为CollectionContentTableColumnsMap({ [key in CollectionContentTableColumn]: true })形式,供底层CollectionItemsTable/ItemsTable判断每一列是否渲染。
通过 visibleColumns 自定义列显示
visibleColumns是CollectionBrowserProps中与该类型直接关联的属性(见 CollectionBrowserProps.tsx 源码注释):
- 未提供时:默认显示
COLLECTION_BROWSER_LIST_COLUMNS中的五列(type、name、lastEditedBy、lastEditedAt、archive)。 - 提供时:仅显示传入数组中的列,顺序按数组顺序渲染。
典型用法示例:
import { CollectionBrowser } from "@metabase/embedding-sdk-react"; <CollectionBrowser collectionId="root" visibleColumns={["type", "name", "description"]} />;上述配置将集合条目表格精简为"类型 + 名称 + 描述"三列,隐藏编辑信息与归档操作,适合只读的内容陈列场景。
"all" 模式下的列行为(特殊场景)
当collectionId="all"时,CollectionBrowser会展示一个虚拟根级列表,聚合根集合、租户集合与用户个人集合(见 CollectionBrowserProps 文档)。在该虚拟根视图中存在一个关键实现细节:lastEditedBy、lastEditedAt、archive三列会被自动过滤掉。
原因在源码中有明确注释(见 CollectionBrowser.tsx 第 176-187 行):虚拟根行的数据是合成的(synthesized),不携带编辑信息,也无法被归档,因此这三列对每一行都会渲染为空值。实现通过getVisibleColumnsMap(visibleColumns.filter(...))在渲染前剔除这三列:
const allModeRootColumnsMap = useMemo( () => getVisibleColumnsMap( visibleColumns.filter( (column) => !["lastEditedBy", "lastEditedAt", "archive"].includes(column), ), ), [visibleColumns], );这意味着即使你在"all"模式下显式传入visibleColumns={["lastEditedBy", "archive"]},虚拟根列表也不会渲染这两列;但当你进入具体的子集合后,这些列会恢复正常显示。
与 visibleEntityTypes 的配合
CollectionBrowserListColumns负责"显示哪些列",而visibleEntityTypes负责"显示哪些类型的实体"("collection" | "dashboard" | "question" | "model")。两者共同决定集合浏览器的信息密度:
<CollectionBrowser visibleEntityTypes={["dashboard", "question"]} // 只看仪表板与问题 visibleColumns={["type", "name", "lastEditedAt"]} // 只显示三类列 />;在实现上,visibleEntityTypes会通过ENTITY_NAME_MAP(见 CollectionBrowser.tsx 第 70-77 行)映射为后端模型类型(如"question"→"card"、"model"→"dataset"),再传给CollectionItemsTable的models参数过滤条目;而visibleColumns则直接控制表格列渲染。
常见使用场景与建议
- 精简只读目录:
visibleColumns={["type", "name", "description"]},隐藏编辑与归档操作,适用于对外展示的数据目录。 - 运维管理视图:保留
["type", "name", "lastEditedBy", "lastEditedAt", "archive"]默认五列,便于跟踪内容维护状态。 - 窄屏嵌入:只保留
["name"]或["type", "name"],配合pageSize(默认 25)控制单页密度。 - "all" 根视图注意:在虚拟根集合中编辑信息列与归档列不会显示,属预期行为,无需额外处理。
参考资料
- 类型定义与组件实现:CollectionBrowser.tsx
- SDK 组件文档:CollectionBrowser 与 CollectionBrowserProps
- 核心列定义与默认可见列:columns.ts
- 列映射工具函数:ItemsTable/utils.ts
- 组件属性片段:CollectionBrowserProps.md
【免费下载链接】metabaseThe easy-to-use open source Business Intelligence and Embedded Analytics tool that lets everyone work with data :bar_chart:项目地址: https://gitcode.com/GitHub_Trending/me/metabase
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考