refactor(editing-planner): 拆分 useTimelineMenus 为子Hook(192→67行, -65%) #1093

Merged
xiaoxia merged 1 commits from refactor/use-timeline-menus into develop 2026-07-28 16:18:48 +08:00
Owner

变更说明

将 useTimelineMenus Hook 拆分为两个子 Hook,主文件从 192 行减至 67 行(-65%)。

拆分结构

  • useContextMenu:右键菜单逻辑(状态管理、操作回调、外部点击关闭)
  • useAddPicker:添加片段面板逻辑(位置计算、类型/时长选择、外部点击关闭)
  • useTimelineMenus:主 Hook,组合子 Hook + 悬停状态

兼容性

  • 导出路径不变
  • 返回值接口完全兼容,无破坏性变更
### 变更说明 将 useTimelineMenus Hook 拆分为两个子 Hook,主文件从 192 行减至 67 行(-65%)。 ### 拆分结构 - **useContextMenu**:右键菜单逻辑(状态管理、操作回调、外部点击关闭) - **useAddPicker**:添加片段面板逻辑(位置计算、类型/时长选择、外部点击关闭) - **useTimelineMenus**:主 Hook,组合子 Hook + 悬停状态 ### 兼容性 - 导出路径不变 - 返回值接口完全兼容,无破坏性变更
xiaoxia force-pushed refactor/use-timeline-menus from 9a9211ef86 to c726fc61c0 2026-07-28 15:13:15 +08:00 Compare
xiaoxia added 1 commit 2026-07-28 16:06:08 +08:00
refactor(editing-planner): 拆分useTimelineMenus为子Hook(192→67行, -65%)
CI/CD Pipeline / Staging E2E Tests (pull_request) Blocked by required conditions
CI/CD Pipeline / Staging API Integration Tests (pull_request) Blocked by required conditions
CI/CD Pipeline / Deploy Production (pull_request) Blocked by required conditions
CI/CD Pipeline / Production Browser E2E (pull_request) Blocked by required conditions
CI/CD Pipeline / ACR Image Cleanup (pull_request) Blocked by required conditions
CI/CD Pipeline / Canary Release to Production (pull_request) Blocked by required conditions
Preview Cleanup / Cleanup Preview Environment (pull_request) Waiting to run
ACR Cleanup / ACR Image Cleanup (pull_request_target) Has been cancelled
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 27s
CI/CD Pipeline / Unit Tests (pull_request) Waiting to run
CI/CD Pipeline / Frontend Unit Tests (pull_request) Waiting to run
CI/CD Pipeline / Build Production API Image (pull_request) Waiting to run
CI/CD Pipeline / Build Production Web Image (pull_request) Waiting to run
CI/CD Pipeline / Build Production Worker Image (pull_request) Waiting to run
CI/CD Pipeline / CI Gate (pull_request) Blocked by required conditions
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 1m18s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 2m29s
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Waiting to run
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 2m35s
CI/CD Pipeline / Validate - Code Quality (pull_request) Failing after 3m5s
CI/CD Pipeline / Integration Tests (pull_request) Waiting to run
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 2m43s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 1m35s
PR Automation / Auto Approve on CI Green (pull_request) Failing after 1m11s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m14s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 6m29s
AI Code Review / AI Code Review (pull_request) Successful in 6m22s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 46m19s
d79a652c69
xiaoxia force-pushed refactor/use-timeline-menus from c726fc61c0 to d79a652c69 2026-07-28 16:06:08 +08:00 Compare
xiaoxia merged commit cb7daa0674 into develop 2026-07-28 16:18:48 +08:00
auto-approve-bot reviewed 2026-07-28 16:37:41 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。

🚀 预览环境已部署

项目 详情
PR号 #1093
预览链接 https://pr-1093.preview.xiaoxiajianji.com
API环境 staging

💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。

🔄 每次提交新代码后预览环境会自动更新。

🗑️ PR 关闭或合并后,预览环境会自动清理。

🚀 **预览环境已部署** | 项目 | 详情 | |------|------| | PR号 | #1093 | | 预览链接 | [https://pr-1093.preview.xiaoxiajianji.com](https://pr-1093.preview.xiaoxiajianji.com) | | API环境 | staging | > 💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。 > > 🔄 每次提交新代码后预览环境会自动更新。 > > 🗑️ PR 关闭或合并后,预览环境会自动清理。
Collaborator

代码审查结果 - PR #1093

⚠️ 问题(2个需要修改)

  1. apps/web/src/pages/editing-planner/hooks/useTimelineMenus.ts 第30行:代码diff在该文件末尾截断,return 语句未闭合。这将导致语法错误,且无法确认是否正确返回了 hoveredClipIdsetHoveredClipId 等原有状态,会导致组件运行时崩溃或功能丢失。
  2. apps/web/src/pages/editing-planner/hooks/timeline-menus/useAddPicker.ts 第73-76行:点击外部关闭逻辑存在缺陷。handleClickOutside 仅判断了点击是否在 pickerRef 内部,未排除触发按钮 addCardRef。当用户点击触发按钮试图关闭弹窗时,会先触发“点击外部”关闭弹窗,随后触发按钮的 onClick 重新打开弹窗,导致无法通过再次点击按钮关闭弹窗(产生闪烁或无效交互)。

💡 建议(2个可选)

  1. apps/web/src/pages/editing-planner/hooks/timeline-menus/useContextMenu.ts 第32行:右键菜单定位直接使用了 e.clientX/Y,未做边界检测。若用户在屏幕右下角右键,菜单可能会超出视口。建议参考 useAddPicker 的边界计算逻辑。
  2. apps/web/src/pages/editing-planner/hooks/timeline-menus/useAddPicker.ts 第48-65行:弹窗位置计算仅在 showAddPicker 变化时触发。若用户在弹窗打开时调整窗口大小,弹窗位置不会更新,可能导致遮挡。建议增加 resize 事件监听。

格式检查通过 | 逻辑审查需修改 | ⚠️ 建议关注性能


🤖 由 AI 代码审查机器人自动生成 | 2026-07-28 08:42:47 | 模型:

## 代码审查结果 - PR #1093 ### ⚠️ 问题(2个需要修改) 1. **apps/web/src/pages/editing-planner/hooks/useTimelineMenus.ts 第30行**:代码diff在该文件末尾截断,`return` 语句未闭合。这将导致语法错误,且无法确认是否正确返回了 `hoveredClipId`、`setHoveredClipId` 等原有状态,会导致组件运行时崩溃或功能丢失。 2. **apps/web/src/pages/editing-planner/hooks/timeline-menus/useAddPicker.ts 第73-76行**:点击外部关闭逻辑存在缺陷。`handleClickOutside` 仅判断了点击是否在 `pickerRef` 内部,未排除触发按钮 `addCardRef`。当用户点击触发按钮试图关闭弹窗时,会先触发“点击外部”关闭弹窗,随后触发按钮的 `onClick` 重新打开弹窗,导致无法通过再次点击按钮关闭弹窗(产生闪烁或无效交互)。 ### 💡 建议(2个可选) 1. **apps/web/src/pages/editing-planner/hooks/timeline-menus/useContextMenu.ts 第32行**:右键菜单定位直接使用了 `e.clientX/Y`,未做边界检测。若用户在屏幕右下角右键,菜单可能会超出视口。建议参考 `useAddPicker` 的边界计算逻辑。 2. **apps/web/src/pages/editing-planner/hooks/timeline-menus/useAddPicker.ts 第48-65行**:弹窗位置计算仅在 `showAddPicker` 变化时触发。若用户在弹窗打开时调整窗口大小,弹窗位置不会更新,可能导致遮挡。建议增加 `resize` 事件监听。 --- ✅ 格式检查通过 | ❌ 逻辑审查需修改 | ⚠️ 建议关注性能 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-07-28 08:42:47 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->
Sign in to join this conversation.