新增图表类型
本指南将指导你如何从零开始在 VSeed 中实现一个 raceBar(动态条形图)图表类型。
raceBar 是一种特殊的条形图,它引入了时间维度(通过 player 播放器控制),展示数据随时间变化的排名情况。
1. 核心概念
与普通 bar 图表相比,raceBar 的核心区别在于:
- 数据处理:需要处理时间切片数据。
- 坐标轴:X轴/Y轴的域(Domain)需要随时间动态变化。
- 动画:需要平滑的过渡动画来展示排名的变化。
在 VSeed 中,我们通过**Pipeline(管道)**机制来实现这些差异,并复用大部分基础逻辑。
2. 实现步骤
2.1 定义图表类型 (Type Definition)
首先,我们需要定义 raceBar 的数据结构和校验规则。
文件位置: packages/vseed/src/types/chartType/raceBar/
-
接口定义 (
raceBar.ts): 继承基础属性,但必须强制包含player和sort属性。 -
校验 Schema (
zRaceBar.ts): 使用 Zod 定义运行时校验逻辑。 -
注册类型: 在
packages/vseed/src/types/chartType/index.ts中导出。 -
全局类型更新 (VSeed & zVSeed): 重要:不要忘记在全局类型定义中引入新类型。
packages/vseed/src/types/vseed.ts: 将RaceBar添加到VSeed联合类型中。 44→ -packages/vseed/src/types/zVseed.ts: 将zRaceBar添加到zVSeed联合 Schema 中。 45→ 46→5. Config Schema 定义 (types/properties/config/): 47→ 重要:还需要定义图表的配置 Schema,并在全局 Config 中注册。 48→ - 创建packages/vseed/src/types/properties/config/race.ts,导出zRaceBarConfig。 49→ - 更新packages/vseed/src/types/properties/config/config.ts,将raceBar: zRaceBarConfig.nullish()添加到zConfig中。 50→ 51→### 2.2 实现构建管线 (Pipeline)
这是实现逻辑的核心。我们需要创建两条管线:Spec Pipeline 和 Advanced Pipeline。
文件位置: packages/vseed/src/pipeline/
-
Spec Pipeline (
spec/chart/pipeline/raceBar.ts): 这里定义了如何将 VSeed Spec 转换为 VChart Spec。 关键点:使用player相关的 Pipe 替换静态 Pipe。- 使用
playerYX替代datasetYX:处理带时间维度的数据。 - 使用
playerXLinear/playerYBand:处理动态坐标轴。
- 使用
-
Advanced Pipeline (
advanced/chart/pipeline/raceBar.ts): 处理高级配置(如智能推荐)。通常可以直接复用bar的逻辑,但需要确保类型判断函数能识别raceBar。 -
工具函数更新: 不要忘记更新
packages/vseed/src/pipeline/utils/constant.ts(ChartTypeEnum) 和chatType.ts,确保系统知道raceBar是一种“类柱状图”。
2.3 配置主题 (Theme)
为了让图表开箱即用,需要在默认主题中添加配置。
文件位置: packages/vseed/src/theme/
在 light.ts 和 dark.ts 中添加 raceBar 字段。务必包含 player 的默认配置,否则可能会导致运行时错误(如 "Cannot destructure property 'enable' of 'label'")。
2.4 注册图表 (Registration)
最后,将新图表注册到 Builder 中。
文件位置: packages/vseed/src/builder/register/chartType/raceBar.ts
并在全局注册文件 packages/vseed/src/builder/register/all.ts 中调用它。
3. 验证与调试
完成上述步骤后,你可以通过以下方式验证:
- 类型检查:运行
tsc确保没有类型错误。 - 单元测试:编写测试用例验证 Pipeline 的输出。
- Demo:在
apps/website或测试工程中创建一个raceBar的示例,检查动画和播放功能是否正常。
4. 常见问题
- 报错 "Cannot destructure property...":通常是因为 Theme 中缺少默认配置。
- 图表不动画:检查
player配置中的interval字段,以及数据是否正确按照时间字段分组。