diff --git a/platform/collaboration-tools/api-dump-experimental.txt b/platform/collaboration-tools/api-dump-experimental.txt index 96eb2c105489..96d0cf2a39b3 100644 --- a/platform/collaboration-tools/api-dump-experimental.txt +++ b/platform/collaboration-tools/api-dump-experimental.txt @@ -322,16 +322,16 @@ f:com.intellij.collaboration.api.json.JsonHttpApiHelperKt - sf:setContentPreservingFocus(com.intellij.ui.components.panels.Wrapper,javax.swing.JComponent):V *f:com.intellij.collaboration.ui.ComponentListPanelFactory - sf:INSTANCE:com.intellij.collaboration.ui.ComponentListPanelFactory -- f:createHorizontal(kotlinx.coroutines.CoroutineScope,kotlinx.coroutines.flow.StateFlow,kotlin.jvm.functions.Function1,I,kotlin.jvm.functions.Function2):javax.swing.JPanel -- bs:createHorizontal$default(com.intellij.collaboration.ui.ComponentListPanelFactory,kotlinx.coroutines.CoroutineScope,kotlinx.coroutines.flow.StateFlow,kotlin.jvm.functions.Function1,I,kotlin.jvm.functions.Function2,I,java.lang.Object):javax.swing.JPanel +- f:createHorizontal(kotlinx.coroutines.CoroutineScope,kotlinx.coroutines.flow.Flow,kotlin.jvm.functions.Function1,I,kotlin.jvm.functions.Function2):javax.swing.JPanel +- bs:createHorizontal$default(com.intellij.collaboration.ui.ComponentListPanelFactory,kotlinx.coroutines.CoroutineScope,kotlinx.coroutines.flow.Flow,kotlin.jvm.functions.Function1,I,kotlin.jvm.functions.Function2,I,java.lang.Object):javax.swing.JPanel - f:createVertical(javax.swing.ListModel,I,kotlin.jvm.functions.Function1):javax.swing.JPanel - f:createVertical(kotlinx.coroutines.CoroutineScope,javax.swing.ListModel,I,kotlin.jvm.functions.Function2):javax.swing.JPanel -- f:createVertical(kotlinx.coroutines.CoroutineScope,kotlinx.coroutines.flow.StateFlow,kotlin.jvm.functions.Function1,I,kotlin.jvm.functions.Function2):javax.swing.JPanel -- f:createVertical(kotlinx.coroutines.flow.StateFlow,I,kotlin.jvm.functions.Function2):javax.swing.JPanel +- f:createVertical(kotlinx.coroutines.CoroutineScope,kotlinx.coroutines.flow.Flow,kotlin.jvm.functions.Function1,I,kotlin.jvm.functions.Function2):javax.swing.JPanel +- f:createVertical(kotlinx.coroutines.flow.Flow,I,kotlin.jvm.functions.Function2):javax.swing.JPanel - bs:createVertical$default(com.intellij.collaboration.ui.ComponentListPanelFactory,javax.swing.ListModel,I,kotlin.jvm.functions.Function1,I,java.lang.Object):javax.swing.JPanel - bs:createVertical$default(com.intellij.collaboration.ui.ComponentListPanelFactory,kotlinx.coroutines.CoroutineScope,javax.swing.ListModel,I,kotlin.jvm.functions.Function2,I,java.lang.Object):javax.swing.JPanel -- bs:createVertical$default(com.intellij.collaboration.ui.ComponentListPanelFactory,kotlinx.coroutines.CoroutineScope,kotlinx.coroutines.flow.StateFlow,kotlin.jvm.functions.Function1,I,kotlin.jvm.functions.Function2,I,java.lang.Object):javax.swing.JPanel -- bs:createVertical$default(com.intellij.collaboration.ui.ComponentListPanelFactory,kotlinx.coroutines.flow.StateFlow,I,kotlin.jvm.functions.Function2,I,java.lang.Object):javax.swing.JPanel +- bs:createVertical$default(com.intellij.collaboration.ui.ComponentListPanelFactory,kotlinx.coroutines.CoroutineScope,kotlinx.coroutines.flow.Flow,kotlin.jvm.functions.Function1,I,kotlin.jvm.functions.Function2,I,java.lang.Object):javax.swing.JPanel +- bs:createVertical$default(com.intellij.collaboration.ui.ComponentListPanelFactory,kotlinx.coroutines.flow.Flow,I,kotlin.jvm.functions.Function2,I,java.lang.Object):javax.swing.JPanel *f:com.intellij.collaboration.ui.EditableComponentFactory - sf:INSTANCE:com.intellij.collaboration.ui.EditableComponentFactory - f:create(kotlinx.coroutines.CoroutineScope,javax.swing.JComponent,kotlinx.coroutines.flow.Flow,kotlin.jvm.functions.Function2):javax.swing.JComponent diff --git a/platform/collaboration-tools/src/com/intellij/collaboration/ui/ComponentListPanelFactory.kt b/platform/collaboration-tools/src/com/intellij/collaboration/ui/ComponentListPanelFactory.kt index e012d36ae911..45fe0fe2ab0d 100644 --- a/platform/collaboration-tools/src/com/intellij/collaboration/ui/ComponentListPanelFactory.kt +++ b/platform/collaboration-tools/src/com/intellij/collaboration/ui/ComponentListPanelFactory.kt @@ -12,7 +12,10 @@ import com.intellij.platform.util.coroutines.childScope import com.intellij.ui.ClientProperty import com.intellij.util.ui.launchOnShow import kotlinx.coroutines.* +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.stateIn import javax.swing.JComponent import javax.swing.JPanel import javax.swing.ListModel @@ -135,7 +138,7 @@ object ComponentListPanelFactory { */ fun createVertical( parentCs: CoroutineScope, - items: StateFlow>, + items: Flow>, panelInitializer: JPanel.() -> Unit = {}, gap: Int = 0, componentFactory: CoroutineScope.(T) -> JComponent, @@ -151,7 +154,7 @@ object ComponentListPanelFactory { * @param T must implement proper equals/hashCode */ fun createVertical( - items: StateFlow>, + items: Flow>, gap: Int = 0, componentFactory: CoroutineScope.(T) -> JComponent, ): JPanel { @@ -169,7 +172,7 @@ object ComponentListPanelFactory { */ fun createHorizontal( parentCs: CoroutineScope, - items: StateFlow>, + items: Flow>, panelInitializer: JPanel.() -> Unit = {}, gap: Int = 0, componentFactory: CoroutineScope.(T) -> JComponent, @@ -181,7 +184,7 @@ object ComponentListPanelFactory { return panel } - private suspend fun JPanel.showItems(items: StateFlow>, componentFactory: CoroutineScope.(T) -> JComponent): Nothing { + private suspend fun JPanel.showItems(items: Flow>, componentFactory: CoroutineScope.(T) -> JComponent): Nothing { coroutineScope { val cs = this fun addComponent(idx: Int, item: T) { @@ -199,7 +202,8 @@ object ComponentListPanelFactory { remove(idx) } - items.changesFlow().collect { changes -> + val itemsState = items as? StateFlow ?: items.stateIn(this, SharingStarted.Eagerly, emptyList()) + itemsState.changesFlow().collect { changes -> // apply changes. changesFlow should already order them in an applicable way for (change in changes) { when (change) {