Skip to content

Commit

Permalink
move code to usecase
Browse files Browse the repository at this point in the history
  • Loading branch information
Balcan committed Feb 6, 2025
1 parent 590008b commit bdce474
Show file tree
Hide file tree
Showing 20 changed files with 944 additions and 302 deletions.
6 changes: 6 additions & 0 deletions aggregates/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,11 @@ kotlin {
}
commonTest.dependencies {
implementation(kotlin("test"))
// Koin Test features
implementation(libs.koin.test)
implementation(libs.koin.test.junit5)
implementation(libs.test.turbine)
implementation(libs.test.kotlinCoroutines)
}

androidMain.dependencies {
Expand Down Expand Up @@ -78,6 +83,7 @@ android {
}

dependencies {
testImplementation(libs.junit.jupiter)
debugImplementation(libs.androidx.compose.preview)
debugImplementation(libs.androidx.ui.tooling)
}

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,15 @@ import org.dhis2.mobile.aggregates.data.DataSetInstanceRepository
import org.dhis2.mobile.aggregates.domain.GetDataSetInstanceDetails
import org.dhis2.mobile.aggregates.domain.GetDataSetRenderingConfig
import org.dhis2.mobile.aggregates.domain.GetDataSetSections
import org.dhis2.mobile.aggregates.model.CellElement
import org.dhis2.mobile.aggregates.model.DataSetDetails
import org.dhis2.mobile.aggregates.model.DataSetInstanceConfiguration
import org.dhis2.mobile.aggregates.model.DataSetInstanceParameters
import org.dhis2.mobile.aggregates.model.DataSetInstanceSectionConfiguration
import org.dhis2.mobile.aggregates.model.DataSetInstanceSectionData
import org.dhis2.mobile.aggregates.model.DataSetRenderingConfig
import org.dhis2.mobile.aggregates.model.DataSetSection
import org.dhis2.mobile.aggregates.ui.viewModel.DataSetTableViewModel
import org.hisp.dhis.mobile.ui.designsystem.component.table.model.RowHeader
import org.hisp.dhis.mobile.ui.designsystem.component.table.model.TableHeader
import org.hisp.dhis.mobile.ui.designsystem.component.table.model.TableHeaderCell
import org.hisp.dhis.mobile.ui.designsystem.component.table.model.TableHeaderRow
import org.hisp.dhis.mobile.ui.designsystem.component.table.model.TableModel
import org.hisp.dhis.mobile.ui.designsystem.component.table.model.TableRowModel
import org.hisp.dhis.mobile.ui.designsystem.theme.DHIS2Theme
import org.koin.compose.KoinApplication
import org.koin.core.module.dsl.viewModel
Expand Down Expand Up @@ -100,54 +98,90 @@ fun previewModules(useVerticalTabs: Boolean) = module {
override fun getRenderingConfig(dataSetUid: String) =
DataSetRenderingConfig(useVerticalTabs)

override suspend fun getDataSetSectionData(
override fun dataSetInstanceConfiguration(
dataSetUid: String,
orgUnitUid: String,
periodId: String,
orgUnitUid: String,
attrOptionComboUid: String,
sectionUid: String,
): List<TableModel> {
return listOf(
TableModel(
id = "tableId",
title = "Table Title",
tableHeaderModel = TableHeader(
rows = listOf(
TableHeaderRow(
cells = listOf(
TableHeaderCell(value = "Header 1"),
TableHeaderCell(value = "Header 2"),
),
),
TableHeaderRow(
cells = listOf(
TableHeaderCell(value = "Header 3"),
TableHeaderCell(value = "Header 4"),
TableHeaderCell(value = "Header 3"),
TableHeaderCell(value = "Header 4"),
),
),
),
hasTotals = false,
) = DataSetInstanceConfiguration(
hasDataElementDecoration = true,
compulsoryDataElements = emptyList(),
allDataSetElements = listOf(
CellElement(
"uid1",
"catCombo1",
"Row 1",
null,
false,
),
),
greyedOutFields = emptyList(),
editable = true,
)

override fun getDataSetInstanceSectionCells(
dataSetElements: List<CellElement>,
dataSetUid: String,
sectionUid: String,
): List<DataSetInstanceSectionData> = listOf(
DataSetInstanceSectionData(
uid = "catCombo1",
label = "CatCombo 1",
subgroups = listOf(
"Cat 1",
"Cat 2",
),
cellElements = listOf(
CellElement(
"uid1",
"catCombo1",
"Row 1",
null,
false,
),
tableRows = buildList {
repeat(5) {
add(
TableRowModel(
rowHeader = RowHeader(
id = "row_$it",
title = "Row $it",
row = 0,
),
values = emptyMap(),
),
)
}
},
overwrittenValues = emptyMap(),
),
),
)

override fun getTableGroupHeaders(categoryUids: List<String>): List<List<String>> =
listOf(
listOf("Cat Option 1.1", "Cat Option 1.2"),
listOf("Cat Option 2.1", "Cat Option 2.2"),
)

override fun dataSetInstanceSectionConfiguration(sectionUid: String) =
DataSetInstanceSectionConfiguration(
showRowTotals = true,
)

override fun conflicts(
dataSetUid: String,
periodId: String,
orgUnitUid: String,
attrOptionComboUid: String,
dataElementUid: String,
categoryOptionComboUid: String,
): Pair<List<String>, List<String>> = Pair(
emptyList(),
emptyList(),
)

override fun cellValue(
periodId: String,
orgUnitUid: String,
dataElementUid: String,
categoryOptionComboUid: String,
attrOptionComboUid: String,
): String? = null

override fun categoryOptionCombinations(categoryUids: List<String>): List<String> =
listOf(
"catOptionCombo1",
"catOptionCombo2",
"catOptionCombo3",
"catOptionCombo4",
)
}
}
}

Expand Down Expand Up @@ -175,6 +209,6 @@ fun previewModules(useVerticalTabs: Boolean) = module {
}

viewModel {
DataSetTableViewModel(get(), get(), get(), get())
DataSetTableViewModel(get(), get(), get(), get(), get())
}
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
package org.dhis2.mobile.aggregates.data

import org.dhis2.mobile.aggregates.model.CellElement
import org.dhis2.mobile.aggregates.model.DataSetDetails
import org.dhis2.mobile.aggregates.model.DataSetInstanceConfiguration
import org.dhis2.mobile.aggregates.model.DataSetInstanceSectionConfiguration
import org.dhis2.mobile.aggregates.model.DataSetInstanceSectionData
import org.dhis2.mobile.aggregates.model.DataSetRenderingConfig
import org.dhis2.mobile.aggregates.model.DataSetSection
import org.hisp.dhis.mobile.ui.designsystem.component.table.model.TableModel

internal interface DataSetInstanceRepository {
fun getDataSetInstance(
Expand All @@ -21,11 +24,38 @@ internal interface DataSetInstanceRepository {
dataSetUid: String,
): DataSetRenderingConfig

suspend fun getDataSetSectionData(
fun dataSetInstanceConfiguration(
dataSetUid: String,
orgUnitUid: String,
periodId: String,
orgUnitUid: String,
attrOptionComboUid: String,
sectionUid: String,
): List<TableModel>
): DataSetInstanceConfiguration

fun getDataSetInstanceSectionCells(
dataSetElements: List<CellElement>,
dataSetUid: String,
sectionUid: String,
): List<DataSetInstanceSectionData>

fun getTableGroupHeaders(categoryUids: List<String>): List<List<String>>
fun dataSetInstanceSectionConfiguration(sectionUid: String): DataSetInstanceSectionConfiguration?
fun conflicts(
dataSetUid: String,
periodId: String,
orgUnitUid: String,
attrOptionComboUid: String,
dataElementUid: String,
categoryOptionComboUid: String,
): Pair<List<String>, List<String>>

fun cellValue(
periodId: String,
orgUnitUid: String,
dataElementUid: String,
categoryOptionComboUid: String,
attrOptionComboUid: String,
): String?

fun categoryOptionCombinations(categoryUids: List<String>): List<String>
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package org.dhis2.mobile.aggregates.data

interface ValueParser {
fun parseValue(uid: String, value: String): String?
}
Original file line number Diff line number Diff line change
@@ -1,16 +1,26 @@
package org.dhis2.mobile.aggregates.di

import kotlinx.coroutines.Dispatchers
import org.dhis2.mobile.aggregates.domain.GetDataSetInstanceDetails
import org.dhis2.mobile.aggregates.domain.GetDataSetRenderingConfig
import org.dhis2.mobile.aggregates.domain.GetDataSetSectionData
import org.dhis2.mobile.aggregates.domain.GetDataSetSections
import org.dhis2.mobile.aggregates.ui.dispatcher.Dispatcher
import org.dhis2.mobile.aggregates.ui.viewModel.DataSetTableViewModel
import org.koin.core.module.Module
import org.koin.core.module.dsl.viewModel
import org.koin.core.parameter.parametersOf
import org.koin.dsl.module

internal val featureModule = module {
factory {
Dispatcher(
io = { Dispatchers.IO },
main = { Dispatchers.Main },
default = { Dispatchers.Default },
)
}

factory { params ->
GetDataSetInstanceDetails(
dataSetUid = params.get(),
Expand Down Expand Up @@ -42,6 +52,7 @@ internal val featureModule = module {
periodId = params.get(),
attrOptionComboUid = params.get(),
dataSetInstanceRepository = get(),
valueParser = get(),
)
}

Expand Down Expand Up @@ -69,6 +80,7 @@ internal val featureModule = module {
getDataSetSectionData = get {
parametersOf(dataSetUid, orgUnitUid, periodId, attrOptionComboUid)
},
dispatcher = get(),
)
}
}
Expand Down
Loading

0 comments on commit bdce474

Please sign in to comment.