This commit completes Stage 2.5-2.6 of the refactoring plan by: - Consolidating 8 provider form files (1941+ lines) into a single unified ProviderForm component (353 lines), reducing code by ~82% - Implementing modern form management with react-hook-form and zod - Adding preset provider categorization with grouped select UI - Supporting dual-mode operation for both Claude and Codex configs - Removing redundant subcomponents: - ApiKeyInput.tsx (72 lines) - ClaudeConfigEditor.tsx (205 lines) - CodexConfigEditor.tsx (667 lines) - EndpointSpeedTest.tsx (636 lines) - KimiModelSelector.tsx (195 lines) - PresetSelector.tsx (119 lines) Key improvements: - Type-safe form values with ProviderFormValues extension - Automatic template value application for presets - Better internationalization coverage - Cleaner separation of concerns - Enhanced UX with categorized preset groups Updates AddProviderDialog and EditProviderDialog to pass appType prop and handle preset category metadata.
11 KiB
CC Switch 重构实施清单
用于跟踪重构进度的详细检查清单
开始日期: ___________ 预计完成: ___________ 当前阶段: ___________
📋 阶段 0: 准备阶段 (预计 1 天)
环境准备
- 创建新分支
refactor/modernization - 创建备份标签
git tag backup-before-refactor - 备份用户配置文件
~/.cc-switch/config.json - 通知团队成员重构开始
依赖安装
pnpm add @tanstack/react-query
pnpm add react-hook-form @hookform/resolvers
pnpm add zod
pnpm add sonner
pnpm add next-themes
pnpm add @radix-ui/react-dialog @radix-ui/react-dropdown-menu
pnpm add @radix-ui/react-label @radix-ui/react-select
pnpm add @radix-ui/react-slot @radix-ui/react-switch @radix-ui/react-tabs
pnpm add class-variance-authority clsx tailwind-merge tailwindcss-animate
- 安装核心依赖 (上述命令)
- 验证依赖安装成功
pnpm install - 验证编译通过
pnpm typecheck
配置文件
- 创建
components.json - 更新
tsconfig.json添加路径别名 - 更新
vite.config.mts添加路径解析 - 验证开发服务器启动
pnpm dev
完成时间: ___________ 遇到的问题: ___________
📋 阶段 1: 基础设施 (预计 2-3 天)
1.1 工具函数和基础组件
- 创建
src/lib/utils.ts(cn 函数) - 创建
src/components/ui/button.tsx - 创建
src/components/ui/dialog.tsx - 创建
src/components/ui/input.tsx - 创建
src/components/ui/label.tsx - 创建
src/components/ui/textarea.tsx - 创建
src/components/ui/select.tsx - 创建
src/components/ui/switch.tsx - 创建
src/components/ui/tabs.tsx - 创建
src/components/ui/sonner.tsx - 创建
src/components/ui/form.tsx
测试:
- 验证所有 UI 组件可以正常导入
- 创建一个测试页面验证组件样式
1.2 Query Client 设置
- 创建
src/lib/query/queryClient.ts - 配置默认选项 (retry, staleTime 等)
- 导出 queryClient 实例
1.3 API 层
-
创建
src/lib/api/providers.ts- getAll
- getCurrent
- add
- update
- delete
- switch
- importDefault
- updateTrayMenu
-
创建
src/lib/api/settings.ts- get
- save
-
创建
src/lib/api/mcp.ts- getConfig
- upsertServer
- deleteServer
-
创建
src/lib/api/index.ts(聚合导出)
测试:
- 验证 API 调用不会出现运行时错误
- 确认类型定义正确
1.4 Query Hooks
-
创建
src/lib/query/queries.ts- useProvidersQuery
- useSettingsQuery
- useMcpConfigQuery
-
创建
src/lib/query/mutations.ts- useAddProviderMutation
- useSwitchProviderMutation
- useDeleteProviderMutation
- useUpdateProviderMutation
- useSaveSettingsMutation
-
创建
src/lib/query/index.ts(聚合导出)
测试:
- 在临时组件中测试每个 hook
- 验证 loading/error 状态正确
- 验证缓存和自动刷新工作
完成时间: ___________ 遇到的问题: ___________
📋 阶段 2: 核心功能重构 (预计 3-4 天)
2.1 主题系统
- 创建
src/components/theme-provider.tsx - 创建
src/components/mode-toggle.tsx - 更新
src/index.css添加主题变量 - 删除
src/hooks/useDarkMode.ts - 更新所有组件使用新的主题系统
测试:
- 验证主题切换正常工作
- 验证系统主题跟随功能
- 验证主题持久化
2.2 更新 main.tsx
- 引入 QueryClientProvider
- 引入 ThemeProvider
- 添加 Toaster 组件
- 移除旧的 API 导入
测试:
- 验证应用可以正常启动
- 验证 Context 正确传递
2.3 重构 App.tsx
- 使用 useProvidersQuery 替代手动状态管理
- 移除所有 loadProviders 相关代码
- 移除手动 notification 状态
- 简化事件监听逻辑
- 更新对话框为新的 Dialog 组件
目标: 将 412 行代码减少到 ~100 行
测试:
- 验证供应商列表正常加载
- 验证切换 Claude/Codex 正常工作
- 验证事件监听正常工作
2.4 重构 ProviderList
- 创建
src/components/providers/ProviderList.tsx - 使用 mutation hooks 处理操作
- 移除 onNotify prop
- 移除手动状态管理
测试:
- 验证供应商列表渲染
- 验证切换操作
- 验证删除操作
2.5 重构表单系统
-
创建
src/lib/schemas/provider.ts(Zod schema) -
创建
src/components/providers/ProviderForm.tsx- 使用 react-hook-form
- 使用 zodResolver
- 字段级验证
-
创建
src/components/providers/AddProviderDialog.tsx- 使用新的 Dialog 组件
- 集成 ProviderForm
- 使用 useAddProviderMutation
-
创建
src/components/providers/EditProviderDialog.tsx- 使用新的 Dialog 组件
- 集成 ProviderForm
- 使用 useUpdateProviderMutation
测试:
- 验证表单验证正常工作
- 验证错误提示显示正确
- 验证提交操作成功
- 验证表单重置功能
2.6 清理旧组件
- 删除
src/components/AddProviderModal.tsx - 删除
src/components/EditProviderModal.tsx - 更新所有引用这些组件的地方
- 删除
src/components/ProviderForm.tsx及src/components/ProviderForm/
完成时间: ___________ 遇到的问题: ___________
📋 阶段 3: 设置和辅助功能 (预计 2-3 天)
3.1 重构 SettingsDialog
-
创建
src/components/settings/SettingsDialog.tsx- 使用 Tabs 组件
- 集成各个设置子组件
-
创建
src/components/settings/GeneralSettings.tsx- 语言设置
- 配置目录设置
- 其他通用设置
-
创建
src/components/settings/AboutSection.tsx- 版本信息
- 更新检查
- 链接
-
创建
src/components/settings/ImportExportSection.tsx- 导入功能
- 导出功能
目标: 将 643 行拆分为 4-5 个小组件,每个 100-150 行
测试:
- 验证设置保存功能
- 验证导入导出功能
- 验证更新检查功能
3.2 重构通知系统
- 在所有 mutations 中使用
toast替代showNotification - 移除 App.tsx 中的 notification 状态
- 移除自定义通知组件
测试:
- 验证成功通知显示
- 验证错误通知显示
- 验证通知自动消失
3.3 重构确认对话框
- 更新
src/components/ConfirmDialog.tsx使用新的 Dialog - 或者直接使用 shadcn/ui 的 AlertDialog
测试:
- 验证删除确认对话框
- 验证其他确认场景
完成时间: ___________ 遇到的问题: ___________
📋 阶段 4: 清理和优化 (预计 1-2 天)
4.1 移除旧代码
- 删除
src/lib/styles.ts - 从
src/lib/tauri-api.ts移除window.api绑定 - 精简
src/lib/tauri-api.ts,只保留事件监听相关 - 删除或更新
src/vite-env.d.ts中的过时类型
4.2 代码审查
- 检查所有 TODO 注释
- 检查是否还有
window.api调用 - 检查是否还有手动状态管理
- 统一代码风格
4.3 类型检查
- 运行
pnpm typecheck确保无错误 - 修复所有类型错误
- 更新类型定义
4.4 性能优化
- 检查是否有不必要的重渲染
- 添加必要的 React.memo
- 优化 Query 缓存配置
完成时间: ___________ 遇到的问题: ___________
📋 阶段 5: 测试和修复 (预计 2-3 天)
5.1 功能测试
供应商管理
- 添加供应商 (Claude)
- 添加供应商 (Codex)
- 编辑供应商
- 删除供应商
- 切换供应商
- 导入默认配置
应用切换
- Claude <-> Codex 切换
- 切换后数据正确加载
- 切换后托盘菜单更新
设置
- 保存通用设置
- 切换语言
- 配置目录选择
- 导入配置
- 导出配置
UI 交互
- 主题切换 (亮色/暗色)
- 对话框打开/关闭
- 表单验证
- Toast 通知
MCP 管理
- 列表显示
- 添加 MCP
- 编辑 MCP
- 删除 MCP
- 启用/禁用 MCP
5.2 边界情况测试
- 空供应商列表
- 无效配置文件
- 网络错误
- 后端错误响应
- 并发操作
- 表单输入边界值
5.3 兼容性测试
- Windows 测试
- macOS 测试
- Linux 测试
5.4 性能测试
- 100+ 供应商加载速度
- 快速切换供应商
- 内存使用情况
- CPU 使用情况
5.5 Bug 修复
Bug 列表 (发现后记录):
-
- 已修复
- 已验证
-
- 已修复
- 已验证
完成时间: ___________ 遇到的问题: ___________
📋 最终检查
代码质量
- 所有 TypeScript 错误已修复
- 运行
pnpm format格式化代码 - 运行
pnpm typecheck通过 - 代码审查完成
文档更新
- 更新
CLAUDE.md反映新架构 - 更新
README.md(如有必要) - 添加 Migration Guide (可选)
性能基准
记录性能数据:
旧版本:
- 启动时间: _____ms
- 供应商加载: _____ms
- 内存占用: _____MB
新版本:
- 启动时间: _____ms
- 供应商加载: _____ms
- 内存占用: _____MB
代码统计
代码行数对比:
| 文件 | 旧版本 | 新版本 | 减少 |
|---|---|---|---|
| App.tsx | 412 | ~100 | -76% |
| tauri-api.ts | 712 | ~50 | -93% |
| ProviderForm.tsx | 271 | ~150 | -45% |
| settings 模块 | 1046 | ~470 (拆分) | -55% |
| 总计 | 2038 | ~700 | -66% |
📦 发布准备
Pre-release 测试
- 创建 beta 版本
v4.0.0-beta.1 - 在测试环境验证
- 收集用户反馈
正式发布
- 合并到 main 分支
- 创建 Release Tag
v4.0.0 - 更新 Changelog
- 发布 GitHub Release
- 通知用户更新
🚨 回滚触发条件
如果出现以下情况,考虑回滚:
- 重大功能无法使用
- 用户数据丢失
- 严重性能问题
- 无法修复的兼容性问题
回滚命令:
git reset --hard backup-before-refactor
# 或
git revert <commit-range>
📝 总结报告
成功指标
- 所有现有功能正常工作
- 代码量减少 40%+
- 无用户数据丢失
- 性能未下降
经验教训
遇到的主要挑战:
解决方案:
未来改进:
重构完成日期: ___________ 总耗时: _____ 天 参与人员: ___________