Browse Source

fix(33): preserve snapshot during AI workflow load

loadWorkflow was unconditionally calling clearSnapshot(), wiping the
snapshot that captureSnapshot() just saved. Add preserveSnapshot
option to loadWorkflow and pass it from the AI build workflow path
so the Revert AI Changes button actually appears.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
handoff-20260429-1057
shrimbly 5 months ago
parent
commit
1f7c0325a4
  1. 2
      src/components/WorkflowCanvas.tsx
  2. 10
      src/store/workflowStore.ts

2
src/components/WorkflowCanvas.tsx

@ -580,7 +580,7 @@ export function WorkflowCanvas() {
if (data.success && data.workflow) {
captureSnapshot(); // Capture BEFORE loading new workflow
await loadWorkflow(data.workflow);
await loadWorkflow(data.workflow, undefined, { preserveSnapshot: true });
setIsChatOpen(false);
showToast("Workflow generated successfully", "success");
} else {

10
src/store/workflowStore.ts

@ -127,7 +127,7 @@ interface WorkflowStore {
// Save/Load
saveWorkflow: (name?: string) => void;
loadWorkflow: (workflow: WorkflowFile, workflowPath?: string) => Promise<void>;
loadWorkflow: (workflow: WorkflowFile, workflowPath?: string, options?: { preserveSnapshot?: boolean }) => Promise<void>;
clearWorkflow: () => void;
// Helpers
@ -2442,7 +2442,7 @@ export const useWorkflowStore = create<WorkflowStore>((set, get) => ({
URL.revokeObjectURL(url);
},
loadWorkflow: async (workflow: WorkflowFile, workflowPath?: string) => {
loadWorkflow: async (workflow: WorkflowFile, workflowPath?: string, options?: { preserveSnapshot?: boolean }) => {
// Update nodeIdCounter to avoid ID collisions
const maxNodeId = workflow.nodes.reduce((max, node) => {
const match = node.id.match(/-(\d+)$/);
@ -2539,8 +2539,10 @@ export const useWorkflowStore = create<WorkflowStore>((set, get) => ({
viewedCommentNodeIds: new Set<string>(),
});
// Clear any snapshot when user manually loads a workflow
get().clearSnapshot();
// Clear snapshot unless explicitly preserving (e.g., AI workflow generation)
if (!options?.preserveSnapshot) {
get().clearSnapshot();
}
},
clearWorkflow: () => {

Loading…
Cancel
Save