fix: strict tab canvas isolation
- New tabs explicitly have showCanvas: false and previewData: null - Tab sync uses strict boolean check (showCanvas === true) - Default tab fallback includes canvas defaults - Switching to new tab now properly hides canvas from previous tab - Each tab's preview is completely independent
This commit is contained in:
@@ -425,7 +425,14 @@ export default function AIAssist() {
|
|||||||
} = useStore();
|
} = useStore();
|
||||||
const t = translations[language].aiAssist;
|
const t = translations[language].aiAssist;
|
||||||
|
|
||||||
const activeTab = aiAssistTabs?.find(t => t.id === activeTabId) || aiAssistTabs?.[0] || { id: 'default', title: 'New Chat', history: [], currentAgent: 'general' };
|
const activeTab = aiAssistTabs?.find(t => t.id === activeTabId) || aiAssistTabs?.[0] || {
|
||||||
|
id: 'default',
|
||||||
|
title: 'New Chat',
|
||||||
|
history: [],
|
||||||
|
currentAgent: 'general',
|
||||||
|
previewData: null,
|
||||||
|
showCanvas: false
|
||||||
|
};
|
||||||
const aiAssistHistory = activeTab?.history || [];
|
const aiAssistHistory = activeTab?.history || [];
|
||||||
|
|
||||||
const [input, setInput] = useState("");
|
const [input, setInput] = useState("");
|
||||||
@@ -433,7 +440,7 @@ export default function AIAssist() {
|
|||||||
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);
|
||||||
const [availableModels, setAvailableModels] = useState<string[]>([]);
|
const [availableModels, setAvailableModels] = useState<string[]>([]);
|
||||||
const [showCanvas, setShowCanvas] = useState(activeTab?.showCanvas ?? !!activeTab?.previewData);
|
const [showCanvas, setShowCanvas] = useState(activeTab?.showCanvas === true);
|
||||||
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);
|
||||||
|
|
||||||
@@ -443,16 +450,18 @@ export default function AIAssist() {
|
|||||||
|
|
||||||
// Sync local state when tab changes - FULL ISOLATION
|
// Sync local state when tab changes - FULL ISOLATION
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (activeTab) {
|
// Explicitly reset ALL canvas-related state based on the tab's data
|
||||||
setCurrentAgent(activeTab.currentAgent || "general");
|
const tabPreview = activeTab?.previewData || null;
|
||||||
setPreviewData(activeTab.previewData || null);
|
const tabShowCanvas = activeTab?.showCanvas === true; // Strict check
|
||||||
setShowCanvas(activeTab.showCanvas ?? !!activeTab.previewData);
|
|
||||||
setViewMode("preview");
|
setCurrentAgent(activeTab?.currentAgent || "general");
|
||||||
setAssistStep("idle");
|
setPreviewData(tabPreview);
|
||||||
setAiPlan(null);
|
setShowCanvas(tabShowCanvas);
|
||||||
setInput("");
|
setViewMode("preview");
|
||||||
setIsProcessing(false);
|
setAssistStep("idle");
|
||||||
}
|
setAiPlan(null);
|
||||||
|
setInput("");
|
||||||
|
setIsProcessing(false);
|
||||||
}, [activeTabId]);
|
}, [activeTabId]);
|
||||||
|
|
||||||
const [status, setStatus] = useState<string | null>(null);
|
const [status, setStatus] = useState<string | null>(null);
|
||||||
|
|||||||
@@ -128,7 +128,9 @@ const useStore = create<AppState>((set) => ({
|
|||||||
id: newId,
|
id: newId,
|
||||||
title: `Chat ${state.aiAssistTabs.length + 1}`,
|
title: `Chat ${state.aiAssistTabs.length + 1}`,
|
||||||
history: [],
|
history: [],
|
||||||
currentAgent: agent
|
currentAgent: agent,
|
||||||
|
previewData: null,
|
||||||
|
showCanvas: false
|
||||||
};
|
};
|
||||||
return {
|
return {
|
||||||
aiAssistTabs: [...state.aiAssistTabs, newTab],
|
aiAssistTabs: [...state.aiAssistTabs, newTab],
|
||||||
|
|||||||
Reference in New Issue
Block a user