Improve SignedOutPresenter.
We can now provide a SessionId in the Factory.
This commit is contained in:
parent
7dd081f0ed
commit
8d476b5f98
3 changed files with 11 additions and 12 deletions
|
|
@ -32,7 +32,7 @@ class SignedOutNode(
|
|||
) : NodeInputs
|
||||
|
||||
private val inputs: Inputs = inputs()
|
||||
private val presenter = presenterFactory.create(inputs.sessionId.value)
|
||||
private val presenter = presenterFactory.create(inputs.sessionId)
|
||||
|
||||
@Composable
|
||||
override fun View(modifier: Modifier) {
|
||||
|
|
|
|||
|
|
@ -9,7 +9,6 @@ package io.element.android.features.signedout.impl
|
|||
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.collectAsState
|
||||
import androidx.compose.runtime.derivedStateOf
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.rememberCoroutineScope
|
||||
|
|
@ -18,35 +17,35 @@ import dev.zacsweers.metro.AssistedFactory
|
|||
import dev.zacsweers.metro.AssistedInject
|
||||
import io.element.android.libraries.architecture.Presenter
|
||||
import io.element.android.libraries.core.meta.BuildMeta
|
||||
import io.element.android.libraries.matrix.api.core.SessionId
|
||||
import io.element.android.libraries.sessionstorage.api.SessionStore
|
||||
import kotlinx.coroutines.flow.map
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
@AssistedInject
|
||||
class SignedOutPresenter(
|
||||
// Cannot inject SessionId
|
||||
@Assisted private val sessionId: String,
|
||||
@Assisted private val sessionId: SessionId,
|
||||
private val sessionStore: SessionStore,
|
||||
private val buildMeta: BuildMeta,
|
||||
) : Presenter<SignedOutState> {
|
||||
@AssistedFactory
|
||||
fun interface Factory {
|
||||
fun create(sessionId: String): SignedOutPresenter
|
||||
fun create(sessionId: SessionId): SignedOutPresenter
|
||||
}
|
||||
|
||||
@Composable
|
||||
override fun present(): SignedOutState {
|
||||
val sessions by remember {
|
||||
sessionStore.sessionsFlow()
|
||||
}.collectAsState(initial = emptyList())
|
||||
val signedOutSession by remember {
|
||||
derivedStateOf { sessions.firstOrNull { it.userId == sessionId } }
|
||||
}
|
||||
sessionStore.sessionsFlow().map { sessions ->
|
||||
sessions.firstOrNull { it.userId == sessionId.value }
|
||||
}
|
||||
}.collectAsState(initial = null)
|
||||
val coroutineScope = rememberCoroutineScope()
|
||||
|
||||
fun handleEvents(event: SignedOutEvents) {
|
||||
when (event) {
|
||||
SignedOutEvents.SignInAgain -> coroutineScope.launch {
|
||||
sessionStore.removeSession(sessionId)
|
||||
sessionStore.removeSession(sessionId.value)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -70,7 +70,7 @@ internal fun createSignedOutPresenter(
|
|||
sessionStore: SessionStore = InMemorySessionStore(),
|
||||
): SignedOutPresenter {
|
||||
return SignedOutPresenter(
|
||||
sessionId = sessionId.value,
|
||||
sessionId = sessionId,
|
||||
sessionStore = sessionStore,
|
||||
buildMeta = aBuildMeta(applicationName = AN_APPLICATION_NAME),
|
||||
)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue