Step #3: Consuming a FilterMode
Now, we can update ToDoRepository to help us get at a filtered edition of the to-do items.
First, we need to map from the FilterMode enum to the functions and parameters that we need for ToDoEntity.Store. To handle that, add this function to ToDoRepository:
private fun filteredEntities(filterMode: FilterMode) = when (filterMode) {
FilterMode.ALL -> store.all()
FilterMode.OUTSTANDING -> store.filtered(isCompleted = false)
FilterMode.COMPLETED -> store.filtered(isCompleted = true)
}
Here, we just use Kotlin’s “exhaustive when” to handle the three FilterMode cases, calling the appropriate function on ToDoEntity.Store for each.
Then, replace the items function in ToDoRepository with this implementation:
fun items(filterMode: FilterMode = FilterMode.ALL): Flow<List<ToDoModel>> =
filteredEntities(filterMode).map { all -> all.map { it.toModel() } }
Here, we use the new filteredEntities() function to get the Flow of entities. We have items() use a default value for its filterMode parameter, so a call to items() with no parameters will retrieve the unfiltered list (FilterMode.ALL).
Prev Table of Contents Next
This book is licensed under the Creative Commons Attribution-ShareAlike 4.0 International license.