Always use the latest... fix.

This commit is contained in:
Benoit Marty 2024-01-23 18:13:02 +01:00 committed by Benoit Marty
parent cff076b508
commit 30cea9c70a
9 changed files with 49 additions and 19 deletions

View file

@ -18,6 +18,8 @@ package io.element.android.features.ftue.impl.migration
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.rememberUpdatedState
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import io.element.android.features.ftue.impl.R import io.element.android.features.ftue.impl.R
@ -32,8 +34,9 @@ fun MigrationScreenView(
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
) { ) {
if (migrationState.isMigrating.not()) { if (migrationState.isMigrating.not()) {
LaunchedEffect(onMigrationFinished) { val latestOnMigrationFinished by rememberUpdatedState(onMigrationFinished)
onMigrationFinished() LaunchedEffect(Unit) {
latestOnMigrationFinished()
} }
} }
SunsetPage( SunsetPage(

View file

@ -28,6 +28,8 @@ import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.rememberUpdatedState
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextAlign
@ -57,8 +59,9 @@ fun InviteListView(
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
) { ) {
if (state.acceptedAction is AsyncData.Success) { if (state.acceptedAction is AsyncData.Success) {
LaunchedEffect(state.acceptedAction, onInviteAccepted) { val latestOnInviteAccepted by rememberUpdatedState(onInviteAccepted)
onInviteAccepted(state.acceptedAction.data) LaunchedEffect(state.acceptedAction) {
latestOnInviteAccepted(state.acceptedAction.data)
} }
} }

View file

@ -18,6 +18,8 @@ package io.element.android.features.login.impl.changeserver
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.rememberUpdatedState
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.tooling.preview.PreviewParameter
import io.element.android.features.login.impl.dialogs.SlidingSyncNotSupportedDialog import io.element.android.features.login.impl.dialogs.SlidingSyncNotSupportedDialog
@ -63,8 +65,11 @@ fun ChangeServerView(
} }
} }
is AsyncData.Loading -> ProgressDialog() is AsyncData.Loading -> ProgressDialog()
is AsyncData.Success -> LaunchedEffect(state.changeServerAction, onDone) { is AsyncData.Success -> {
onDone() val latestOnDone by rememberUpdatedState(onDone)
LaunchedEffect(state.changeServerAction) {
latestOnDone()
}
} }
AsyncData.Uninitialized -> Unit AsyncData.Uninitialized -> Unit
} }

View file

@ -18,6 +18,8 @@ package io.element.android.features.logout.impl.ui
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.rememberUpdatedState
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import io.element.android.features.logout.impl.R import io.element.android.features.logout.impl.R
import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.architecture.AsyncAction
@ -52,9 +54,11 @@ fun LogoutActionDialog(
onRetry = onForceLogoutClicked, onRetry = onForceLogoutClicked,
onDismiss = onDismissError, onDismiss = onDismissError,
) )
is AsyncAction.Success -> is AsyncAction.Success -> {
LaunchedEffect(state, onSuccessLogout) { val latestOnSuccessLogout by rememberUpdatedState(onSuccessLogout)
onSuccessLogout(state.data) LaunchedEffect(state) {
latestOnSuccessLogout(state.data)
} }
}
} }
} }

View file

@ -41,8 +41,10 @@ import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableIntStateOf
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberUpdatedState
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.geometry.Offset import androidx.compose.ui.geometry.Offset
@ -294,8 +296,11 @@ private fun AttachmentStateView(
) { ) {
when (state) { when (state) {
AttachmentsState.None -> Unit AttachmentsState.None -> Unit
is AttachmentsState.Previewing -> LaunchedEffect(state, onPreviewAttachments) { is AttachmentsState.Previewing -> {
onPreviewAttachments(state.attachments) val latestOnPreviewAttachments by rememberUpdatedState(onPreviewAttachments)
LaunchedEffect(state) {
latestOnPreviewAttachments(state.attachments)
}
} }
is AttachmentsState.Sending -> { is AttachmentsState.Sending -> {
ProgressDialog( ProgressDialog(

View file

@ -24,6 +24,8 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.rememberUpdatedState
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
@ -57,8 +59,9 @@ fun AttachmentsPreviewView(
} }
if (state.sendActionState is SendActionState.Done) { if (state.sendActionState is SendActionState.Done) {
LaunchedEffect(state.sendActionState, onDismiss) { val latestOnDismiss by rememberUpdatedState(onDismiss)
onDismiss() LaunchedEffect(state.sendActionState) {
latestOnDismiss()
} }
} }

View file

@ -18,6 +18,8 @@ package io.element.android.features.rageshake.api.detection
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.rememberUpdatedState
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalView import androidx.compose.ui.platform.LocalView
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
@ -73,9 +75,10 @@ private fun TakeScreenshot(
onScreenshotTaken: (ImageResult) -> Unit onScreenshotTaken: (ImageResult) -> Unit
) { ) {
val view = LocalView.current val view = LocalView.current
LaunchedEffect(onScreenshotTaken) { val latestOnScreenshotTaken by rememberUpdatedState(onScreenshotTaken)
LaunchedEffect(Unit) {
view.screenshot { view.screenshot {
onScreenshotTaken(it) latestOnScreenshotTaken(it)
} }
} }
} }

View file

@ -18,6 +18,8 @@ package io.element.android.libraries.designsystem.components.async
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.rememberUpdatedState
import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.tooling.preview.PreviewParameter
import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.architecture.AsyncAction
import io.element.android.libraries.designsystem.components.ProgressDialog import io.element.android.libraries.designsystem.components.ProgressDialog
@ -67,8 +69,9 @@ fun <T> AsyncActionView(
} }
} }
is AsyncAction.Success -> { is AsyncAction.Success -> {
LaunchedEffect(async, onSuccess) { val latestOnSuccess by rememberUpdatedState(onSuccess)
onSuccess(async.data) LaunchedEffect(async) {
latestOnSuccess(async.data)
} }
} }
} }

View file

@ -43,8 +43,9 @@ internal fun <T> SoftKeyboardEffect(
) { ) {
val view = LocalView.current val view = LocalView.current
val latestOnRequestFocus by rememberUpdatedState(onRequestFocus) val latestOnRequestFocus by rememberUpdatedState(onRequestFocus)
LaunchedEffect(key, predicate) { val latestPredicate by rememberUpdatedState(predicate)
if (predicate(key)) { LaunchedEffect(key) {
if (latestPredicate(key)) {
// Await window focus in case returning from a dialog // Await window focus in case returning from a dialog
view.awaitWindowFocus() view.awaitWindowFocus()