ios, android: disable save and test buttons if all servers are disabled (#1457)

This commit is contained in:
JRoberts
2022-11-29 12:28:26 +04:00
committed by GitHub
parent 00466f4654
commit 9295bdca3e
2 changed files with 27 additions and 11 deletions

View File

@@ -30,12 +30,17 @@ fun SMPServersView(m: ChatModel) {
}
val testing = rememberSaveable { mutableStateOf(false) }
val serversUnchanged = remember { derivedStateOf { servers == m.userSMPServers.value || testing.value } }
val allServersDisabled = remember { derivedStateOf { servers.all { !it.enabled } } }
val saveDisabled = remember {
derivedStateOf {
servers.isEmpty() || servers == m.userSMPServers.value || testing.value || !servers.all { srv ->
servers.isEmpty() ||
servers == m.userSMPServers.value ||
testing.value ||
!servers.all { srv ->
val address = parseServerAddress(srv.server)
address != null && uniqueAddress(srv, address, servers)
}
} ||
allServersDisabled.value
}
}
@@ -66,10 +71,11 @@ fun SMPServersView(m: ChatModel) {
val scope = rememberCoroutineScope()
SMPServersLayout(
testing.value,
servers,
serversUnchanged.value,
saveDisabled.value,
testing = testing.value,
servers = servers,
serversUnchanged = serversUnchanged.value,
saveDisabled = saveDisabled.value,
allServersDisabled = allServersDisabled.value,
addServer = {
AlertManager.shared.showAlertDialogButtonsColumn(
title = generalGetString(R.string.smp_servers_add),
@@ -149,6 +155,7 @@ private fun SMPServersLayout(
servers: List<ServerCfg>,
serversUnchanged: Boolean,
saveDisabled: Boolean,
allServersDisabled: Boolean,
addServer: () -> Unit,
testServers: () -> Unit,
resetServers: () -> Unit,
@@ -185,8 +192,9 @@ private fun SMPServersLayout(
Text(stringResource(R.string.reset_verb), color = if (!serversUnchanged) MaterialTheme.colors.onBackground else HighOrLowlight)
}
SectionDivider()
SectionItemView(testServers, disabled = testing) {
Text(stringResource(R.string.smp_servers_test_servers), color = if (!testing) MaterialTheme.colors.onBackground else HighOrLowlight)
val testServersDisabled = testing || allServersDisabled
SectionItemView(testServers, disabled = testServersDisabled) {
Text(stringResource(R.string.smp_servers_test_servers), color = if (!testServersDisabled) MaterialTheme.colors.onBackground else HighOrLowlight)
}
SectionDivider()
SectionItemView(saveSMPServers, disabled = saveDisabled) {

View File

@@ -63,7 +63,7 @@ struct SMPServersView: View {
Button("Reset") { servers = m.userSMPServers ?? [] }
.disabled(servers == m.userSMPServers || testing)
Button("Test servers", action: testServers)
.disabled(testing)
.disabled(testing || allServersDisabled)
Button("Save servers", action: saveSMPServers)
.disabled(saveDisabled)
howToButton()
@@ -101,12 +101,20 @@ struct SMPServersView: View {
}
private var saveDisabled: Bool {
servers.count == 0 || servers == m.userSMPServers || testing || !servers.allSatisfy { srv in
servers.isEmpty ||
servers == m.userSMPServers ||
testing ||
!servers.allSatisfy { srv in
if let address = parseServerAddress(srv.server) {
return uniqueAddress(srv, address)
}
return false
}
} ||
allServersDisabled
}
private var allServersDisabled: Bool {
servers.allSatisfy { !$0.enabled }
}
private func smpServerView(_ server: Binding<ServerCfg>) -> some View {