Skip to content

Commit bc593f5

Browse files
committed
fix: options not hiding/showing with program rules
1 parent 964ef10 commit bc593f5

File tree

2 files changed

+38
-8
lines changed

2 files changed

+38
-8
lines changed

form/src/main/java/org/dhis2/form/data/FormRepositoryImpl.kt

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ class FormRepositoryImpl(
4848
private var runDataIntegrity: Boolean = false
4949
private var calculationLoop: Int = 0
5050
private var backupList: List<FieldUiModel> = emptyList()
51+
private val fieldsWithOptionEffects = mutableListOf<FieldUiModel>()
5152

5253
private val disableCollapsableSections: Boolean? =
5354
dataEntryRepository.disableCollapsableSections()
@@ -522,9 +523,22 @@ class FormRepositoryImpl(
522523
}
523524
}
524525

526+
fieldsWithOptionEffects.forEach { field ->
527+
field.optionSet?.let { optionSetUid ->
528+
fetchOptions(field.uid, optionSetUid)
529+
}
530+
}
531+
532+
fieldsWithOptionEffects.clear()
533+
525534
ruleEffectsResult?.fieldsWithOptionEffects()?.forEach { fieldWithOptionEffect ->
526-
itemList.find { it.uid == fieldWithOptionEffect }?.let {
527-
it.optionSet?.let { optionSetUid -> fetchOptions(it.uid, optionSetUid) }
535+
val item = itemList.find { it.uid == fieldWithOptionEffect }
536+
537+
item?.let { field ->
538+
field.optionSet?.let { optionSetUid ->
539+
fetchOptions(field.uid, optionSetUid)
540+
}
541+
fieldsWithOptionEffects.add(field)
528542
}
529543
}
530544

form/src/main/java/org/dhis2/form/data/metadata/FormBaseConfiguration.kt

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -41,12 +41,28 @@ open class FormBaseConfiguration(private val d2: D2) {
4141
.getPagingData(10)
4242
}.map { pagingData ->
4343
pagingData.filter { option ->
44-
!optionsToHide.contains(option.uid()) &&
45-
!optionGroupsToHide.contains(option.uid()) &&
46-
(
47-
optionGroupsToShow.isEmpty() ||
48-
optionGroupsToShow.contains(option.uid())
49-
)
44+
45+
val optionInGroupToHide = d2.optionModule().optionGroups()
46+
.withOptions()
47+
.byUid().`in`(optionGroupsToHide)
48+
.blockingGet().find { optionGroup ->
49+
optionGroup.options()?.map { it.uid() }?.contains(option.uid()) == true
50+
} != null
51+
52+
val optionInGroupToShow = d2.optionModule().optionGroups()
53+
.withOptions()
54+
.byUid().`in`(optionGroupsToShow)
55+
.blockingGet().find { optionGroup ->
56+
optionGroup.options()?.map { it.uid() }?.contains(option.uid()) == true
57+
} != null
58+
59+
val hideOption = if (optionGroupsToShow.isEmpty()) {
60+
optionsToHide.contains(option.uid()) || optionInGroupToHide
61+
} else {
62+
!optionInGroupToShow
63+
}
64+
65+
!hideOption
5066
}
5167
}
5268
}

0 commit comments

Comments
 (0)