[Bug] mergeCell 合并区间部分超出可视区域时,合并标签被画在两个位置(1.26.7 回归,PR #5284 引入)
Maintainer thường phản hồi trong vòng 1 ngày
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức phù hợp với người mới
- 30/100
- Loại issue
- Lỗi
- Độ rõ ràng
- Khá rõ ràng
- Mức độ hoạt động
- Sôi nổi
- Công nghệ
- javascript, typescript
- Lĩnh vực
- data-visualization, frontend
Hướng nghiên cứu
The bug is in packages/vtable/src/scenegraph/stick-text/index.ts, in dealMergedCellGroups, where the merged range is clipped to visibleRange and dealVertical adjusts dy only for visible text nodes. Read that clipping logic and compare it with how adjustCellContentVerticalLayout handled merged ranges in 1.26.6 via getCellMergeRange. Done means a merged cell whose range is cut off by the viewport draws its label once, with every singleCellGroup in the range sharing the same dy. Settle on fix option (a) or (b) with a maintainer before coding.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Version
1.26.7 / 1.26.8
Link to Minimal Reproduction
ListTable,配置: - 某列 mergeCell: true 且 textStick: true(纵向合并行数超过可视区域行数) - 容器高度调小,使合并区间被可视区底边"切断"
Steps to Reproduce
- 创建 ListTable,A 列设置
mergeCell: true, textStick: true,构造约 8 条连续相同取值的记录,使第 N~N+7 行纵向合并。 - 将容器高度调小到只能看到 N~N+3 行。
- 触发任意一次会执行
handleTextStick的刷新(autoRowHeight 初次渲染 / 滚动 / 容器 resize 均可)。
Current Behavior
合并标签被绘制在两个不同的 y 位置:合并区间中可见部分的 text 子节点被 dealVertical 调整了 dy,
区间外不可见部分的 text 子节点仍保持旧的基准 dy。视觉上合并"断开"成两块。
Expected Behavior
合并区间内所有 singleCellGroup 的 dy 偏移保持一致,标签只绘制一次(与 1.26.6 一致)。
Environment
- OS: macOS / Windows
- Browser: Chrome
- Framework: React(react-vtable),但问题在 vtable core 中
Any additional comments?
根因分析
PR #5284(修复 #3752)重写了 packages/vtable/src/scenegraph/stick-text/index.ts:
dealMergedCellGroups 现在把合并区间的处理裁剪到当前可视窗口(visibleRange 取交集),
并加了 updateId 去重。当纵向合并区间部分超出可视区域时,只有可见行的 text 子节点会收到
dealVertical 的 dy 调整,同一合并区间其余行的 text 保持旧的基准 dy。
由于 boolean mergeCell 的实现是区间内每个 cellGroup 都携带一个 text 子节点、靠各自 dy 叠加到
同一视觉位置,同一标签就会以两个绝对位置各渲染一次。
该 PR 之前,adjustCellContentVerticalLayout 处理合并单元格时遍历整个合并区间
(getCellMergeRange),与是否可见无关,因此所有 cell 始终一致。
可能的修复方向
裁剪到可视范围时,需要保证同一合并区间中不可见的 singleCellGroup:
(a) 与可见部分保持/恢复一致的基准 dy;或
(b) 不被渲染(而不是带着过期偏移渲染)——
即合并区间的 text 定位应作为一个整体处理,即使只处理了其中一部分。
- Ngôn ngữ chính
- TypeScript
- Star
- 3.7k
- Fork
- 489
- Merge trung bình
- 20 giờ 49 phút
- Pull request đã merge (30 ngày)
- 18
Chuẩn bị môi trường
- Không có Dockerfile hay tệp Docker Compose
- Có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của VisActor/VTable
-
[Feature] 在树形结构下,希望能增加指定层级的方法Đang mởfeature
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 45/100
Maintainer thường phản hồi trong vòng 1 ngày
-
bug
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 35/100
Maintainer thường phản hồi trong vòng 1 ngày
-
[Feature]Đang mởfeature
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 28/100
Maintainer thường phản hồi trong vòng 1 ngày
-
[Feature] 甘特图组件增加跨行拖动任务条的功能Đang mởfeature
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 42/100
Maintainer thường phản hồi trong vòng 1 ngày
-
复杂的cell, 大数据下,表格快速滚动卡顿Có thể đã có người làm @fangsmile đã nhận 29 ngày trước. Đang mở
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 35/100
VisActor/VTable#5308 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
Tất cả issue của VisActor/VTable
Issue tương tự
-
test: make the #3408 Claude OAuth token fixture obviously fake so secret scanners stop flagging itĐang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
code-yeongyu/senpi#3436 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
community first-timers-only good first issue hacktoberfest help wanted low hanging fruit up-for-grabs
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 78/100
lingdojo/kana-dojo#32505 · 1 bình luận · 5 reaction ·
Maintainer thường phản hồi trong vòng 1 ngày
-
code-quality refactoring
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
github/gh-aw-firewall#10040 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
review-followup
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 82/100
griffinwork40/agent-afk#3868 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
area: import-export bug status: needs-triage
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
amatya-aditya/obsidian-rss-dashboard#1191 ·
Maintainer thường phản hồi trong vòng 1 ngày