mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-08 06:39:38 +07:00
[ghai] Use proper UI data provider wrapper
(cherry picked from commit 84f39b4ab5a0a94d411a519468ce5f44a888853a) (cherry picked from commit d67059121f3d6f7065707de5d53d203ca970c0e6) IJ-CR-148445 GitOrigin-RevId: cd72a3abff327652fed2a1ff01cd506a3b1c6dc6
This commit is contained in:
committed by
intellij-monorepo-bot
parent
df57020a83
commit
3da80a4578
@@ -2,6 +2,7 @@
|
||||
package org.jetbrains.plugins.github.pullrequest.ui.details
|
||||
|
||||
import com.intellij.collaboration.messages.CollaborationToolsBundle
|
||||
import com.intellij.collaboration.ui.HorizontalListPanel
|
||||
import com.intellij.collaboration.ui.VerticalListPanel
|
||||
import com.intellij.collaboration.ui.codereview.avatar.CodeReviewAvatarUtils
|
||||
import com.intellij.collaboration.ui.codereview.details.CodeReviewDetailsStatusComponentFactory
|
||||
@@ -10,16 +11,14 @@ import com.intellij.collaboration.ui.util.bindContentIn
|
||||
import com.intellij.collaboration.ui.util.bindTextIn
|
||||
import com.intellij.collaboration.ui.util.toAnAction
|
||||
import com.intellij.icons.AllIcons
|
||||
import com.intellij.openapi.actionSystem.ActionManager
|
||||
import com.intellij.openapi.actionSystem.AnAction
|
||||
import com.intellij.openapi.actionSystem.AnActionEvent
|
||||
import com.intellij.openapi.actionSystem.DefaultActionGroup
|
||||
import com.intellij.openapi.actionSystem.*
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.platform.util.coroutines.childScope
|
||||
import com.intellij.ui.ExperimentalUI
|
||||
import com.intellij.ui.ScrollPaneFactory
|
||||
import com.intellij.ui.components.ActionLink
|
||||
import com.intellij.ui.components.AnActionLink
|
||||
import com.intellij.ui.components.panels.Wrapper
|
||||
import com.intellij.util.ui.EmptyIcon
|
||||
import com.intellij.util.ui.JBUI
|
||||
import git4idea.remote.hosting.ui.ResolveConflictsLocallyDialogComponentFactory.showBranchUpdateDialog
|
||||
import git4idea.remote.hosting.ui.ResolveConflictsLocallyViewModel
|
||||
@@ -29,6 +28,7 @@ import kotlinx.coroutines.flow.map
|
||||
import kotlinx.coroutines.withContext
|
||||
import org.jetbrains.plugins.github.api.data.GHRepositoryPermissionLevel
|
||||
import org.jetbrains.plugins.github.i18n.GithubBundle
|
||||
import org.jetbrains.plugins.github.pullrequest.action.GHPRActionKeys
|
||||
import org.jetbrains.plugins.github.pullrequest.data.service.GHPRSecurityService
|
||||
import org.jetbrains.plugins.github.pullrequest.ui.details.action.GHPRRemoveReviewerAction
|
||||
import org.jetbrains.plugins.github.pullrequest.ui.details.model.GHPRResolveConflictsLocallyError
|
||||
@@ -37,6 +37,7 @@ import org.jetbrains.plugins.github.pullrequest.ui.details.model.GHPRStatusViewM
|
||||
import org.jetbrains.plugins.github.pullrequest.ui.details.model.impl.GHPRDetailsViewModel
|
||||
import java.awt.event.ActionListener
|
||||
import javax.swing.JComponent
|
||||
import javax.swing.JLabel
|
||||
import javax.swing.JScrollPane
|
||||
|
||||
internal object GHPRStatusChecksComponentFactory {
|
||||
@@ -83,8 +84,7 @@ internal object GHPRStatusChecksComponentFactory {
|
||||
)
|
||||
}
|
||||
))
|
||||
actionManager.createActionToolbar("Github.PullRequest.StatusChecks.Actions", DefaultActionGroup(additionalActions), true)
|
||||
additionalActions.forEach { add(createActionLabel(it, detailsVm)) }
|
||||
add(createAdditionalActionsPanel(additionalActions, detailsVm))
|
||||
}
|
||||
val scrollableStatusesPanel = ScrollPaneFactory.createScrollPane(statusesPanel, true).apply {
|
||||
isOpaque = false
|
||||
@@ -178,17 +178,24 @@ internal object GHPRStatusChecksComponentFactory {
|
||||
}
|
||||
}
|
||||
|
||||
private fun createActionLabel(action: AnAction, detailsVm: GHPRDetailsViewModel): JComponent {
|
||||
val dataContext = detailsVm.getActionDataContext()
|
||||
private fun createAdditionalActionsPanel(actions: List<AnAction>, detailsVm: GHPRDetailsViewModel): JComponent =
|
||||
UiDataProvider.wrapComponent(VerticalListPanel().apply {
|
||||
for (action in actions) {
|
||||
add(HorizontalListPanel(8).apply {
|
||||
border = JBUI.Borders.empty(5, 0)
|
||||
|
||||
// TODO: Somehow make this update properly or stop using AnAction...
|
||||
return ActionLink(action.templatePresentation.text) { e ->
|
||||
val event = AnActionEvent.createFromInputEvent(null, "StatusChecksAction", null, dataContext)
|
||||
action.actionPerformed(event)
|
||||
}.apply {
|
||||
icon = action.templatePresentation.icon
|
||||
isEnabled = action.templatePresentation.isEnabled
|
||||
isVisible = action.templatePresentation.isVisible
|
||||
add(JLabel().apply {
|
||||
icon = action.templatePresentation.icon ?: EmptyIcon.ICON_16
|
||||
})
|
||||
|
||||
add(AnActionLink(action, "status").apply {
|
||||
icon = null
|
||||
})
|
||||
})
|
||||
}
|
||||
}) { sink ->
|
||||
sink[CommonDataKeys.PROJECT] = detailsVm.project
|
||||
sink[GHPRActionKeys.PULL_REQUEST_DATA_PROVIDER] = detailsVm.dataProvider
|
||||
sink[GHPRActionKeys.PULL_REQUEST_REPOSITORY] = detailsVm.gitRepository
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -6,18 +6,15 @@ import com.intellij.collaboration.ui.codereview.details.data.ReviewRequestState
|
||||
import com.intellij.collaboration.ui.codereview.details.model.CodeReviewDetailsViewModel
|
||||
import com.intellij.collaboration.ui.codereview.issues.processIssueIdsHtml
|
||||
import com.intellij.collaboration.ui.icon.IconsProvider
|
||||
import com.intellij.openapi.actionSystem.CommonDataKeys
|
||||
import com.intellij.openapi.actionSystem.DataContext
|
||||
import com.intellij.openapi.actionSystem.impl.SimpleDataContext
|
||||
import com.intellij.openapi.components.service
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.platform.util.coroutines.childScope
|
||||
import git4idea.repo.GitRepository
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.flow.*
|
||||
import org.jetbrains.annotations.ApiStatus
|
||||
import org.jetbrains.plugins.github.api.data.pullrequest.GHPullRequest
|
||||
import org.jetbrains.plugins.github.api.data.pullrequest.GHPullRequestState
|
||||
import org.jetbrains.plugins.github.pullrequest.action.GHPRActionKeys
|
||||
import org.jetbrains.plugins.github.pullrequest.comment.convertToHtml
|
||||
import org.jetbrains.plugins.github.pullrequest.data.GHPRDataContext
|
||||
import org.jetbrains.plugins.github.pullrequest.data.provider.GHPRDataProvider
|
||||
@@ -29,6 +26,10 @@ import org.jetbrains.plugins.github.pullrequest.ui.toolwindow.model.GHPRToolWind
|
||||
|
||||
@ApiStatus.Experimental
|
||||
interface GHPRDetailsViewModel : CodeReviewDetailsViewModel {
|
||||
val project: Project
|
||||
val gitRepository: GitRepository
|
||||
val dataProvider: GHPRDataProvider
|
||||
|
||||
val securityService: GHPRSecurityService
|
||||
val avatarIconsProvider: IconsProvider<String>
|
||||
|
||||
@@ -40,19 +41,17 @@ interface GHPRDetailsViewModel : CodeReviewDetailsViewModel {
|
||||
val reviewFlowVm: GHPRReviewFlowViewModelImpl
|
||||
|
||||
fun openPullRequestInfoAndTimeline(number: Long)
|
||||
|
||||
fun getActionDataContext(): DataContext
|
||||
}
|
||||
|
||||
internal class GHPRDetailsViewModelImpl(
|
||||
private val project: Project,
|
||||
override val project: Project,
|
||||
parentCs: CoroutineScope,
|
||||
dataContext: GHPRDataContext,
|
||||
private val dataProvider: GHPRDataProvider,
|
||||
override val dataProvider: GHPRDataProvider,
|
||||
details: GHPullRequest,
|
||||
) : GHPRDetailsViewModel {
|
||||
private val cs = parentCs.childScope()
|
||||
private val gitRepository = dataContext.repositoryDataService.remoteCoordinates.repository
|
||||
override val gitRepository = dataContext.repositoryDataService.remoteCoordinates.repository
|
||||
|
||||
private val detailsState = MutableStateFlow(details)
|
||||
|
||||
@@ -111,12 +110,4 @@ internal class GHPRDetailsViewModelImpl(
|
||||
}
|
||||
|
||||
suspend fun destroy() = cs.cancelAndJoinSilently()
|
||||
|
||||
// TODO: Somehow move this to the component factory
|
||||
override fun getActionDataContext(): DataContext =
|
||||
SimpleDataContext.builder()
|
||||
.add(CommonDataKeys.PROJECT, project)
|
||||
.add(GHPRActionKeys.PULL_REQUEST_DATA_PROVIDER, dataProvider)
|
||||
.add(GHPRActionKeys.PULL_REQUEST_REPOSITORY, gitRepository)
|
||||
.build()
|
||||
}
|
||||
Reference in New Issue
Block a user