chore: füge Warn-Dialoge für Rollenwechsel und Bearbeitungsmodus hinzu, verbessere Zustandshandhabung im Device-Setup und implementiere Turnierverwaltung im Veranstaltungs-Wizard
Signed-off-by: StefanMoCoAt <stefan.mo.co@gmail.com>
This commit is contained in:
+33
-4
@@ -70,9 +70,6 @@ fun DeviceInitializationScreen(
|
||||
NetworkRoleSelector(
|
||||
selectedRole = uiState.settings.networkRole,
|
||||
onRoleSelected = {
|
||||
if (uiState.settings.networkRole != it && uiState.settings.deviceName.isNotBlank()) {
|
||||
// Hier könnte ein Dialog kommen, aber fürs Erste einfach setzen
|
||||
}
|
||||
viewModel.setNetworkRole(it)
|
||||
focusManager.moveFocus(FocusDirection.Next)
|
||||
},
|
||||
@@ -80,6 +77,20 @@ fun DeviceInitializationScreen(
|
||||
enabled = !uiState.isLocked
|
||||
)
|
||||
|
||||
if (uiState.showRoleChangeWarning) {
|
||||
AlertDialog(
|
||||
onDismissRequest = { viewModel.dismissRoleChangeWarning() },
|
||||
title = { Text("Netzwerk-Rolle ändern?") },
|
||||
text = { Text("Das Ändern der Netzwerk-Rolle kann Ihre bisherigen Eingaben in Schritt 2 beeinflussen. Wollen Sie fortfahren?") },
|
||||
confirmButton = {
|
||||
Button(onClick = { viewModel.confirmNetworkRoleChange() }) { Text("Ja, Ändern") }
|
||||
},
|
||||
dismissButton = {
|
||||
TextButton(onClick = { viewModel.dismissRoleChangeWarning() }) { Text("Abbrechen") }
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
if (!uiState.isLocked) {
|
||||
Button(
|
||||
onClick = { viewModel.nextStep() },
|
||||
@@ -126,8 +137,26 @@ fun DeviceInitializationScreen(
|
||||
}
|
||||
|
||||
if (uiState.isLocked) {
|
||||
var showUnlockWarning by remember { mutableStateOf(false) }
|
||||
if (showUnlockWarning) {
|
||||
AlertDialog(
|
||||
onDismissRequest = { showUnlockWarning = false },
|
||||
title = { Text("Konfiguration bearbeiten?") },
|
||||
text = { Text("Achtung: Änderungen am SharedKey oder der Rolle können die Synchronisation mit anderen Geräten unterbrechen.") },
|
||||
confirmButton = {
|
||||
Button(onClick = {
|
||||
viewModel.unlockConfiguration()
|
||||
showUnlockWarning = false
|
||||
}) { Text("Bearbeitungsmodus aktivieren") }
|
||||
},
|
||||
dismissButton = {
|
||||
TextButton(onClick = { showUnlockWarning = false }) { Text("Abbrechen") }
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
Button(
|
||||
onClick = { viewModel.unlockConfiguration() },
|
||||
onClick = { showUnlockWarning = true },
|
||||
colors = ButtonDefaults.buttonColors(
|
||||
containerColor = MaterialTheme.colorScheme.secondary
|
||||
)
|
||||
|
||||
+3
-1
@@ -11,5 +11,7 @@ data class DeviceInitializationUiState(
|
||||
val discoveredMasters: List<DiscoveredService> = emptyList(),
|
||||
val isProcessing: Boolean = false,
|
||||
val error: String? = null,
|
||||
val isLocked: Boolean = false
|
||||
val isLocked: Boolean = false,
|
||||
val showRoleChangeWarning: Boolean = false,
|
||||
val pendingRole: at.mocode.frontend.features.device.initialization.domain.model.NetworkRole? = null
|
||||
)
|
||||
|
||||
+19
-2
@@ -52,8 +52,25 @@ class DeviceInitializationViewModel(
|
||||
}
|
||||
|
||||
fun setNetworkRole(role: NetworkRole) {
|
||||
println("[DeviceInit] Netzwerk-Rolle gesetzt: $role")
|
||||
updateSettings { it.copy(networkRole = role) }
|
||||
if (uiState.value.settings.deviceName.isNotBlank() || uiState.value.settings.sharedKey.isNotBlank()) {
|
||||
_uiState.update { it.copy(showRoleChangeWarning = true, pendingRole = role) }
|
||||
} else {
|
||||
println("[DeviceInit] Netzwerk-Rolle direkt gesetzt: $role")
|
||||
updateSettings { it.copy(networkRole = role) }
|
||||
}
|
||||
}
|
||||
|
||||
fun confirmNetworkRoleChange() {
|
||||
val role = uiState.value.pendingRole
|
||||
println("[DeviceInit] Rollenwechsel bestätigt: $role")
|
||||
if (role != null) {
|
||||
updateSettings { it.copy(networkRole = role) }
|
||||
}
|
||||
_uiState.update { it.copy(showRoleChangeWarning = false, pendingRole = null) }
|
||||
}
|
||||
|
||||
fun dismissRoleChangeWarning() {
|
||||
_uiState.update { it.copy(showRoleChangeWarning = false, pendingRole = null) }
|
||||
}
|
||||
|
||||
fun addExpectedClient(name: String, role: NetworkRole) {
|
||||
|
||||
Reference in New Issue
Block a user