diff --git a/wetter/app/src/main/java/app/wetter/ui/screens/PreviewScreen.kt b/wetter/app/src/main/java/app/wetter/ui/screens/PreviewScreen.kt new file mode 100644 index 0000000..de63a6c --- /dev/null +++ b/wetter/app/src/main/java/app/wetter/ui/screens/PreviewScreen.kt @@ -0,0 +1,49 @@ +package app.wetter.ui.screens + +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.automirrored.rounded.ArrowBack +import androidx.compose.material3.FilledTonalButton +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.runtime.setValue +import androidx.compose.ui.res.stringResource +import app.wetter.R +import app.wetter.data.Forecast +import app.wetter.data.Graph +import app.wetter.data.Place +import app.wetter.data.Settings +import kotlinx.coroutines.launch + +/** S15: a searched place, shown in full before it is saved. */ +@Composable +fun PreviewScreen(place: Place, settings: Settings, onBack: () -> Unit, onSaved: (Long) -> Unit) { + var forecast by remember { mutableStateOf(null) } + var failed by remember { mutableStateOf(false) } + var attempt by remember { mutableStateOf(0) } + val scope = rememberCoroutineScope() + LaunchedEffect(place, attempt) { + failed = false + runCatching { Graph.repo.preview(place) }.onSuccess { forecast = it }.onFailure { failed = true } + } + ForecastPage( + title = place.name, + isCurrent = false, + forecast = forecast, + settings = settings, + animate = true, + refreshing = false, + failed = failed, + onRefresh = { attempt++ }, + navigation = { IconButton(onClick = onBack) { Icon(Icons.AutoMirrored.Rounded.ArrowBack, stringResource(R.string.back)) } }, + actions = { + FilledTonalButton(onClick = { scope.launch { onSaved(Graph.repo.save(place)) } }) { Text(stringResource(R.string.save)) } + }, + ) +}