Skip to content

Commit 3a8c0a9

Browse files
committed
updated
1 parent 95cfa06 commit 3a8c0a9

2 files changed

Lines changed: 82 additions & 1 deletion

File tree

  • core/model/src/commonMain/kotlin/com/mifos/core/model/objects/runreport
  • feature/report/src/commonMain/kotlin/com/mifos/feature/report/reportDetail

core/model/src/commonMain/kotlin/com/mifos/core/model/objects/runreport/DataRow.kt

Lines changed: 76 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,85 @@ package com.mifos.core.model.objects.runreport
1212
import com.mifos.core.model.utils.Parcelable
1313
import com.mifos.core.model.utils.Parcelize
1414
import kotlinx.serialization.Serializable
15+
import kotlinx.serialization.ExperimentalSerializationApi
16+
import kotlinx.serialization.KSerializer
17+
import kotlinx.serialization.SerializationException
18+
import kotlinx.serialization.builtins.ListSerializer
19+
import kotlinx.serialization.builtins.nullable
20+
import kotlinx.serialization.builtins.serializer
21+
import kotlinx.serialization.descriptors.SerialDescriptor
22+
import kotlinx.serialization.descriptors.mapSerialDescriptor
23+
import kotlinx.serialization.encoding.Decoder
24+
import kotlinx.serialization.encoding.Encoder
25+
import kotlinx.serialization.json.JsonArray
26+
import kotlinx.serialization.json.JsonDecoder
27+
import kotlinx.serialization.json.JsonElement
28+
import kotlinx.serialization.json.JsonEncoder
29+
import kotlinx.serialization.json.JsonNull
30+
import kotlinx.serialization.json.JsonObject
31+
import kotlinx.serialization.json.JsonPrimitive
32+
import kotlinx.serialization.json.boolean
33+
import kotlinx.serialization.json.booleanOrNull
34+
import kotlinx.serialization.json.contentOrNull
35+
import kotlinx.serialization.json.double
36+
import kotlinx.serialization.json.doubleOrNull
37+
import kotlinx.serialization.json.jsonArray
38+
import kotlinx.serialization.json.jsonObject
39+
import kotlinx.serialization.json.jsonPrimitive
1540

1641
/**
1742
* Created by Tarun on 03-08-17.
1843
*/
1944
@Parcelize
2045
@Serializable
21-
data class DataRow(var row: List<String?> = listOf()) : Parcelable
46+
data class DataRow(
47+
@Serializable(with = RowDeserializer::class)
48+
val row: List<String?> = emptyList()
49+
) : Parcelable
50+
51+
object RowDeserializer : KSerializer<List<String?>> {
52+
53+
@OptIn(ExperimentalSerializationApi::class)
54+
override val descriptor: SerialDescriptor =
55+
ListSerializer(String.serializer().nullable).descriptor
56+
57+
override fun deserialize(decoder: Decoder): List<String?> {
58+
val jsonElement = (decoder as? JsonDecoder)?.decodeJsonElement()
59+
?: throw SerializationException("Decoder is not a JsonDecoder")
60+
61+
return read(jsonElement)
62+
}
63+
64+
private fun read(jsonElement: JsonElement): List<String?> {
65+
return when (jsonElement) {
66+
is JsonArray -> {
67+
jsonElement.map { element ->
68+
when (element) {
69+
is JsonPrimitive -> element.contentOrNull
70+
is JsonArray -> element.joinToString("-") {
71+
it.jsonPrimitive.content
72+
}
73+
else -> element.toString()
74+
}
75+
}
76+
}
77+
78+
else -> throw SerializationException("Expected JsonArray, got $jsonElement")
79+
}
80+
}
81+
82+
override fun serialize(encoder: Encoder, value: List<String?>) {
83+
if (encoder !is JsonEncoder) {
84+
throw SerializationException("This serializer can only be used with Json")
85+
}
86+
87+
val jsonArray = JsonArray(value.map {
88+
when {
89+
it == null -> JsonNull
90+
else -> JsonPrimitive(it)
91+
}
92+
})
93+
94+
encoder.encodeJsonElement(jsonArray)
95+
}
96+
}

feature/report/src/commonMain/kotlin/com/mifos/feature/report/reportDetail/ReportDetailViewModel.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,13 @@ class ReportDetailViewModel(
137137

138138
fun fetchRunReportWithQuery(reportName: String, options: MutableMap<String, String>) =
139139
viewModelScope.launch {
140+
Logger.e("Revanth input"){
141+
options.toString()
142+
}
140143
getRunReportWithQueryUseCase(reportName, options).collect { result ->
144+
Logger.e("Revanth result"){
145+
result.toString()
146+
}
141147
when (result) {
142148
is DataState.Error ->
143149
_reportDetailUiState.value =

0 commit comments

Comments
 (0)