4.4 KiB
4.4 KiB
Modal Reset Fix Report
問題描述 (Problem Description)
用戶報告了一個問題:在編輯 AI 應用後,點擊「新增 AI 應用」按鈕時,模態視窗會保留之前編輯的應用數據,而不是顯示乾淨的表單。這導致用戶在嘗試創建新應用時看到舊的數據。
根本原因 (Root Cause)
- 共享狀態: 新增和編輯 AI 應用的模態視窗都使用同一個
newApp
狀態 - 缺少重置機制: 當點擊「新增 AI 應用」按鈕時,只設置
setShowAddApp(true)
但沒有重置newApp
狀態 - 狀態污染:
handleEditApp
函數會將編輯的應用數據填充到newApp
狀態中,但沒有在新增操作時清理
受影響的區域 (Affected Areas)
components/admin/app-management.tsx
newApp
狀態管理- 「新增 AI 應用」按鈕點擊處理
- 模態視窗開啟/關閉處理
解決方案 (Solution)
1. 新增重置函數
創建了 resetNewApp
函數來重置表單狀態到初始值:
// 重置 newApp 狀態到初始值
const resetNewApp = () => {
setNewApp({
name: "",
type: "文字處理",
department: "HQBU",
creator: "",
description: "",
appUrl: "",
icon: "Bot",
iconColor: "from-blue-500 to-purple-500",
})
}
2. 修改「新增 AI 應用」按鈕點擊處理
在點擊「新增 AI 應用」按鈕時調用重置函數:
<Button
onClick={() => {
resetNewApp() // 重置表單數據
setShowAddApp(true)
}}
className="bg-gradient-to-r from-blue-600 to-purple-600 hover:from-blue-700 hover:to-purple-700"
>
3. 增強模態視窗關閉處理
在模態視窗關閉時也重置表單,確保下次開啟時是乾淨的:
<Dialog open={showAddApp} onOpenChange={(open) => {
setShowAddApp(open)
if (!open) {
resetNewApp() // 當對話框關閉時也重置表單
}
}}>
數據結構處理 (Data Structure Handling)
初始狀態結構
const initialNewAppState = {
name: "",
type: "文字處理",
department: "HQBU",
creator: "",
description: "",
appUrl: "",
icon: "Bot",
iconColor: "from-blue-500 to-purple-500",
}
重置邏輯
- 所有字段都重置為初始值
- 確保表單狀態的一致性
- 防止數據污染
測試方法與結果 (Testing Methodology and Results)
測試腳本
創建了 scripts/test-modal-reset-fix.js
來驗證修復:
- 測試場景 1: 編輯應用後點擊新增
- 測試場景 2: 多次編輯後點擊新增
- 測試場景 3: 重置函數驗證
測試結果
✅ 所有測試通過
✅ 表單正確重置到初始值
✅ 沒有數據污染
✅ 重置函數工作正常
影響分析 (Impact Analysis)
修復的問題
- ✅ 新增 AI 應用模態視窗不再保留舊數據
- ✅ 表單狀態正確重置
- ✅ 用戶體驗改善
維持的功能
- ✅ 編輯功能正常工作
- ✅ 模態視窗開啟/關閉正常
- ✅ 表單驗證不受影響
- ✅ 數據提交功能正常
預防措施 (Prevention Measures)
- 狀態管理最佳實踐: 在共享狀態的組件中,確保狀態重置機制
- 模態視窗設計: 考慮為新增和編輯使用不同的狀態或確保適當的重置
- 測試覆蓋: 添加自動化測試來驗證模態視窗狀態管理
修改的文件 (Files Modified)
components/admin/app-management.tsx
- 新增:
resetNewApp
函數 (lines 108-120) - 修改: 「新增 AI 應用」按鈕點擊處理 (lines 667-671)
- 修改: 模態視窗
onOpenChange
處理 (lines 998-1003)
scripts/test-modal-reset-fix.js
- 新增: 測試腳本來驗證修復效果
驗證步驟 (Verification Steps)
-
手動測試:
- 編輯一個 AI 應用
- 點擊「新增 AI 應用」按鈕
- 確認表單是空的,沒有舊數據
-
自動化測試:
- 運行
node scripts/test-modal-reset-fix.js
- 確認所有測試通過
- 運行
-
功能測試:
- 測試新增功能正常工作
- 測試編輯功能正常工作
- 確認沒有副作用
總結 (Summary)
成功修復了「新增 AI 應用」模態視窗保留舊數據的問題。通過添加 resetNewApp
函數和在適當的時機調用它,確保了表單狀態的正確管理。這個修復改善了用戶體驗,確保了數據的一致性,並遵循了 React 狀態管理的最佳實踐。
修復是向後兼容的,不會影響現有功能,並且包含了完整的測試驗證。