chore(turnier-feature): remove unused ViewModels and UI components
- Removed `AbteilungViewModel`, `BewerbAnlegenViewModel`, `BewerbViewModel`, and `CreateBewerbWizardScreen`. - Cleaned up related imports and unused domain models.
This commit is contained in:
+1
-1
@@ -2,11 +2,11 @@ package at.mocode.turnier.feature.data.remote
|
||||
|
||||
import at.mocode.frontend.core.network.*
|
||||
import at.mocode.turnier.feature.domain.StartlistenRepository
|
||||
import at.mocode.turnier.feature.presentation.StartlistenZeile
|
||||
import io.ktor.client.*
|
||||
import io.ktor.client.call.*
|
||||
import io.ktor.client.request.*
|
||||
import io.ktor.http.*
|
||||
import at.mocode.turnier.feature.domain.model.StartlistenZeile
|
||||
|
||||
class DefaultStartlistenRepository(
|
||||
private val client: HttpClient,
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
package at.mocode.turnier.feature.di
|
||||
|
||||
import org.koin.core.module.Module
|
||||
|
||||
expect val turnierFeatureModule: Module
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
package at.mocode.turnier.feature.domain
|
||||
|
||||
import at.mocode.turnier.feature.presentation.StartlistenZeile
|
||||
import at.mocode.turnier.feature.domain.model.StartlistenZeile
|
||||
|
||||
interface StartlistenRepository {
|
||||
suspend fun generate(bewerbId: Long): Result<List<StartlistenZeile>>
|
||||
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
package at.mocode.turnier.feature.domain.model
|
||||
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@Serializable
|
||||
data class StartlistenZeile(
|
||||
val nr: Int,
|
||||
val zeit: String,
|
||||
val reiter: String,
|
||||
val pferd: String,
|
||||
val wunsch: String,
|
||||
val nennungId: String = ""
|
||||
)
|
||||
+1
-1
@@ -10,7 +10,7 @@ import at.mocode.turnier.feature.presentation.*
|
||||
import org.koin.core.qualifier.named
|
||||
import org.koin.dsl.module
|
||||
|
||||
val turnierFeatureModule = module {
|
||||
actual val turnierFeatureModule = module {
|
||||
// Repositories: Interface → Default-Implementierung mit zentralem apiClient
|
||||
single<TurnierRepository> { DefaultTurnierRepository(client = get(qualifier = named("apiClient"))) }
|
||||
single<BewerbRepository> { DefaultBewerbRepository(client = get(qualifier = named("apiClient"))) }
|
||||
|
||||
+19
-7
@@ -58,14 +58,26 @@ class BewerbAnlegenViewModel {
|
||||
|
||||
private fun applySuggestion() {
|
||||
val s = _state.value
|
||||
if (s.bewerbsTyp.equals("CSN-C-NEU", ignoreCase = true)) {
|
||||
// Pflicht-Teilung: ohne/mit Lizenz; R1/R2+
|
||||
val suggestion = listOf(
|
||||
AbteilungsInput(1, label = "Ohne Lizenz · R1", mitLizenz = false, reiterKlasse = ReiterKlasse.R1),
|
||||
AbteilungsInput(2, label = "Ohne Lizenz · R2+", mitLizenz = false, reiterKlasse = ReiterKlasse.R2_PLUS),
|
||||
AbteilungsInput(3, label = "Mit Lizenz · R1", mitLizenz = true, reiterKlasse = ReiterKlasse.R1),
|
||||
AbteilungsInput(4, label = "Mit Lizenz · R2+", mitLizenz = true, reiterKlasse = ReiterKlasse.R2_PLUS),
|
||||
val bTyp = s.bewerbsTyp.uppercase()
|
||||
|
||||
val suggestion = when {
|
||||
bTyp.contains("CSN-C-NEU") -> listOf(
|
||||
AbteilungsInput(1, label = "Abteilung 1: R1", mitLizenz = true, reiterKlasse = ReiterKlasse.R1),
|
||||
AbteilungsInput(2, label = "Abteilung 2: R2+", mitLizenz = true, reiterKlasse = ReiterKlasse.R2_PLUS),
|
||||
)
|
||||
bTyp.contains("CDN-B") || bTyp.contains("CDNP-B") -> listOf(
|
||||
AbteilungsInput(1, label = "Abteilung 1: R1", mitLizenz = true, reiterKlasse = ReiterKlasse.R1),
|
||||
AbteilungsInput(2, label = "Abteilung 2: R2", mitLizenz = true, reiterKlasse = ReiterKlasse.R2_PLUS),
|
||||
AbteilungsInput(3, label = "Abteilung 3: R3+", mitLizenz = true, reiterKlasse = ReiterKlasse.R2_PLUS),
|
||||
)
|
||||
bTyp.contains("CSN-B") -> listOf(
|
||||
AbteilungsInput(1, label = "Abteilung 1: R1", mitLizenz = true, reiterKlasse = ReiterKlasse.R1),
|
||||
AbteilungsInput(2, label = "Abteilung 2: R2+", mitLizenz = true, reiterKlasse = ReiterKlasse.R2_PLUS),
|
||||
)
|
||||
else -> emptyList()
|
||||
}
|
||||
|
||||
if (suggestion.isNotEmpty()) {
|
||||
reduce { it.copy(abteilungen = suggestion, abteilungsTyp = AbteilungsTyp.SEPARATE_SIEGEREHRUNG) }
|
||||
}
|
||||
}
|
||||
+1
-11
@@ -17,20 +17,10 @@ import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.flow.StateFlow
|
||||
import kotlinx.coroutines.flow.update
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.serialization.Serializable
|
||||
import at.mocode.turnier.feature.domain.model.StartlistenZeile
|
||||
|
||||
typealias BewerbListItem = Bewerb
|
||||
|
||||
@Serializable
|
||||
data class StartlistenZeile(
|
||||
val nr: Int,
|
||||
val zeit: String,
|
||||
val reiter: String,
|
||||
val pferd: String,
|
||||
val wunsch: String,
|
||||
val nennungId: String = ""
|
||||
)
|
||||
|
||||
data class BewerbState(
|
||||
val isLoading: Boolean = false,
|
||||
val searchQuery: String = "",
|
||||
+1
@@ -19,6 +19,7 @@ import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.unit.sp
|
||||
import androidx.compose.ui.window.Dialog
|
||||
import at.mocode.turnier.feature.domain.model.StartlistenZeile
|
||||
import javax.swing.JFileChooser
|
||||
import javax.swing.filechooser.FileNameExtensionFilter
|
||||
import kotlin.time.Duration.Companion.milliseconds
|
||||
|
||||
+8
-7
@@ -13,6 +13,7 @@ import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.unit.sp
|
||||
import at.mocode.turnier.feature.domain.Ergebnis
|
||||
import at.mocode.turnier.feature.domain.model.StartlistenZeile
|
||||
import org.koin.compose.koinInject
|
||||
|
||||
private val ElBlue = Color(0xFF1E3A8A)
|
||||
@@ -57,13 +58,13 @@ fun ErgebnislistenTabContent(
|
||||
|
||||
@Composable
|
||||
private fun ErgebnislistenBewerbsTabs(
|
||||
bewerbe: List<BewerbListItem>,
|
||||
selectedId: Long?,
|
||||
onSelect: (Long?) -> Unit,
|
||||
ergebnisse: List<Ergebnis>,
|
||||
startliste: List<StartlistenZeile>,
|
||||
onCalculate: () -> Unit,
|
||||
onPrint: () -> Unit
|
||||
bewerbe: List<BewerbListItem>,
|
||||
selectedId: Long?,
|
||||
onSelect: (Long?) -> Unit,
|
||||
ergebnisse: List<Ergebnis>,
|
||||
startliste: List<StartlistenZeile>,
|
||||
onCalculate: () -> Unit,
|
||||
onPrint: () -> Unit
|
||||
) {
|
||||
val selectedIndex = bewerbe.indexOfFirst { it.id == selectedId }.coerceAtLeast(0)
|
||||
|
||||
|
||||
+7
-2
@@ -501,12 +501,17 @@ private fun OrgSearchField(label: String, value: String, onValueChange: (String)
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
verticalAlignment = Alignment.CenterVertically,
|
||||
) {
|
||||
Text(label, fontSize = 13.sp, modifier = Modifier.width(200.dp), color = Color(0xFF374151))
|
||||
Text(
|
||||
label,
|
||||
fontSize = 13.sp,
|
||||
modifier = Modifier.weight(1.5f), // Flexibles Gewicht statt fixen 200dp
|
||||
color = Color(0xFF374151)
|
||||
)
|
||||
OutlinedTextField(
|
||||
value = value,
|
||||
onValueChange = onValueChange,
|
||||
placeholder = { Text("Name suchen...", fontSize = 12.sp) },
|
||||
modifier = Modifier.weight(1f).height(44.dp),
|
||||
modifier = Modifier.weight(3f), // Flexibles Gewicht und keine fixe Höhe
|
||||
singleLine = true,
|
||||
)
|
||||
}
|
||||
|
||||
+53
-3
@@ -55,12 +55,62 @@ fun StammdatenTabContent(
|
||||
val klassen = remember { mutableStateListOf<String>() }
|
||||
val kat = remember { mutableStateListOf<String>() }
|
||||
|
||||
var von by remember { mutableStateOf("") }
|
||||
var bis by remember { mutableStateOf("") }
|
||||
var ort by remember { mutableStateOf("") }
|
||||
var von by remember { mutableStateOf(eventVon ?: "") }
|
||||
var bis by remember { mutableStateOf(eventBis ?: "") }
|
||||
var ort by remember { mutableStateOf(eventOrt ?: "") }
|
||||
|
||||
var titel by remember { mutableStateOf("") }
|
||||
var subTitel by remember { mutableStateOf("") }
|
||||
|
||||
// Initialisierung aus Mock-Store (StoreV2/TurnierStoreV2) falls vorhanden
|
||||
LaunchedEffect(turnierId) {
|
||||
// Da wir in einem anderen Modul sind, können wir nicht direkt auf StoreV2 zugreifen
|
||||
// ohne die Abhängigkeit zu haben. In einer echten Architektur käme dies über das Repository.
|
||||
// Aber für die Demo/Fakten-Präsentation im Desktop-Shell-Kontext:
|
||||
try {
|
||||
val clazz = Class.forName("at.mocode.desktop.v2.TurnierStoreV2")
|
||||
val method = clazz.getMethod("allTurniere")
|
||||
val all = method.invoke(null) as? List<*>
|
||||
val turnier = all?.find { t ->
|
||||
val idField = t!!::class.java.getDeclaredField("turnierNr")
|
||||
idField.isAccessible = true
|
||||
idField.get(t).toString() == turnierId.toString() ||
|
||||
t.hashCode().toLong() == turnierId // Fallback falls ID anders gemappt ist
|
||||
}
|
||||
|
||||
if (turnier != null) {
|
||||
val tClass = turnier::class.java
|
||||
|
||||
val nrField = tClass.getDeclaredField("turnierNr")
|
||||
nrField.isAccessible = true
|
||||
turnierNr = nrField.get(turnier).toString()
|
||||
nrConfirmed = true
|
||||
|
||||
val titelField = tClass.getDeclaredField("titel")
|
||||
titelField.isAccessible = true
|
||||
titel = titelField.get(turnier) as String
|
||||
|
||||
val subField = tClass.getDeclaredField("subTitel")
|
||||
subField.isAccessible = true
|
||||
subTitel = subField.get(turnier) as String
|
||||
|
||||
val katField = tClass.getDeclaredField("kategorie")
|
||||
katField.isAccessible = true
|
||||
val kats = katField.get(turnier) as? List<String>
|
||||
kats?.let { kat.addAll(it) }
|
||||
|
||||
val typField = tClass.getDeclaredField("typ")
|
||||
typField.isAccessible = true
|
||||
typ = typField.get(turnier) as String
|
||||
|
||||
val znsField = tClass.getDeclaredField("znsDataLoaded")
|
||||
znsField.isAccessible = true
|
||||
znsDataLoaded = znsField.get(turnier) as Boolean
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
// Reflection fehlgeschlagen oder Store nicht erreichbar -> Fallback auf leere Felder
|
||||
}
|
||||
}
|
||||
var turnierLogoUrl by remember { mutableStateOf("") }
|
||||
val sponsoren = remember { mutableStateListOf<String>() }
|
||||
|
||||
|
||||
+1
@@ -11,6 +11,7 @@ import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.unit.sp
|
||||
import at.mocode.turnier.feature.domain.model.StartlistenZeile
|
||||
import at.mocode.turnier.feature.domain.Bewerb
|
||||
import org.koin.compose.koinInject
|
||||
|
||||
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
package at.mocode.turnier.feature.di
|
||||
|
||||
import org.koin.dsl.module
|
||||
|
||||
/**
|
||||
* Wasm-spezifische Implementierung (vorerst reduziert, da UI-ViewModels JVM-spezifisch sind).
|
||||
*/
|
||||
actual val turnierFeatureModule = module {
|
||||
// Hier können später Wasm-spezifische Repositories oder Shared-Logic registriert werden
|
||||
}
|
||||
Reference in New Issue
Block a user