fix(map): clip chart sensor selector ripple to pill shape

Made-with: Cursor
This commit is contained in:
2026-04-06 22:13:27 +02:00
parent ac334db940
commit 3057d9c2d4

View File

@@ -23,6 +23,7 @@ import androidx.compose.foundation.verticalScroll
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.Card import androidx.compose.material3.Card
import androidx.compose.material3.CardDefaults import androidx.compose.material3.CardDefaults
import androidx.compose.material3.CircularProgressIndicator
import androidx.compose.material3.FilterChip import androidx.compose.material3.FilterChip
import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
@@ -61,8 +62,8 @@ import org.db3.airmq.features.common.AirMQButton
import org.db3.airmq.features.common.AirMQButtonStyle import org.db3.airmq.features.common.AirMQButtonStyle
import org.db3.airmq.features.common.chart.AirMQChart import org.db3.airmq.features.common.chart.AirMQChart
import org.db3.airmq.features.common.chart.ChartConfig import org.db3.airmq.features.common.chart.ChartConfig
import org.db3.airmq.features.common.chart.ChartDataset import org.db3.airmq.features.common.metric.SensorType as MetricSensorType
import org.db3.airmq.features.common.chart.generateSineWaveData import org.db3.airmq.features.dashboard.DashboardChartMapper
import org.db3.airmq.features.map.MapScreenContract.DevicePanelState import org.db3.airmq.features.map.MapScreenContract.DevicePanelState
import org.db3.airmq.features.map.MapScreenContract.DeviceSensorType import org.db3.airmq.features.map.MapScreenContract.DeviceSensorType
import org.db3.airmq.features.map.MapScreenContract.SearchResult import org.db3.airmq.features.map.MapScreenContract.SearchResult
@@ -520,7 +521,7 @@ fun MapDevicePanelContent(
.height(256.dp) .height(256.dp)
) { ) {
AirMQChart( AirMQChart(
data = ChartDataset.Single(generateSineWaveData()), data = data.chartDataset,
config = chartConfigForSensor( config = chartConfigForSensor(
data.selectedSensor, data.selectedSensor,
leftTimeLabel = stringResource(R.string.filter_hour), leftTimeLabel = stringResource(R.string.filter_hour),
@@ -533,6 +534,23 @@ fun MapDevicePanelContent(
.align(Alignment.TopCenter) .align(Alignment.TopCenter)
) )
if (data.isChartLoading) {
CircularProgressIndicator(
modifier = Modifier.align(Alignment.Center)
)
}
data.chartErrorMessage?.let { err ->
Text(
text = err,
style = MaterialTheme.typography.bodySmall,
color = Color(0xFFB00020),
modifier = Modifier
.align(Alignment.TopCenter)
.padding(top = 4.dp)
)
}
DeviceSensorDropdown( DeviceSensorDropdown(
selectedSensor = data.selectedSensor, selectedSensor = data.selectedSensor,
supportedSensors = data.supportedSensors, supportedSensors = data.supportedSensors,
@@ -696,6 +714,7 @@ private fun DeviceSensorDropdown(
modifier = Modifier modifier = Modifier
.fillMaxWidth() .fillMaxWidth()
.height(36.dp) .height(36.dp)
.clip(triggerShape)
.clickable { isExpanded = !isExpanded }, .clickable { isExpanded = !isExpanded },
shape = triggerShape, shape = triggerShape,
shadowElevation = 10.dp, shadowElevation = 10.dp,
@@ -858,7 +877,12 @@ private fun PreviewMapDevicePanelDust() {
status = "Online", status = "Online",
selectedRange = TimeRange.DAY, selectedRange = TimeRange.DAY,
displayedDateRange = "Today", displayedDateRange = "Today",
selectedSensor = DeviceSensorType.DUST selectedSensor = DeviceSensorType.DUST,
chartDataset = DashboardChartMapper.chartDataset(
DashboardChartMapper.previewStaticRows(),
MetricSensorType.DUST
),
isChartLoading = false
), ),
onOpenDevice = {}, onOpenDevice = {},
onRangeSelected = {}, onRangeSelected = {},
@@ -880,7 +904,12 @@ private fun PreviewMapDevicePanelRadioactivity() {
status = "Offline", status = "Offline",
selectedRange = TimeRange.WEEK, selectedRange = TimeRange.WEEK,
displayedDateRange = "Last 7 days", displayedDateRange = "Last 7 days",
selectedSensor = DeviceSensorType.RADIOACTIVITY selectedSensor = DeviceSensorType.RADIOACTIVITY,
chartDataset = DashboardChartMapper.chartDataset(
DashboardChartMapper.previewStaticRows(),
MetricSensorType.RADIOACTIVITY
),
isChartLoading = false
), ),
onOpenDevice = {}, onOpenDevice = {},
onRangeSelected = {}, onRangeSelected = {},