diff --git a/website/src/lib/components/file-list/FileList.ts b/website/src/lib/components/file-list/FileList.ts index 5c18a6e7..53004fd7 100644 --- a/website/src/lib/components/file-list/FileList.ts +++ b/website/src/lib/components/file-list/FileList.ts @@ -259,21 +259,6 @@ export function moveItems(fromParent: ListItem, toParent: ListItem, fromItems: L sortItems(fromItems, true); sortItems(toItems, false); - let toFileObserver = get(fileObservers).get(toParent.getFileId()); - let first = true; - toFileObserver?.subscribe(() => { // Update selection when the target file has been updated - if (first) first = false; - else { - selection.update(($selection) => { - $selection.clear(); - toItems.forEach((item) => { - $selection.set(item, true); - }); - return $selection; - }); - } - }); - dbUtils.applyEachToFilesAndGlobal([fromParent.getFileId(), toParent.getFileId()], [ (file, context: (Track | TrackSegment | Waypoint[] | Waypoint)[]) => { let newFile = file; @@ -352,4 +337,12 @@ export function moveItems(fromParent: ListItem, toParent: ListItem, fromItems: L } }); }, []); + + selection.update(($selection) => { + $selection.clear(); + toItems.forEach((item) => { + $selection.set(item, true); + }); + return $selection; + }); } diff --git a/website/src/lib/components/file-list/FileListNodeContent.svelte b/website/src/lib/components/file-list/FileListNodeContent.svelte index d3a134bf..0e6ca6d4 100644 --- a/website/src/lib/components/file-list/FileListNodeContent.svelte +++ b/website/src/lib/components/file-list/FileListNodeContent.svelte @@ -174,7 +174,10 @@ if (toItem instanceof ListRootItem) { let newFileIds = getFileIds(newIndices.length); - toItems = newIndices.map((_i, index) => item.extend(newFileIds[index])); + toItems = newIndices.map((i, index) => { + $fileOrder.splice(i, 0, newFileIds[index]); + return item.extend(newFileIds[index]); + }); } else { toItems = newIndices.map((i) => toItem.extend(i)); } @@ -201,11 +204,15 @@ afterUpdate(() => { elements = {}; - container.childNodes.forEach((node) => { - if (node instanceof HTMLElement) { - let attr = node.getAttribute('data-id'); + container.childNodes.forEach((element) => { + if (element instanceof HTMLElement) { + let attr = element.getAttribute('data-id'); if (attr) { - elements[attr] = node; + if (node instanceof Map && !node.has(attr)) { + element.remove(); + } else { + elements[attr] = element; + } } } }); @@ -241,7 +248,7 @@ bind:this={container} class="sortable {orientation} flex {orientation === 'vertical' ? 'flex-col' - : 'flex-row gap-1'} {canDrop ? 'p-b-5' : ''}" + : 'flex-row gap-1'} {canDrop ? 'min-h-5' : ''}" > {#if node instanceof Map} {#each node as [fileId, file] (fileId)}