From 8f5049601b24a77cd5fe53edb13fd1d7e39bbb8c Mon Sep 17 00:00:00 2001 From: Ivan Semenov Date: Fri, 22 Nov 2024 12:14:03 +0100 Subject: [PATCH] [collab] allow selecting multiple changes in code review #IJPL-172164 Fixed GitOrigin-RevId: 482089c478db5eeb9922564cd4ba695a7c40dccb --- .../CodeReviewChangeListComponentFactory.kt | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/platform/collaboration-tools/src/com/intellij/collaboration/ui/codereview/changes/CodeReviewChangeListComponentFactory.kt b/platform/collaboration-tools/src/com/intellij/collaboration/ui/codereview/changes/CodeReviewChangeListComponentFactory.kt index 0367678282c4..ebe74e8e23c9 100644 --- a/platform/collaboration-tools/src/com/intellij/collaboration/ui/codereview/changes/CodeReviewChangeListComponentFactory.kt +++ b/platform/collaboration-tools/src/com/intellij/collaboration/ui/codereview/changes/CodeReviewChangeListComponentFactory.kt @@ -88,7 +88,10 @@ object CodeReviewChangeListComponentFactory { } is CodeReviewChangeListViewModel.SelectionRequest.OneChange -> { invokeAfterRefresh { - setSelectedChanges(listOf(request.change)) + val currentSelection = selected(this).iterateUserObjects(RefComparisonChange::class.java) + if (request.change !in currentSelection) { + setSelectedChanges(listOf(request.change)) + } addTreeSelectionListener(selectionListener) } } @@ -151,22 +154,21 @@ private class Node(change: RefComparisonChange) : AbstractChangesBrowserFilePath private fun CodeReviewChangeListViewModel.updateSelectedChangesFromTree(tree: AsyncChangesTree) { var fuzzy = false - val changes = mutableListOf() + val selectedChanges = mutableListOf() selected(tree).iterateRawNodes().forEach { if (it.isLeaf) { val change = it.userObject as? RefComparisonChange - changes.add(change!!) + selectedChanges.add(change!!) } else { fuzzy = true } } - val selection = if (changes.isEmpty()) null - else if (fuzzy) { - ChangesSelection.Fuzzy(changes) - } - else { - ChangesSelection.Precise(this.changes, changes[0]) + val selection = when { + selectedChanges.isEmpty() -> null + fuzzy -> ChangesSelection.Fuzzy(selectedChanges) + selectedChanges.size == 1 -> ChangesSelection.Precise(changes, selectedChanges[0]) + else -> ChangesSelection.Precise(selectedChanges, selectedChanges[0]) } updateSelectedChanges(selection) } \ No newline at end of file