跳转至

[ISSUE-0049] 空状态"去创建任务"直接弹 Dialog

用户反馈:商家列表空状态的"去创建任务"按钮现在是跳到任务页面,能和左下"创建任务"一样直接打开弹窗

病灶(v0.10.68 之前)

local-data-view.tsx:753-772 空状态按钮 onClick:

storage.setItem('local:popup-action', { type: 'go-page', page: 'task', t: Date.now() })

走 storage 信号 → main-layout watch → setPage('task') → 用户到了任务页还要再点一次创建任务按钮才打开 Dialog。多余一次跳转。

历史原因:v0.10.53 ISSUE-0035 修过这个按钮(旧版用错的 storage API 完全不动)。当时只让它"能动",没改交互目标。

修(prop 链)

同 component tree(main-layout → DataView → LocalDataView),直接传 callback:

// local-data-view.tsx
 type Props = {
+  onCreateTask?: () => void;
 };

 <Button onClick={() => onCreateTask?.()}>去创建任务</Button>

// data-view.tsx
 interface Props {
+  onCreateTask?: () => void;
 }
 <LocalDataView onCreateTask={onCreateTask} />

// main-layout.tsx
 <DataView onCreateTask={() => setCreateOpen(true)} />

3 个文件加 1 个 prop,干净直接。避免: - storage 信号绕路(这里同 window,不必跨 storage) - 5s 时效检查的潜在 race

顺便修工作流(v0.10.68 教训延续)

严格按"先 bump → 后 build → sanity check":

PKG=$(node -p "require('./package.json').version")
MAN=$(node -e "console.log(JSON.parse(require('fs').readFileSync('dist-v2/chrome-mv3/manifest.json')).version)")
[ "$PKG" = "$MAN" ] && echo "✅ 同步:$PKG" || echo "❌ 不同步"

更新到 docs/rules/version-release-flow.md — 之前的 diff <(grep) 方式因 JSON 格式(冒号后空格 vs 无)会误报。

audit_grep

audit_grep:
  - pattern: "type:\\s*['\"]go-page['\"][\\s\\S]{0,200}page:\\s*['\"]task['\"]"
    description: "在 main 端组件用 storage 信号跳 task   应改 prop 链直接调 onCreateTask"

未来如新组件还想用 go-page 跳 task 来打开 Dialog → pre-commit 拦截 → 改 prop 链。

元洞察 — Storage 信号 vs Prop 链

场景
跨 window / 跨 entrypoint(popup → main) storage 信号
同 component tree 内 prop 链
跨 React provider(深层组件 ↔ 顶层 state) Context

我之前的"storage 信号 = 万能"思维是过度抽象。同 tree 内 prop 直接传是最直观、最快、最易调试。

相关

  • [[0035-create-task-btn-storage-api-mix|0035-去创建任务按钮无反应-storage-api混用]] — 这个按钮的上一轮修复
  • [[0044-screenshot-6-ux-feedback-batch|0044-用户截图6项UX反馈-缩放-按钮色-排序-分页-顶部CTA]] — UX 多次反馈集中修同精神
  • 版本发布流程 — 顺便沉淀的 sanity check 命令