(folderId)
| 588 | } |
| 589 | |
| 590 | function deleteFolder(folderId) { |
| 591 | if (folderId === TRASH_ID || folderId === UNSORTED_ID) return; |
| 592 | // Cascade: delete children first. |
| 593 | for (const child of folders.filter((f) => f.parentId === folderId)) deleteFolder(child.id); |
| 594 | const idx = folders.findIndex((f) => f.id === folderId); |
| 595 | if (idx === -1) return; |
| 596 | const [folder] = folders.splice(idx, 1); |
| 597 | const trash = getTrashFolder(); |
| 598 | for (const trackId of folder.items) { |
| 599 | if (tracks[trackId] && trash && !trash.items.includes(trackId)) { |
| 600 | trash.items.unshift(trackId); |
| 601 | } |
| 602 | } |
| 603 | saveState(); |
| 604 | render(); |
| 605 | } |
| 606 | |
| 607 | function reorderFolder(draggedId, targetId, before) { |
| 608 | if (draggedId === targetId) return; |
no test coverage detected