2025-03-02 22:20:47 +00:00
import { FolderEntity } from '../../services/database/types' ;
2025-04-29 14:53:25 +02:00
import { getTrashFolderId } from '../../services/trash' ;
2025-03-02 22:20:47 +00:00
import Folder , { FolderEntityWithChildren } from '../Folder' ;
export default ( folders : FolderEntity [ ] ) = > {
const tree = Folder . buildTree ( folders ) ;
const canBeCollapsedIds : string [ ] = [ ] ;
const processTree = ( folders : FolderEntityWithChildren [ ] ) = > {
for ( const folder of folders ) {
if ( folder . children . length ) {
canBeCollapsedIds . push ( folder . id ) ;
processTree ( folder . children ) ;
}
}
} ;
processTree ( tree ) ;
2025-04-29 14:53:25 +02:00
// Logic to determine whether trash should be included in canBeCollapsedIds
// Loops over all folders recursively in case in the future a deleted folder remains child of a not deleted folder (and hence there is no deleted folder in 'tree').
const isTrashCollapsable = ( folders : FolderEntityWithChildren [ ] ) = > {
for ( const folder of folders ) {
if ( folder . deleted_time ) {
canBeCollapsedIds . push ( getTrashFolderId ( ) ) ;
return ;
}
if ( folder . children . length ) {
isTrashCollapsable ( folder . children ) ;
}
}
} ;
// Future proofing: if TrashFolder is already in canBeCollapsedIds do not add it again.
if ( ! ( getTrashFolderId ( ) in canBeCollapsedIds ) ) {
isTrashCollapsable ( tree ) ;
}
2025-03-02 22:20:47 +00:00
return canBeCollapsedIds ;
} ;