Skip to content

Commit 08717e8

Browse files
committed
fix(views): 卡片流包装件补上 ms 载体接线
1 parent a38585d commit 08717e8

2 files changed

Lines changed: 8 additions & 8 deletions

File tree

‎app/src/components/notes/NotesReadingColumn.tsx‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,7 @@ import { StatusLine, Text, ViewSwitcher } from "../../ui/primitives";
6868
/** `views` 缺席时的空清单:**模块级常量**(稳定引用 ⇒ 下面的 `useMemo` 不每渲染重算) */
6969
const NO_VIEWS: readonly ViewSpec<NoteViewSlot>[] = [];
7070

71-
/** 卡片流键(= 注册表的 `NOTE_VIEWS[1]`;本件不 import 注册表 —— C1①)与其**带 seek 包装件**加载器
72-
* (T17/C10.3:该视图槽缺 `onOpenSessionAt`);仍经 `lazy()` ⇒ 模块级惰性不变。 */
71+
/** 卡片流键(= 注册表的 `NOTE_VIEWS[1]`;本件不 import 注册表 —— C1①)与其**带 seek 包装件**加载器(T17/C10.3:该槽缺 `onOpenSessionAt`);仍经 `lazy()` ⇒ 模块级惰性不变。 */
7372
const CARD_FLOW_KEY = "cardflow";
7473
const CARD_FLOW_LOAD = (): Promise<{ default: ComponentType<NoteViewSlot> }> => import("../../views/note/NoteCardFlowWithSeek");
7574

@@ -176,10 +175,11 @@ export default function NotesReadingColumn({
176175
const isDefault = viewKey === defaultKey;
177176
const LazyView = isDefault ? null : lazyOf.get(viewKey) ?? null;
178177
/** 非默认视图的槽(数据全在这里,视图自身零取数 —— C14②);空态 ⇒ `null`(连卡片流都不挂)。
179-
* T17:`onOpenSessionAt` 仍不进 `NoteViewSlot`(批 6 已裁)⇒ 卡片流的 ms 由包装件补齐。 */
178+
* T17:`onOpenSessionAt` 不进 `NoteViewSlot`(批 6 已裁)⇒ 只在**传参处**补成包装件的 props。 */
180179
const slot: NoteViewSlot | null = selected
181180
? { note: selected, onTaskToggle, onOpenSession, onImageOpen }
182181
: null;
182+
const viewProps = slot === null ? null : { ...slot, onOpenSessionAt };
183183

184184
/** 默认视图(原文)节点:T14 之前逐字相同,只是现在由常驻容器承载(§7.3①) */
185185
const residentView = selected ? (
@@ -289,9 +289,9 @@ export default function NotesReadingColumn({
289289

290290
{/* §7.3② 非默认视图:模块级惰性 + `Suspense`(复用 `ShellFallback`);切走 ⇒ 卸载。
291291
滚动容器由本件提供 —— `NoteCardFlowView` 是纯展示列(自身无滚动容器) */}
292-
{!isDefault && LazyView && slot ? (
292+
{!isDefault && LazyView && viewProps ? (
293293
<div style={{ flex: 1, minWidth: 0, overflowY: "auto", padding: "var(--ed-space-16, 16px)" }}>
294-
<Suspense fallback={<ShellFallback />}>{createElement(LazyView, slot)}</Suspense>
294+
<Suspense fallback={<ShellFallback />}>{createElement(LazyView, viewProps)}</Suspense>
295295
</div>
296296
) : null}
297297
</div>

‎app/src/components/notes/NotesReadingColumn.views.test.tsx‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -283,18 +283,18 @@ describe("笔记视图宿主(批 5 T14 · C4 阻断 / §7.3 三条硬约束 /
283283
expect(invokeMock.mock.calls.length).toBe(before);
284284
});
285285

286-
/** F11(T17 · C10.3):卡片流必须经**带 seek 包装件**加载 —— 点真芯片看回调(包装件未生效 / 键改名 ⇒ 命中单参分支 ⇒ `at` 收不到)。 */
286+
/** F11(T17 · C10.3):卡片流必须经**带 seek 包装件**加载(未生效 ⇒ 命中单参分支 ⇒ `at` 收不到);🔴 选择器限定在卡片流容器内 —— 常驻原文视图里也有同款芯片(若不限定就会点到它 ⇒ M6 实测变体不红)。 */
287287
it("F11 卡片流芯片带毫秒:点 [data-ts-ms] ⇒ onOpenSessionAt(42, 5000),单参回调不被调", async () => {
288288
const plain = vi.fn(); const at = vi.fn();
289289
const { container } = render(<Harness selected={{ ...note, content: "跳转 [⏱ 00:05]([[ts:5000]]) 处" }} onOpenSession={plain} onOpenSessionAt={at} />);
290290
await clickSegment("卡片流");
291291
const chip = await waitFor(() => {
292-
const el = container.querySelector<HTMLElement>("[data-ts-ms]");
292+
const el = container.querySelector<HTMLElement>('[data-testid="note-card-flow"] [data-ts-ms]');
293293
expect(el, "卡片流没渲染出回链芯片").toBeTruthy();
294294
return el as HTMLElement;
295295
});
296296
fireEvent.click(chip);
297-
expect(at, "包装件没生效 —— 检查 CARD_FLOW_KEY 是否与注册表一致").toHaveBeenCalledWith(42, 5000);
297+
expect(at, "包装件没生效 —— 检查 CARD_FLOW_KEY 与 viewProps").toHaveBeenCalledWith(42, 5000);
298298
expect(plain).not.toHaveBeenCalled();
299299
});
300300
});

0 commit comments

Comments
 (0)