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