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