refactor(asset-selector): 三阶段重构 AssetSelector(504→168行, -67%) #937
Reference in New Issue
Block a user
Delete Branch "refactor/asset-selector"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
变更说明
AssetSelector 公共组件三阶段重构,主文件 504 行 → 168 行(-67%)。
Phase 1:抽类型/常量/工具
types/index.ts— AssetSelectorProps, ViewModeconstants.ts— TYPE_OPTIONS 类型筛选选项utils/index.ts— formatSize, formatDuration, getQualityLevel, getQualityColorPhase 2:拆 UI 组件(6个)
SelectorToolbar.tsx— 搜索 + 类型/质量筛选 + 视图切换SelectorBatchBar.tsx— 批量操作栏AssetCard.tsx— 网格卡片(缩略图/角标/checkbox)AssetListItem.tsx— 列表项PreviewOverlay.tsx— 悬浮预览浮层EmptyState.tsx— 空状态Phase 3:抽业务 Hook(4个)
useAssetFilter— 搜索 + 类型/质量分筛选 + 视图切换useAssetSelection— 单选/多选/Shift 连选useDragReorder— HTML5 DnD 拖拽排序 + 批量数据携带useAssetPreview— 悬浮延迟预览其他
index.ts导出 AssetSelectorProps / ViewMode 类型验收标准
🚀 预览环境已部署
CI全绿,自动审批通过。
CI全绿,自动审批通过。
Auto merge skipped after multiple 405 errors: PR may have conflicts or unresolved checks. Please review manually. This is not a CI failure.
743877635dto04e8586f91Auto merge skipped after multiple 405 errors: PR may have conflicts or unresolved checks. Please review manually. This is not a CI failure.
【阻塞级判定】
📊 审查概览
🔴 阻塞级问题(必须修复)
无
💡 改进建议(不阻塞合并)
[apps/web/src/components/asset-selector/AssetCard.tsx] 未使用的 Props
AssetCard组件定义了compact?: boolean属性,且在AssetSelector.tsx中传递了该属性,但在组件内部并未实际使用(未应用到 className 或样式逻辑中)。建议从AssetCardProps接口和组件解构中移除该属性,保持代码整洁。[apps/web/src/components/asset-selector/AssetCard.tsx & AssetListItem.tsx] 性能优化建议
AssetCard和AssetListItem是在列表中高频渲染的组件。当前代码未使用React.memo包裹。在AssetSelector中,当dragOverIdx或其他共享状态变化时,会导致整个列表重新渲染。建议使用React.memo包裹这两个子组件,避免不必要的重绘,提升拖拽和交互时的性能。✅ 良好实践
e.stopPropagation()防止事件冒泡(如 Checkbox 点击)。loading="lazy"优化图片加载性能。✅ 格式检查通过 | ✅ 逻辑审查需修改 | ⚠️ 建议关注性能
🤖 由 AI 代码审查机器人自动生成 | 2026-07-27 17:01:26 | 模型:
🗑️ 预览环境已清理
PR #937 已关闭或合并,对应的预览环境已被清理。