Create Presentation module and remove Presenter from core
This commit is contained in:
parent
969756e744
commit
fc14973049
8 changed files with 22 additions and 7 deletions
|
|
@ -2,7 +2,6 @@ plugins {
|
|||
id("io.element.android-compose-library")
|
||||
alias(libs.plugins.ksp)
|
||||
alias(libs.plugins.anvil)
|
||||
alias(libs.plugins.molecule)
|
||||
}
|
||||
|
||||
android {
|
||||
|
|
@ -18,10 +17,10 @@ dependencies {
|
|||
anvil(project(":anvilcodegen"))
|
||||
implementation(project(":libraries:di"))
|
||||
implementation(project(":libraries:core"))
|
||||
implementation(project(":libraries:presentation"))
|
||||
implementation(project(":libraries:matrix"))
|
||||
implementation(project(":libraries:designsystem"))
|
||||
implementation(libs.appyx.core)
|
||||
implementation(libs.mavericks.compose)
|
||||
implementation(libs.datetime)
|
||||
implementation(libs.accompanist.placeholder)
|
||||
testImplementation(libs.test.junit)
|
||||
|
|
|
|||
|
|
@ -1,29 +0,0 @@
|
|||
package io.element.android.x.features.roomlist
|
||||
|
||||
import androidx.compose.ui.platform.AndroidUiDispatcher
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import app.cash.molecule.RecompositionClock
|
||||
import app.cash.molecule.launchMolecule
|
||||
import com.bumble.appyx.core.node.Node
|
||||
import io.element.android.x.core.architecture.Presenter
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.flow.MutableSharedFlow
|
||||
import kotlinx.coroutines.flow.StateFlow
|
||||
|
||||
inline fun <reified State, reified Event> Node.presenterConnector(presenter: Presenter<State, Event>): NodePresenterConnector<State, Event> {
|
||||
return NodePresenterConnector(node = this, presenter = presenter)
|
||||
}
|
||||
|
||||
class NodePresenterConnector<State, Event>(private val node: Node, presenter: Presenter<State, Event>) {
|
||||
|
||||
private val moleculeScope = CoroutineScope(node.lifecycleScope.coroutineContext + AndroidUiDispatcher.Main)
|
||||
private val eventFlow: MutableSharedFlow<Event> = MutableSharedFlow(extraBufferCapacity = 64)
|
||||
|
||||
val stateFlow: StateFlow<State> = moleculeScope.launchMolecule(RecompositionClock.ContextClock) {
|
||||
presenter.present(events = eventFlow)
|
||||
}
|
||||
|
||||
fun emitEvent(event: Event) {
|
||||
eventFlow.tryEmit(event)
|
||||
}
|
||||
}
|
||||
|
|
@ -8,6 +8,7 @@ import com.bumble.appyx.core.modality.BuildContext
|
|||
import com.bumble.appyx.core.node.Node
|
||||
import io.element.android.x.features.roomlist.model.RoomListEvents
|
||||
import io.element.android.x.matrix.core.RoomId
|
||||
import io.element.android.x.presentation.presenterConnector
|
||||
|
||||
class RoomListNode(
|
||||
buildContext: BuildContext,
|
||||
|
|
|
|||
|
|
@ -9,7 +9,6 @@ import androidx.compose.runtime.mutableStateOf
|
|||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.saveable.rememberSaveable
|
||||
import androidx.compose.runtime.setValue
|
||||
import io.element.android.x.core.architecture.Presenter
|
||||
import io.element.android.x.core.coroutine.parallelMap
|
||||
import io.element.android.x.designsystem.components.avatar.AvatarData
|
||||
import io.element.android.x.designsystem.components.avatar.AvatarSize
|
||||
|
|
@ -21,6 +20,7 @@ import io.element.android.x.features.roomlist.model.RoomListState
|
|||
import io.element.android.x.matrix.MatrixClient
|
||||
import io.element.android.x.matrix.media.MediaResolver
|
||||
import io.element.android.x.matrix.room.RoomSummary
|
||||
import io.element.android.x.presentation.Presenter
|
||||
import kotlinx.collections.immutable.ImmutableList
|
||||
import kotlinx.collections.immutable.persistentListOf
|
||||
import kotlinx.collections.immutable.toImmutableList
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue