@@ -133,7 +133,20 @@ export function useDragDrop() {
133133 [ ]
134134 )
135135
136- type SiblingItem = { type : 'folder' | 'workflow' ; id : string ; sortOrder : number }
136+ type SiblingItem = {
137+ type : 'folder' | 'workflow'
138+ id : string
139+ sortOrder : number
140+ createdAt : Date
141+ }
142+
143+ const compareSiblingItems = ( a : SiblingItem , b : SiblingItem ) : number => {
144+ if ( a . sortOrder !== b . sortOrder ) return a . sortOrder - b . sortOrder
145+ const timeA = a . createdAt . getTime ( )
146+ const timeB = b . createdAt . getTime ( )
147+ if ( timeA !== timeB ) return timeA - timeB
148+ return a . id . localeCompare ( b . id )
149+ }
137150
138151 const getDestinationFolderId = useCallback ( ( indicator : DropIndicator ) : string | null => {
139152 return indicator . position === 'inside'
@@ -202,11 +215,21 @@ export function useDragDrop() {
202215 return [
203216 ...Object . values ( currentFolders )
204217 . filter ( ( f ) => f . parentId === folderId )
205- . map ( ( f ) => ( { type : 'folder' as const , id : f . id , sortOrder : f . sortOrder } ) ) ,
218+ . map ( ( f ) => ( {
219+ type : 'folder' as const ,
220+ id : f . id ,
221+ sortOrder : f . sortOrder ,
222+ createdAt : f . createdAt ,
223+ } ) ) ,
206224 ...Object . values ( currentWorkflows )
207225 . filter ( ( w ) => w . folderId === folderId )
208- . map ( ( w ) => ( { type : 'workflow' as const , id : w . id , sortOrder : w . sortOrder } ) ) ,
209- ] . sort ( ( a , b ) => a . sortOrder - b . sortOrder )
226+ . map ( ( w ) => ( {
227+ type : 'workflow' as const ,
228+ id : w . id ,
229+ sortOrder : w . sortOrder ,
230+ createdAt : w . createdAt ,
231+ } ) ) ,
232+ ] . sort ( compareSiblingItems )
210233 } , [ ] )
211234
212235 const setNormalizedDropIndicator = useCallback (
@@ -299,8 +322,9 @@ export function useDragDrop() {
299322 type : 'workflow' as const ,
300323 id,
301324 sortOrder : currentWorkflows [ id ] ?. sortOrder ?? 0 ,
325+ createdAt : currentWorkflows [ id ] ?. createdAt ?? new Date ( ) ,
302326 } ) )
303- . sort ( ( a , b ) => a . sortOrder - b . sortOrder )
327+ . sort ( compareSiblingItems )
304328
305329 const insertAt = calculateInsertIndex ( remaining , indicator )
306330
@@ -369,7 +393,12 @@ export function useDragDrop() {
369393
370394 const newOrder : SiblingItem [ ] = [
371395 ...remaining . slice ( 0 , insertAt ) ,
372- { type : 'folder' , id : draggedFolderId , sortOrder : 0 } ,
396+ {
397+ type : 'folder' ,
398+ id : draggedFolderId ,
399+ sortOrder : 0 ,
400+ createdAt : draggedFolder ?. createdAt ?? new Date ( ) ,
401+ } ,
373402 ...remaining . slice ( insertAt ) ,
374403 ]
375404
0 commit comments