data class MultipleParamValueVM(val paramValue: ParamValue, var isChecked: Boolean){ companion object { fun createVMs(paramBundle: ParamBundle): List? { return paramBundle.param() .values() ?.map { paramValue -> val chosenParam = paramBundle.chosenParam() if (chosenParam != null) { val multipleChosenParam = chosenParam as MultipleChoiceParam val isChecked = ListUtils.containsType(multipleChosenParam.paramValues(), paramValue, { chosen, filter -> chosen.id() == filter.id() }) return@map MultipleParamValueVM(paramValue, isChecked) } return@map MultipleParamValueVM(paramValue, false) } } fun createCheckedVMs(paramBundle: ParamBundle?, items: List, search: String): List? { return paramBundle ?.param() ?.values() ?.let { paramValues -> return@let paramValues .asSequence() .filter { paramValue -> val sameItem = ListUtils.findByType(items, paramValue) { item, type -> item.paramValue.id() == type.id() } val isInsideList = paramValue.value() ?.toLowerCase() ?.startsWith(search.toLowerCase()) == true val isChecked = sameItem?.isChecked ?: false isChecked || isInsideList } .map { paramValue -> val sameItem = ListUtils.findByType(items, paramValue) { item, type -> item.paramValue.id() == type.id() } MultipleParamValueVM(paramValue, sameItem?.isChecked ?: false) } .toList() } } } }