feat: aktiviere neues EventWizardScreen-Scaffold hinter Feature-Flag
Some checks failed
Desktop CI — Headless Tests & Build / Compose Desktop — Tests (headless) & Build (push) Has been cancelled
Build and Publish Docker Images / build-and-push (., backend/services/ping/Dockerfile, ping-service, ping-service) (push) Has been cancelled
Build and Publish Docker Images / build-and-push (., config/docker/caddy/web-app/Dockerfile, web-app, web-app) (push) Has been cancelled
Build and Publish Docker Images / build-and-push (., config/docker/keycloak/Dockerfile, keycloak, keycloak) (push) Has been cancelled
Build and Publish Docker Images / build-and-push (., backend/infrastructure/gateway/Dockerfile, api-gateway, api-gateway) (push) Has been cancelled

Signed-off-by: StefanMoCoAt <stefan.mo.co@gmail.com>
This commit is contained in:
Stefan Mogeritsch 2026-04-21 17:58:43 +02:00
parent 91a8c38b25
commit d9b5c6bfea

View File

@ -17,6 +17,9 @@ import androidx.compose.ui.unit.dp
import at.mocode.frontend.core.designsystem.components.MsFilePicker
import at.mocode.frontend.core.designsystem.components.MsTextField
import at.mocode.frontend.core.designsystem.theme.Dimens
import at.mocode.frontend.core.domain.config.WizardFeatureFlags
import at.mocode.frontend.core.wizard.ui.WizardScaffoldWithHotkeys
import at.mocode.frontend.core.wizard.ui.WizardStepUi
import at.mocode.frontend.features.turnier.presentation.TurnierWizard
import at.mocode.frontend.features.zns.import.presentation.StammdatenImportScreen
import kotlin.uuid.ExperimentalUuidApi
@ -31,6 +34,31 @@ fun EventWizardScreen(
) {
val state = viewModel.state
// Neuer Scaffold-Weg hinter Feature-Flag (Strangler-Pattern)
if (WizardFeatureFlags.WizardRuntimeEnabled) {
EventWizardScreenScaffolded(
state = state,
onBack = {
if (state.currentStep == WizardStep.ZNS_CHECK) onBack() else viewModel.previousStep()
},
onNext = { viewModel.nextStep() },
onSaveDraft = null, // Wird in einem Folge-Inkrement angebunden
onFinish = onFinish,
onNavigateToVeranstalterNeu = onNavigateToVeranstalterNeu,
renderStep = {
when (state.currentStep) {
WizardStep.ZNS_CHECK -> ZnsCheckStep(viewModel)
WizardStep.VERANSTALTER_SELECTION -> VeranstalterSelectionStep(viewModel, onNavigateToVeranstalterNeu)
WizardStep.ANSPRECHPERSON_MAPPING -> AnsprechpersonMappingStep(viewModel)
WizardStep.META_DATA -> MetaDataStep(viewModel)
WizardStep.TURNIER_ANLAGE -> TurnierAnlageStep(viewModel)
WizardStep.SUMMARY -> SummaryStep(viewModel, onFinish)
}
}
)
return
}
Scaffold(
topBar = {
Column {
@ -79,6 +107,62 @@ fun EventWizardScreen(
}
}
@Composable
private fun EventWizardScreenScaffolded(
state: VeranstaltungWizardState,
onBack: () -> Unit,
onNext: () -> Unit,
onSaveDraft: (() -> Unit)?,
onFinish: () -> Unit,
onNavigateToVeranstalterNeu: () -> Unit,
renderStep: @Composable () -> Unit
) {
val steps = remember {
WizardStep.entries.map {
// Titel schlank aus Enum ableiten; echte Strings folgen in UI-Polishing
val title = when (it) {
WizardStep.ZNS_CHECK -> "ZNS"
WizardStep.VERANSTALTER_SELECTION -> "Veranstalter"
WizardStep.ANSPRECHPERSON_MAPPING -> "Kontakt"
WizardStep.META_DATA -> "Metadaten"
WizardStep.TURNIER_ANLAGE -> "Turniere"
WizardStep.SUMMARY -> "Zusammenfassung"
}
WizardStepUi(id = it.name, title = title)
}
}
val currentIndex = state.currentStep.ordinal
val canBack = currentIndex > 0
val canNext = true // Validierungslogik wird schrittweise ergänzt
WizardScaffoldWithHotkeys(
steps = steps,
currentIndex = currentIndex,
canBack = canBack,
canNext = canNext,
onBack = onBack,
onNext = if (state.currentStep == WizardStep.SUMMARY) onFinish else onNext,
onSaveDraft = onSaveDraft,
nextLabel = if (state.currentStep == WizardStep.SUMMARY) "Fertig" else "Weiter",
backLabel = "Zurück",
finishLabel = "Fertig"
) {
// Sticky Preview oben wie gehabt
Column(modifier = Modifier.fillMaxSize()) {
VorschauCard(state = state)
Box(
modifier = Modifier
.weight(1f)
.fillMaxWidth()
.padding(Dimens.SpacingL)
) {
renderStep()
}
}
}
}
@Composable
private fun VorschauCard(state: VeranstaltungWizardState) {
Card(