From 81c296b0e6eb16458d19de363c2aaaa181a2c9d0 Mon Sep 17 00:00:00 2001
From: shamoon <4887959+shamoon@users.noreply.github.com>
Date: Sun, 2 Aug 2026 16:50:18 -0700
Subject: [PATCH] Dont show root in the list (and remove it from the sortable
list)
---
.../merge-confirm-dialog.component.html | 4 +--
.../merge-confirm-dialog.component.spec.ts | 14 ++++++++
.../merge-confirm-dialog.component.ts | 32 ++++++++++++++++---
3 files changed, 44 insertions(+), 6 deletions(-)
diff --git a/src-ui/src/app/components/common/confirm-dialog/merge-confirm-dialog/merge-confirm-dialog.component.html b/src-ui/src/app/components/common/confirm-dialog/merge-confirm-dialog/merge-confirm-dialog.component.html
index 6beb5a9b2..53e50144c 100644
--- a/src-ui/src/app/components/common/confirm-dialog/merge-confirm-dialog/merge-confirm-dialog.component.html
+++ b/src-ui/src/app/components/common/confirm-dialog/merge-confirm-dialog/merge-confirm-dialog.component.html
@@ -9,9 +9,9 @@
- @for (documentID of documentIDs(); track documentID) {
+ @for (documentID of draggableDocumentIDs(); track documentID) {
@let document = getDocument(documentID);
@if (document) {
-
diff --git a/src-ui/src/app/components/common/confirm-dialog/merge-confirm-dialog/merge-confirm-dialog.component.spec.ts b/src-ui/src/app/components/common/confirm-dialog/merge-confirm-dialog/merge-confirm-dialog.component.spec.ts
index e9b99763a..555151c8a 100644
--- a/src-ui/src/app/components/common/confirm-dialog/merge-confirm-dialog/merge-confirm-dialog.component.spec.ts
+++ b/src-ui/src/app/components/common/confirm-dialog/merge-confirm-dialog/merge-confirm-dialog.component.spec.ts
@@ -66,6 +66,20 @@ describe('MergeConfirmDialogComponent', () => {
expect(component.documentIDs()).toEqual([1, 3, 2])
})
+ it('should move draggable documents while keeping the root fixed', () => {
+ component.documentIDs.set([1, 2, 3])
+ component.rootDocumentID.set(1)
+ const event = {
+ previousIndex: 1,
+ currentIndex: 0,
+ }
+
+ component.onDrop(event as any)
+
+ expect(component.documentIDs()).toEqual([1, 3, 2])
+ expect(component.draggableDocumentIDs()).toEqual([3, 2])
+ })
+
it('should get document by ID', () => {
const documents = [
{ id: 1, name: 'Document 1' },
diff --git a/src-ui/src/app/components/common/confirm-dialog/merge-confirm-dialog/merge-confirm-dialog.component.ts b/src-ui/src/app/components/common/confirm-dialog/merge-confirm-dialog/merge-confirm-dialog.component.ts
index 18f5dbad2..fb2ae7464 100644
--- a/src-ui/src/app/components/common/confirm-dialog/merge-confirm-dialog/merge-confirm-dialog.component.ts
+++ b/src-ui/src/app/components/common/confirm-dialog/merge-confirm-dialog/merge-confirm-dialog.component.ts
@@ -4,7 +4,14 @@ import {
moveItemInArray,
} from '@angular/cdk/drag-drop'
import { AsyncPipe } from '@angular/common'
-import { Component, Input, OnInit, inject, signal } from '@angular/core'
+import {
+ Component,
+ Input,
+ OnInit,
+ computed,
+ inject,
+ signal,
+} from '@angular/core'
import { FormsModule, ReactiveFormsModule } from '@angular/forms'
import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons'
import { takeUntil } from 'rxjs'
@@ -42,6 +49,11 @@ export class MergeConfirmDialogComponent
readonly documents = signal([])
readonly metadataDocumentID = signal(-1)
readonly rootDocumentID = signal(-1)
+ readonly draggableDocumentIDs = computed(() =>
+ this.documentIDs().filter(
+ (documentID) => documentID !== this.rootDocumentID()
+ )
+ )
@Input()
mergeAsVersions = false
@@ -60,9 +72,21 @@ export class MergeConfirmDialogComponent
}
onDrop(event: CdkDragDrop) {
- const documentIDs = this.documentIDs().concat()
- moveItemInArray(documentIDs, event.previousIndex, event.currentIndex)
- this.documentIDs.set(documentIDs)
+ const draggableDocumentIDs = this.draggableDocumentIDs().concat()
+ moveItemInArray(
+ draggableDocumentIDs,
+ event.previousIndex,
+ event.currentIndex
+ )
+
+ let draggableIndex = 0
+ this.documentIDs.update((documentIDs) =>
+ documentIDs.map((documentID) =>
+ documentID === this.rootDocumentID()
+ ? documentID
+ : draggableDocumentIDs[draggableIndex++]
+ )
+ )
}
getDocument(documentID: number): Document {