mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[gitlab] refactor: separate resolvability flows
GitOrigin-RevId: 6c4e826d3471d8a06071c4979784f59f7ac2b8f0
This commit is contained in:
committed by
intellij-monorepo-bot
parent
c6a914224c
commit
8c03bec6fe
+9
-4
@@ -25,7 +25,8 @@ interface GitLabDiscussion {
|
||||
val notes: StateFlow<List<GitLabNote>>
|
||||
val canAddDraftNotes: Boolean
|
||||
|
||||
val canResolve: Boolean
|
||||
val resolvable: StateFlow<Boolean>
|
||||
val resolveAllowed: Boolean
|
||||
val canAddNotes: StateFlow<Boolean>
|
||||
val resolved: StateFlow<Boolean>
|
||||
|
||||
@@ -116,8 +117,12 @@ class LoadedGitLabDiscussion(
|
||||
mr.details.value.userPermissions.createNote &&
|
||||
(glMetadata?.let { GitLabVersion(16, 3) <= it.version } ?: false)
|
||||
|
||||
// a little cheat that greatly simplifies the implementation
|
||||
override val canResolve: Boolean = discussionData.notes.first().resolvable && discussionData.notes.first().userPermissions.resolveNote
|
||||
|
||||
override val resolvable: StateFlow<Boolean> =
|
||||
loadedNotes.mapState { it.firstOrNull()?.resolvable ?: false }
|
||||
|
||||
// a little cheat that simplifies the implementation
|
||||
override val resolveAllowed: Boolean = discussionData.notes.first().userPermissions.resolveNote
|
||||
|
||||
override val resolved: StateFlow<Boolean> =
|
||||
loadedNotes.mapState { it.firstOrNull()?.resolved ?: false }
|
||||
@@ -166,5 +171,5 @@ class LoadedGitLabDiscussion(
|
||||
}
|
||||
|
||||
override fun toString(): String =
|
||||
"LoadedGitLabDiscussion(id='$id', createdAt=$createdAt, canAddNotes=$canAddNotes, canResolve=$canResolve)"
|
||||
"LoadedGitLabDiscussion(id='$id', createdAt=$createdAt)"
|
||||
}
|
||||
+2
-5
@@ -1,10 +1,7 @@
|
||||
// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package org.jetbrains.plugins.gitlab.mergerequest.ui.timeline
|
||||
|
||||
import com.intellij.collaboration.async.launchNow
|
||||
import com.intellij.collaboration.async.mapModelsToViewModels
|
||||
import com.intellij.collaboration.async.mapScoped
|
||||
import com.intellij.collaboration.async.modelFlow
|
||||
import com.intellij.collaboration.async.*
|
||||
import com.intellij.collaboration.ui.codereview.timeline.CollapsibleTimelineItemViewModel
|
||||
import com.intellij.collaboration.ui.codereview.timeline.thread.CodeReviewFoldableThreadViewModel
|
||||
import com.intellij.collaboration.ui.codereview.timeline.thread.CodeReviewResolvableItemViewModel
|
||||
@@ -89,7 +86,7 @@ class GitLabMergeRequestTimelineDiscussionViewModelImpl(
|
||||
override val isBusy: StateFlow<Boolean> = taskLauncher.busy
|
||||
|
||||
override val isResolved: StateFlow<Boolean> = discussion.resolved
|
||||
override val canChangeResolvedState: StateFlow<Boolean> = MutableStateFlow(discussion.canResolve)
|
||||
override val canChangeResolvedState: StateFlow<Boolean> = discussion.resolvable.mapState { it && discussion.resolveAllowed }
|
||||
|
||||
override val collapsible: Flow<Boolean> = isResolved
|
||||
|
||||
|
||||
+1
-1
@@ -54,7 +54,7 @@ internal class GitLabMergeRequestDiscussionViewModelBase(
|
||||
private val expandRequested = MutableStateFlow(false)
|
||||
|
||||
override val isResolved: StateFlow<Boolean> = discussion.resolved
|
||||
override val canChangeResolvedState: StateFlow<Boolean> = MutableStateFlow(discussion.canResolve)
|
||||
override val canChangeResolvedState: StateFlow<Boolean> = discussion.resolvable.mapState { it && discussion.resolveAllowed }
|
||||
|
||||
override val replyVm: StateFlow<GitLabDiscussionReplyViewModel?> =
|
||||
discussion.canAddNotes.mapScoped { canAddNotes ->
|
||||
|
||||
Reference in New Issue
Block a user