[collab] allow selecting multiple changes in code review

#IJPL-172164 Fixed


(cherry picked from commit 482089c478db5eeb9922564cd4ba695a7c40dccb)

IJ-CR-150590

GitOrigin-RevId: 086979f67b95ecb22ebdda770a8ebf238eb6c9b8
This commit is contained in:
Ivan Semenov
2024-11-22 12:14:03 +01:00
committed by intellij-monorepo-bot
parent 2f8a128221
commit 3cd8441d22

View File

@@ -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<RefComparisonChange>()
val selectedChanges = mutableListOf<RefComparisonChange>()
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)
}