Skip to content

Commit 90a6050

Browse files
committed
fix(files): apply activeSort to folders, reject drop onto current parent folder
- visibleFolders now respects activeSort column (name/updated/created) and direction so folder ordering stays consistent with file ordering - isInvalidDropTarget now returns true when all dragged items are already direct children of the target folder, preventing a no-op move mutation
1 parent 56fc9b8 commit 90a6050

1 file changed

Lines changed: 24 additions & 2 deletions

File tree

  • apps/sim/app/workspace/[workspaceId]/files

apps/sim/app/workspace/[workspaceId]/files/files.tsx

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -308,8 +308,20 @@ export function Files() {
308308
folder.name.toLowerCase().includes(debouncedSearchTerm.toLowerCase())
309309
)
310310
: siblings
311-
return [...searched].sort((a, b) => a.name.localeCompare(b.name))
312-
}, [folders, currentFolderId, debouncedSearchTerm])
311+
const col = activeSort?.column ?? 'name'
312+
const dir = activeSort?.direction ?? 'asc'
313+
return [...searched].sort((a, b) => {
314+
let cmp = 0
315+
if (col === 'updated') {
316+
cmp = new Date(a.updatedAt).getTime() - new Date(b.updatedAt).getTime()
317+
} else if (col === 'created') {
318+
cmp = new Date(a.createdAt).getTime() - new Date(b.createdAt).getTime()
319+
} else {
320+
cmp = a.name.localeCompare(b.name)
321+
}
322+
return dir === 'asc' ? cmp : -cmp
323+
})
324+
}, [folders, currentFolderId, debouncedSearchTerm, activeSort])
313325

314326
const filteredFiles = useMemo(() => {
315327
let result = debouncedSearchTerm
@@ -599,6 +611,16 @@ export function Files() {
599611
if (descendantFolderIdsByFolderId.get(source.id)?.has(target.id)) return true
600612
}
601613

614+
// Reject drop if every dragged item is already a direct child of the target
615+
const allAlreadyInTarget = sourceRowIds.every((sourceRowId) => {
616+
const source = parseRowId(sourceRowId)
617+
if (source.kind === 'file') {
618+
return filesRef.current.find((f) => f.id === source.id)?.folderId === target.id
619+
}
620+
return (foldersRef.current.find((f) => f.id === source.id)?.parentId ?? null) === target.id
621+
})
622+
if (allAlreadyInTarget) return true
623+
602624
return false
603625
},
604626
[descendantFolderIdsByFolderId]

0 commit comments

Comments
 (0)