use snapshot state to recalculate errors

This commit is contained in:
Diogo
2024-11-21 17:11:11 +00:00
parent 16b56a60d8
commit 899ec474c9
5 changed files with 31 additions and 24 deletions
@@ -50,9 +50,15 @@ fun ModalData.NetworkAndServersView(close: () -> Unit) {
val currUserServers = remember { stateGetOrPut("currUserServers") { emptyList<UserOperatorServers>() } }
val userServers = remember { stateGetOrPut("userServers") { emptyList<UserOperatorServers>() } }
val serverErrors = remember { stateGetOrPut("serverErrors") { emptyList<UserServersError>() } }
val scope = rememberCoroutineScope()
LaunchedEffect(userServers) {
snapshotFlow { userServers.value }
.collect { updatedServers ->
validateServers(rhId = currentRemoteHost?.remoteHostId, userServersToValidate = updatedServers, serverErrors = serverErrors)
}
}
val proxyPort = remember { derivedStateOf { appPrefs.networkProxy.state.value.port } }
ModalView(
close = {
@@ -819,11 +825,9 @@ fun updateOperatorsConditionsAcceptance(usvs: MutableState<List<UserOperatorServ
suspend fun validateServers(
rhId: Long?,
userServers: MutableState<List<UserOperatorServers>>,
userServersToValidate: List<UserOperatorServers>,
serverErrors: MutableState<List<UserServersError>>
) {
val userServersToValidate = userServers.value
try {
val errors = chatController.validateServers(rhId, userServersToValidate) ?: return
serverErrors.value = errors
@@ -22,6 +22,13 @@ fun ModalData.NewServerView(
val scope = rememberCoroutineScope()
val newServer = remember { mutableStateOf(UserServer.empty) }
LaunchedEffect(userServers) {
snapshotFlow { userServers.value }
.collect { updatedServers ->
validateServers(rhId = rhId, userServersToValidate = updatedServers, serverErrors = serverErrors)
}
}
ModalView(close = {
addServer(
scope,
@@ -122,7 +129,6 @@ fun addServer(
userServers.value = updatedUserServers
close()
scope.launch { validateServers(rhId, userServers, serverErrors) }
matchingOperator?.let { op ->
AlertManager.shared.showAlertMsg(
title = generalGetString(MR.strings.operator_server_alert_title),
@@ -44,7 +44,13 @@ fun ModalData.OperatorView(
val testing = remember { mutableStateOf(false) }
val operator = remember { userServers.value[operatorIndex].operator_ }
val currentUser = remember { chatModel.currentUser }.value
val scope = rememberCoroutineScope()
LaunchedEffect(userServers) {
snapshotFlow { userServers.value }
.collect { updatedServers ->
validateServers(rhId = rhId, userServersToValidate = updatedServers, serverErrors = serverErrors)
}
}
Box {
ColumnWithScrollBar(Modifier.alpha(if (testing.value) 0.6f else 1f)) {
@@ -55,7 +61,7 @@ fun ModalData.OperatorView(
serverErrors,
operatorIndex,
navigateToProtocolView = { serverIndex, server, protocol ->
navigateToProtocolView(scope, userServers, serverErrors, operatorIndex, rhId, serverIndex, server, protocol)
navigateToProtocolView(userServers, serverErrors, operatorIndex, rhId, serverIndex, server, protocol)
},
currentUser,
rhId,
@@ -70,7 +76,6 @@ fun ModalData.OperatorView(
}
fun navigateToProtocolView(
scope: CoroutineScope,
userServers: MutableState<List<UserOperatorServers>>,
serverErrors: MutableState<List<UserServersError>>,
operatorIndex: Int,
@@ -93,7 +98,6 @@ fun navigateToProtocolView(
deleteXFTPServer(userServers, operatorIndex, serverIndex)
}
close()
scope.launch { validateServers(rhId, userServers, serverErrors) }
},
onUpdate = { updatedServer ->
userServers.value = userServers.value.toMutableList().apply {
@@ -195,9 +199,6 @@ fun OperatorViewLayout(
)
)
}
scope.launch {
validateServers(rhId, userServers, serverErrors)
}
}
)
}
@@ -218,9 +219,6 @@ fun OperatorViewLayout(
)
)
}
scope.launch {
validateServers(rhId, userServers, serverErrors)
}
}
)
}
@@ -305,9 +303,6 @@ fun OperatorViewLayout(
)
)
}
scope.launch {
validateServers(rhId, userServers, serverErrors)
}
}
)
}
@@ -444,7 +439,6 @@ private fun UseOperatorToggle(
when (val conditionsAcceptance = operator?.conditionsAcceptance) {
is ConditionsAcceptance.Accepted -> {
changeOperatorEnabled(userServers, operatorIndex, true)
scope.launch { validateServers(rhId, userServers, serverErrors) }
}
is ConditionsAcceptance.Required -> {
@@ -461,7 +455,6 @@ private fun UseOperatorToggle(
}
} else {
changeOperatorEnabled(userServers, operatorIndex, true)
scope.launch { validateServers(rhId, userServers, serverErrors) }
}
}
@@ -469,7 +462,6 @@ private fun UseOperatorToggle(
}
} else {
changeOperatorEnabled(userServers, operatorIndex, false)
scope.launch { validateServers(rhId, userServers, serverErrors) }
}
},
)
@@ -498,7 +490,6 @@ private fun SingleOperatorUsageConditionsView(
updateOperatorsConditionsAcceptance(currUserServers, r.serverOperators)
updateOperatorsConditionsAcceptance(userServers, r.serverOperators)
changeOperatorEnabled(userServers, operatorIndex, true)
validateServers(rhId, userServers, serverErrors)
close()
} catch (ex: Exception) {
Log.e(TAG, ex.stackTraceToString())
@@ -45,6 +45,13 @@ fun ProtocolServerView(
val scope = rememberCoroutineScope()
val draftServer = remember { mutableStateOf(server) }
LaunchedEffect(userServers) {
snapshotFlow { userServers.value }
.collect { updatedServers ->
validateServers(rhId = rhId, userServersToValidate = updatedServers, serverErrors = serverErrors)
}
}
ModalView(
close = {
scope.launch {
@@ -70,7 +77,6 @@ fun ProtocolServerView(
} else {
onUpdate(draftServer.value)
close()
validateServers(rhId, userServers, serverErrors)
}
} else {
close()
@@ -46,7 +46,7 @@ fun ModalData.YourServersView(
serverErrors,
operatorIndex,
navigateToProtocolView = { serverIndex, server, protocol ->
navigateToProtocolView(scope, userServers, serverErrors, operatorIndex, rhId, serverIndex, server, protocol)
navigateToProtocolView(userServers, serverErrors, operatorIndex, rhId, serverIndex, server, protocol)
},
currentUser,
rhId,