Skip to content

Commit 9347a96

Browse files
authored
Merge pull request #65 from percy-g2/main
Fix crash and add null safety to emissions info.
2 parents 16f296a + c12f02c commit 9347a96

File tree

4 files changed

+31
-17
lines changed

4 files changed

+31
-17
lines changed

composeApp/src/commonMain/kotlin/dev/johnoreilly/climatetrace/remote/ClimateTraceApi.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,11 @@ data class CountryEmissionsInfo(
4343
@Serializable
4444
data class CountryAssetEmissionsInfo(
4545
@SerialName("Country")
46-
val country: String,
46+
val country: String? = null,
4747
@SerialName("Emissions")
48-
val emissions: Float,
48+
val emissions: Float = 0f,
4949
@SerialName("Sector")
50-
val sector: String
50+
val sector: String? = null
5151
)
5252

5353

composeApp/src/commonMain/kotlin/dev/johnoreilly/climatetrace/ui/CountryAssetEmissionsInfoTreeMapChart.kt

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ import by.overpass.treemapchart.compose.TreemapChart
3131
import by.overpass.treemapchart.core.tree.Tree
3232
import by.overpass.treemapchart.core.tree.tree
3333
import dev.johnoreilly.climatetrace.remote.CountryAssetEmissionsInfo
34-
import dev.johnoreilly.climatetrace.ui.ChartNode
3534
import io.github.koalaplot.core.util.generateHueColorPalette
3635
import io.github.koalaplot.core.util.toString
3736
import kotlinx.coroutines.Dispatchers
@@ -132,15 +131,17 @@ suspend fun buildAssetTree(assetEmissionInfoList: List<CountryAssetEmissionsInfo
132131
.sortedByDescending(CountryAssetEmissionsInfo::emissions)
133132
.take(10)
134133
.forEachIndexed { index, assetEmissionInfo ->
135-
val productPercentage = assetEmissionInfo.emissions / total
136-
node(
137-
ChartNode.Leaf(
138-
name = assetEmissionInfo.sector,
139-
value = assetEmissionInfo.emissions.toDouble(),
140-
percentage = productPercentage,
141-
color = colors[index]
142-
),
143-
)
134+
assetEmissionInfo.sector?.let {
135+
val productPercentage = assetEmissionInfo.emissions / total
136+
node(
137+
ChartNode.Leaf(
138+
name = assetEmissionInfo.sector,
139+
value = assetEmissionInfo.emissions.toDouble(),
140+
percentage = productPercentage,
141+
color = colors[index]
142+
),
143+
)
144+
}
144145
}
145146

146147
}

composeApp/src/commonMain/kotlin/dev/johnoreilly/climatetrace/ui/CountryInfoDetailedView.kt

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import androidx.compose.material3.Text
1515
import androidx.compose.runtime.Composable
1616
import androidx.compose.ui.Alignment
1717
import androidx.compose.ui.Modifier
18+
import androidx.compose.ui.graphics.Color
1819
import androidx.compose.ui.text.style.TextAlign
1920
import androidx.compose.ui.unit.dp
2021
import dev.johnoreilly.climatetrace.remote.Country
@@ -83,10 +84,22 @@ fun CountryInfoDetailedView(
8384

8485
Spacer(modifier = Modifier.size(16.dp))
8586

86-
CountryAssetEmissionsInfoTreeMapChart(countryAssetEmissionsList)
87-
Spacer(modifier = Modifier.size(16.dp))
87+
val filteredCountryAssetEmissionsList = countryAssetEmissionsList.filter { it.sector != null }
88+
if (filteredCountryAssetEmissionsList.isNotEmpty()) {
89+
CountryAssetEmissionsInfoTreeMapChart(countryAssetEmissionsList)
90+
Spacer(modifier = Modifier.size(16.dp))
8891

89-
SectorEmissionsPieChart(countryAssetEmissionsList)
92+
SectorEmissionsPieChart(countryAssetEmissionsList)
93+
} else {
94+
Spacer(modifier = Modifier.size(16.dp))
95+
Column(horizontalAlignment = Alignment.CenterHorizontally) {
96+
Text(
97+
"Corrupted data! \n Try again sometime",
98+
style = MaterialTheme.typography.titleMedium.copy(color = Color.Red),
99+
textAlign = TextAlign.Center
100+
)
101+
}
102+
}
90103
}
91104
}
92105
}

composeApp/src/commonMain/kotlin/dev/johnoreilly/climatetrace/ui/SectorEmissionsPieChart.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ fun SectorEmissionsPieChart(
3838
.sortedByDescending { it.emissions }
3939
.take(10)
4040
val values = filteredEmissionsList.map { it.emissions / 1_000_000 }
41-
val labels = filteredEmissionsList.map { it.sector }
41+
val labels = filteredEmissionsList.mapNotNull { it.sector }
4242
val total = values.sum()
4343
val colors = generateHueColorPalette(values.size)
4444

0 commit comments

Comments
 (0)