diff --git a/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/ui/diff/GitLabMergeRequestDiffInlayComponentsFactory.kt b/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/ui/diff/GitLabMergeRequestDiffInlayComponentsFactory.kt index 51f2e32c7b36..47a8181792d9 100644 --- a/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/ui/diff/GitLabMergeRequestDiffInlayComponentsFactory.kt +++ b/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/mergerequest/ui/diff/GitLabMergeRequestDiffInlayComponentsFactory.kt @@ -7,8 +7,10 @@ import com.intellij.collaboration.ui.codereview.CodeReviewChatItemUIUtil import com.intellij.collaboration.ui.codereview.comment.CodeReviewCommentUIUtil import com.intellij.collaboration.ui.codereview.comment.CommentInputActionsComponentFactory import com.intellij.collaboration.ui.codereview.timeline.comment.CommentTextFieldFactory +import com.intellij.collaboration.ui.codereview.timeline.thread.CodeReviewTrackableItemViewModel import com.intellij.collaboration.ui.icon.IconsProvider import com.intellij.collaboration.ui.util.swingAction +import com.intellij.openapi.actionSystem.UiDataProvider import com.intellij.openapi.options.advanced.AdvancedSettings import com.intellij.openapi.project.Project import com.intellij.openapi.ui.MessageDialogBuilder.Companion.yesNo @@ -51,7 +53,7 @@ internal object GitLabMergeRequestDiffInlayComponentsFactory { GitLabDiscussionComponentFactory.create(project, cs, avatarIconsProvider, imageLoader, vm, place).apply { border = JBUI.Borders.empty(CodeReviewCommentUIUtil.getInlayPadding(CodeReviewChatItemUIUtil.ComponentType.COMPACT)) }.let { - wrapInRoundedPanel(it, vm) + wrapInRoundedTrackablePanel(it, vm) } fun createDraftNote( @@ -66,11 +68,13 @@ internal object GitLabMergeRequestDiffInlayComponentsFactory { imageLoader, vm, place).apply { border = JBUI.Borders.empty(CodeReviewCommentUIUtil.getInlayPadding(CodeReviewChatItemUIUtil.ComponentType.COMPACT)) }.let { - wrapInRoundedPanel(it, vm) + wrapInRoundedTrackablePanel(it, vm) } - private fun wrapInRoundedPanel(component: JComponent, vm: FocusableViewModel): JComponent = - CodeReviewCommentUIUtil.createEditorInlayPanel(component).apply { + private fun wrapInRoundedTrackablePanel(component: JComponent, vm: T): JComponent + where T : CodeReviewTrackableItemViewModel, + T : FocusableViewModel { + return CodeReviewCommentUIUtil.createEditorInlayPanel(component).apply { isFocusable = true launchOnShow("focusRequests") { vm.focusRequests.collect { requestFocus(false) } @@ -84,7 +88,12 @@ internal object GitLabMergeRequestDiffInlayComponentsFactory { else { roundedPanel } + }.let { + UiDataProvider.wrapComponent(it) { sink -> + sink[CodeReviewTrackableItemViewModel.TRACKABLE_ITEM_KEY] = vm + } } + } fun createNewDiscussion( project: Project, diff --git a/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/ui/comment/GitLabDiscussionComponentFactory.kt b/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/ui/comment/GitLabDiscussionComponentFactory.kt index 1f93455aa79a..a8505730cdad 100644 --- a/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/ui/comment/GitLabDiscussionComponentFactory.kt +++ b/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/ui/comment/GitLabDiscussionComponentFactory.kt @@ -17,7 +17,6 @@ import com.intellij.collaboration.ui.codereview.comment.CodeReviewCommentUIUtil import com.intellij.collaboration.ui.codereview.comment.CommentInputActionsComponentFactory import com.intellij.collaboration.ui.codereview.timeline.comment.CommentTextFieldFactory import com.intellij.collaboration.ui.codereview.timeline.thread.CodeReviewResolvableItemViewModel -import com.intellij.collaboration.ui.codereview.timeline.thread.CodeReviewTrackableItemViewModel import com.intellij.collaboration.ui.codereview.timeline.thread.TimelineThreadCommentsPanel import com.intellij.collaboration.ui.icon.IconsProvider import com.intellij.collaboration.ui.util.bindChildIn @@ -25,7 +24,6 @@ import com.intellij.collaboration.ui.util.bindEnabledIn import com.intellij.collaboration.ui.util.bindTextIn import com.intellij.collaboration.ui.util.bindVisibilityIn import com.intellij.collaboration.ui.util.swingAction -import com.intellij.openapi.actionSystem.UiDataProvider import com.intellij.openapi.project.Project import com.intellij.ui.components.ActionLink import com.intellij.util.ui.JBUI @@ -68,28 +66,25 @@ internal object GitLabDiscussionComponentFactory { } } - return UiDataProvider.wrapComponent( - VerticalListPanel().apply { - name = "GitLab Discussion Panel ${vm.id}" - add(notesPanel) + return VerticalListPanel().apply { + name = "GitLab Discussion Panel ${vm.id}" + add(notesPanel) - cs.launchNow { - vm.replyVm.collectScoped { replyVm -> - if (replyVm == null) return@collectScoped + cs.launchNow { + vm.replyVm.collectScoped { replyVm -> + if (replyVm == null) return@collectScoped - bindChildIn(this, replyVm.newNoteVm) { newNoteVm -> - newNoteVm?.let { - createReplyField(ComponentType.COMPACT, project, this, vm, newNoteVm, avatarIconsProvider, place, - swingAction("") { replyVm.stopWriting() }) - } ?: createReplyActionsPanel(vm, replyVm, project, place).apply { - border = JBUI.Borders.empty(8, ComponentType.COMPACT.fullLeftShift) - } + bindChildIn(this, replyVm.newNoteVm) { newNoteVm -> + newNoteVm?.let { + createReplyField(ComponentType.COMPACT, project, this, vm, newNoteVm, avatarIconsProvider, place, + swingAction("") { replyVm.stopWriting() }) + } ?: createReplyActionsPanel(vm, replyVm, project, place).apply { + border = JBUI.Borders.empty(8, ComponentType.COMPACT.fullLeftShift) } } } - }, { sink -> - sink[CodeReviewTrackableItemViewModel.TRACKABLE_ITEM_KEY] = vm - }) + } + } } fun createReplyField( diff --git a/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/ui/comment/GitLabNoteComponentFactory.kt b/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/ui/comment/GitLabNoteComponentFactory.kt index ba46ea9316f4..88d022d292ef 100644 --- a/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/ui/comment/GitLabNoteComponentFactory.kt +++ b/plugins/gitlab/gitlab-core/src/org/jetbrains/plugins/gitlab/ui/comment/GitLabNoteComponentFactory.kt @@ -12,13 +12,11 @@ import com.intellij.collaboration.ui.codereview.CodeReviewChatItemUIUtil import com.intellij.collaboration.ui.codereview.CodeReviewChatItemUIUtil.ComponentType import com.intellij.collaboration.ui.codereview.CodeReviewTimelineUIUtil import com.intellij.collaboration.ui.codereview.comment.CodeReviewCommentUIUtil -import com.intellij.collaboration.ui.codereview.timeline.thread.CodeReviewTrackableItemViewModel import com.intellij.collaboration.ui.html.AsyncHtmlImageLoader import com.intellij.collaboration.ui.icon.IconsProvider import com.intellij.collaboration.ui.util.bindChildIn import com.intellij.collaboration.ui.util.bindDisabledIn import com.intellij.collaboration.ui.util.bindTextIn -import com.intellij.openapi.actionSystem.UiDataProvider import com.intellij.openapi.project.Project import com.intellij.util.ui.InlineIconButton import icons.CollaborationToolsIcons @@ -66,14 +64,11 @@ internal object GitLabNoteComponentFactory { } val actionsPanel = createActions(cs, flowOf(vm), project, place) - return UiDataProvider.wrapComponent( - CodeReviewChatItemUIUtil.build(componentType, - { avatarIconsProvider.getIcon(vm.author, it) }, - contentPanel) { - withHeader(createTitle(cs, vm, project, place), actionsPanel) - }, { sink -> - sink[CodeReviewTrackableItemViewModel.TRACKABLE_ITEM_KEY] = vm - }) + return CodeReviewChatItemUIUtil.build(componentType, + { avatarIconsProvider.getIcon(vm.author, it) }, + contentPanel) { + withHeader(createTitle(cs, vm, project, place), actionsPanel) + } } @OptIn(ExperimentalCoroutinesApi::class)