build: S15 location preview
Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
@@ -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<Forecast?>(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)) }
|
||||||
|
},
|
||||||
|
)
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user