diff --git a/apps/sim/app/api/workflows/[id]/state/route.ts b/apps/sim/app/api/workflows/[id]/state/route.ts index 7c8879430e..0c977a56c0 100644 --- a/apps/sim/app/api/workflows/[id]/state/route.ts +++ b/apps/sim/app/api/workflows/[id]/state/route.ts @@ -33,6 +33,7 @@ const BlockDataSchema = z.object({ doWhileCondition: z.string().optional(), parallelType: z.enum(['collection', 'count']).optional(), type: z.string().optional(), + canonicalModes: z.record(z.enum(['basic', 'advanced'])).optional(), }) const SubBlockStateSchema = z.object({ diff --git a/apps/sim/hooks/use-collaborative-workflow.ts b/apps/sim/hooks/use-collaborative-workflow.ts index 28940428f7..32ccf3147f 100644 --- a/apps/sim/hooks/use-collaborative-workflow.ts +++ b/apps/sim/hooks/use-collaborative-workflow.ts @@ -897,6 +897,17 @@ export function useCollaborativeWorkflow() { // Collect all edge IDs to remove const edgeIdsToRemove = updates.flatMap((u) => u.affectedEdges.map((e) => e.id)) if (edgeIdsToRemove.length > 0) { + const edgeOperationId = crypto.randomUUID() + addToQueue({ + id: edgeOperationId, + operation: { + operation: EDGES_OPERATIONS.BATCH_REMOVE_EDGES, + target: OPERATION_TARGETS.EDGES, + payload: { ids: edgeIdsToRemove }, + }, + workflowId: activeWorkflowId || '', + userId: session?.user?.id || 'unknown', + }) useWorkflowStore.getState().batchRemoveEdges(edgeIdsToRemove) } diff --git a/apps/sim/socket/database/operations.ts b/apps/sim/socket/database/operations.ts index 5fa69f8d98..991eac1a09 100644 --- a/apps/sim/socket/database/operations.ts +++ b/apps/sim/socket/database/operations.ts @@ -337,10 +337,11 @@ async function handleBlockOperationTx( const currentData = currentBlock?.data || {} // Update data with parentId and extent + const { parentId: _removedParentId, extent: _removedExtent, ...restData } = currentData const updatedData = isRemovingFromParent - ? {} // Clear data entirely when removing from parent + ? restData : { - ...currentData, + ...restData, ...(payload.parentId ? { parentId: payload.parentId } : {}), ...(payload.extent ? { extent: payload.extent } : {}), } @@ -828,10 +829,11 @@ async function handleBlocksOperationTx( const currentData = currentBlock?.data || {} + const { parentId: _removedParentId, extent: _removedExtent, ...restData } = currentData const updatedData = isRemovingFromParent - ? {} + ? restData : { - ...currentData, + ...restData, ...(parentId ? { parentId, extent: 'parent' } : {}), }