@@ -7,7 +7,7 @@ import { createLogger } from '@/lib/logs/console/logger'
77import { getUserEntityPermissions } from '@/lib/permissions/utils'
88import { db } from '@/db'
99import { workflow , workflowBlocks , workflowEdges , workflowSubflows } from '@/db/schema'
10- import type { LoopConfig , ParallelConfig , WorkflowState } from '@/stores/workflows/workflow/types'
10+ import type { LoopConfig , ParallelConfig } from '@/stores/workflows/workflow/types'
1111
1212const logger = createLogger ( 'WorkflowDuplicateAPI' )
1313
@@ -90,7 +90,6 @@ export async function POST(req: NextRequest, { params }: { params: Promise<{ id:
9090 folderId : folderId || source . folderId ,
9191 name,
9292 description : description || source . description ,
93- state : source . state , // We'll update this later with new block IDs
9493 color : color || source . color ,
9594 lastSynced : now ,
9695 createdAt : now ,
@@ -112,9 +111,6 @@ export async function POST(req: NextRequest, { params }: { params: Promise<{ id:
112111 // Create a mapping from old block IDs to new block IDs
113112 const blockIdMapping = new Map < string , string > ( )
114113
115- // Initialize state for updating with new block IDs
116- let updatedState : WorkflowState = source . state as WorkflowState
117-
118114 if ( sourceBlocks . length > 0 ) {
119115 // First pass: Create all block ID mappings
120116 sourceBlocks . forEach ( ( block ) => {
@@ -265,86 +261,10 @@ export async function POST(req: NextRequest, { params }: { params: Promise<{ id:
265261 )
266262 }
267263
268- // Update the JSON state to use new block IDs
269- if ( updatedState && typeof updatedState === 'object' ) {
270- updatedState = JSON . parse ( JSON . stringify ( updatedState ) ) as WorkflowState
271-
272- // Update blocks object keys
273- if ( updatedState . blocks && typeof updatedState . blocks === 'object' ) {
274- const newBlocks = { } as Record < string , ( typeof updatedState . blocks ) [ string ] >
275- for ( const [ oldId , blockData ] of Object . entries ( updatedState . blocks ) ) {
276- const newId = blockIdMapping . get ( oldId ) || oldId
277- newBlocks [ newId ] = {
278- ...blockData ,
279- id : newId ,
280- // Update data.parentId and extent in the JSON state as well
281- data : ( ( ) => {
282- const block = blockData as any
283- if ( block . data && typeof block . data === 'object' && block . data . parentId ) {
284- return {
285- ...block . data ,
286- parentId : blockIdMapping . get ( block . data . parentId ) || block . data . parentId ,
287- extent : 'parent' , // Ensure extent is set for child blocks
288- }
289- }
290- return block . data
291- } ) ( ) ,
292- }
293- }
294- updatedState . blocks = newBlocks
295- }
296-
297- // Update edges array
298- if ( updatedState . edges && Array . isArray ( updatedState . edges ) ) {
299- updatedState . edges = updatedState . edges . map ( ( edge ) => ( {
300- ...edge ,
301- id : crypto . randomUUID ( ) ,
302- source : blockIdMapping . get ( edge . source ) || edge . source ,
303- target : blockIdMapping . get ( edge . target ) || edge . target ,
304- } ) )
305- }
306-
307- // Update loops and parallels if they exist
308- if ( updatedState . loops && typeof updatedState . loops === 'object' ) {
309- const newLoops = { } as Record < string , ( typeof updatedState . loops ) [ string ] >
310- for ( const [ oldId , loopData ] of Object . entries ( updatedState . loops ) ) {
311- const newId = blockIdMapping . get ( oldId ) || oldId
312- const loopConfig = loopData as any
313- newLoops [ newId ] = {
314- ...loopConfig ,
315- id : newId ,
316- // Update node references in loop config
317- nodes : loopConfig . nodes
318- ? loopConfig . nodes . map ( ( nodeId : string ) => blockIdMapping . get ( nodeId ) || nodeId )
319- : [ ] ,
320- }
321- }
322- updatedState . loops = newLoops
323- }
324-
325- if ( updatedState . parallels && typeof updatedState . parallels === 'object' ) {
326- const newParallels = { } as Record < string , ( typeof updatedState . parallels ) [ string ] >
327- for ( const [ oldId , parallelData ] of Object . entries ( updatedState . parallels ) ) {
328- const newId = blockIdMapping . get ( oldId ) || oldId
329- const parallelConfig = parallelData as any
330- newParallels [ newId ] = {
331- ...parallelConfig ,
332- id : newId ,
333- // Update node references in parallel config
334- nodes : parallelConfig . nodes
335- ? parallelConfig . nodes . map ( ( nodeId : string ) => blockIdMapping . get ( nodeId ) || nodeId )
336- : [ ] ,
337- }
338- }
339- updatedState . parallels = newParallels
340- }
341- }
342-
343- // Update the workflow state with the new block IDs
264+ // Update the workflow timestamp
344265 await tx
345266 . update ( workflow )
346267 . set ( {
347- state : updatedState ,
348268 updatedAt : now ,
349269 } )
350270 . where ( eq ( workflow . id , newWorkflowId ) )
0 commit comments