fix: complete tab isolation in AI Assist

- Fixed bug where new tabs were showing content from previous tabs
- Reset ALL local state when switching tabs:
  - currentAgent, previewData, showCanvas, viewMode
  - assistStep, aiPlan, input, isProcessing
- Each tab now operates in complete isolation
- Tab state properly syncs from store on switch
This commit is contained in:
Gemini AI
2025-12-29 03:08:06 +04:00
Unverified
parent 3a2a07e4a6
commit 0e1bdb0c06

View File

@@ -431,16 +431,8 @@ export default function AIAssist() {
const [isProcessing, setIsProcessing] = useState(false); const [isProcessing, setIsProcessing] = useState(false);
const [currentAgent, setCurrentAgent] = useState(activeTab?.currentAgent || "general"); const [currentAgent, setCurrentAgent] = useState(activeTab?.currentAgent || "general");
const [previewData, setPreviewData] = useState<PreviewData | null>(activeTab?.previewData || null); const [previewData, setPreviewData] = useState<PreviewData | null>(activeTab?.previewData || null);
// Sync local state when tab changes
useEffect(() => {
if (activeTab) {
setCurrentAgent(activeTab.currentAgent || "general");
setPreviewData(activeTab.previewData || null);
}
}, [activeTabId, activeTab]);
const [availableModels, setAvailableModels] = useState<string[]>([]); const [availableModels, setAvailableModels] = useState<string[]>([]);
const [showCanvas, setShowCanvas] = useState(false); const [showCanvas, setShowCanvas] = useState(!!activeTab?.previewData);
const [viewMode, setViewMode] = useState<"preview" | "code">("preview"); const [viewMode, setViewMode] = useState<"preview" | "code">("preview");
const [abortController, setAbortController] = useState<AbortController | null>(null); const [abortController, setAbortController] = useState<AbortController | null>(null);
@@ -448,6 +440,20 @@ export default function AIAssist() {
const [assistStep, setAssistStep] = useState<"idle" | "plan" | "generating" | "preview">("idle"); const [assistStep, setAssistStep] = useState<"idle" | "plan" | "generating" | "preview">("idle");
const [aiPlan, setAiPlan] = useState<any>(null); const [aiPlan, setAiPlan] = useState<any>(null);
// Sync local state when tab changes - FULL ISOLATION
useEffect(() => {
if (activeTab) {
setCurrentAgent(activeTab.currentAgent || "general");
setPreviewData(activeTab.previewData || null);
setShowCanvas(!!activeTab.previewData);
setViewMode("preview");
setAssistStep("idle");
setAiPlan(null);
setInput("");
setIsProcessing(false);
}
}, [activeTabId]);
const [status, setStatus] = useState<string | null>(null); const [status, setStatus] = useState<string | null>(null);
const scrollRef = useRef<HTMLDivElement>(null); const scrollRef = useRef<HTMLDivElement>(null);