Skip to content

Commit

Permalink
Update RepliesStatusCellViewHolderViewmodel to RX2 (#1928)
Browse files Browse the repository at this point in the history
Co-authored-by: leighdouglas <leighcdouglas1@gmail.com>
Co-authored-by: Isabel Martin <arkariang@gmail.com>
  • Loading branch information
3 people committed Jan 16, 2024
1 parent d5ce29a commit a20e8f9
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 21 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,11 @@ package com.kickstarter.ui.viewholders

import com.kickstarter.databinding.ItemShowMoreRepliesBinding
import com.kickstarter.libs.rx.transformers.Transformers
import com.kickstarter.libs.utils.extensions.addToDisposable
import com.kickstarter.libs.utils.extensions.toVisibility
import com.kickstarter.viewmodels.RepliesStatusCellViewHolderViewModel
import io.reactivex.disposables.CompositeDisposable

@Suppress("UNCHECKED_CAST")
class RepliesStatusCellViewHolder(
val binding: ItemShowMoreRepliesBinding,
private val viewListener: ViewListener
Expand All @@ -16,26 +17,25 @@ class RepliesStatusCellViewHolder(
fun retryCallback()
}

private val vm: RepliesStatusCellViewHolderViewModel.ViewModel = RepliesStatusCellViewHolderViewModel.ViewModel(environment())
private val vm: RepliesStatusCellViewHolderViewModel.ViewModel = RepliesStatusCellViewHolderViewModel.ViewModel()
private val disposables = CompositeDisposable()

init {
this.vm.outputs.isViewMoreRepliesPaginationVisible()
.compose(bindToLifecycle())
.compose(Transformers.observeForUI())
.compose(Transformers.observeForUIV2())
.subscribe {
binding.viewMorePaginationButton.visibility = it.toVisibility()
}
}.addToDisposable(disposables)

binding.viewMorePaginationButton.setOnClickListener {
viewListener.loadMoreCallback()
}

this.vm.outputs.isErrorPaginationVisible()
.compose(bindToLifecycle())
.compose(Transformers.observeForUI())
.compose(Transformers.observeForUIV2())
.subscribe {
binding.errorPaginationRetryButtonGroup.visibility = it.toVisibility()
}
}.addToDisposable(disposables)

binding.retryButton.setOnClickListener {
viewListener.retryCallback()
Expand All @@ -50,6 +50,12 @@ class RepliesStatusCellViewHolder(
this.vm.inputs.configureWith(data)
}
}

override fun destroy() {
disposables.clear()
vm.clear()
super.destroy()
}
}

enum class RepliesStatusCellType {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
package com.kickstarter.viewmodels

import com.kickstarter.libs.ActivityViewModel
import com.kickstarter.libs.Environment
import com.kickstarter.libs.utils.extensions.addToDisposable
import com.kickstarter.ui.viewholders.RepliesStatusCellType
import com.kickstarter.ui.viewholders.RepliesStatusCellViewHolder
import rx.Observable
import rx.subjects.BehaviorSubject
import io.reactivex.Observable
import io.reactivex.disposables.CompositeDisposable
import io.reactivex.subjects.BehaviorSubject

interface RepliesStatusCellViewHolderViewModel {
interface Inputs {
Expand All @@ -17,17 +16,18 @@ interface RepliesStatusCellViewHolderViewModel {
fun isErrorPaginationVisible(): Observable<Boolean>
}

class ViewModel(environment: Environment) : ActivityViewModel<RepliesStatusCellViewHolder>(environment), Inputs, Outputs {
class ViewModel : Inputs, Outputs {
private val isViewMoreRepliesPaginationVisible = BehaviorSubject.create<Boolean>()
private val isErrorPaginationVisible = BehaviorSubject.create<Boolean>()
private val initCellConfig = BehaviorSubject.create<RepliesStatusCellType>()

val inputs = this
val outputs = this

private val disposables = CompositeDisposable()

init {
this.initCellConfig
.compose(bindToLifecycle())
.subscribe {
when (it) {
RepliesStatusCellType.VIEW_MORE -> {
Expand All @@ -43,14 +43,18 @@ interface RepliesStatusCellViewHolderViewModel {
this.isViewMoreRepliesPaginationVisible.onNext(false)
}
}
}
}.addToDisposable(disposables)
}

// - Inputs
override fun configureWith(cellType: RepliesStatusCellType) = this.initCellConfig.onNext(cellType)
override fun configureWith(configureCellWith: RepliesStatusCellType) = this.initCellConfig.onNext(configureCellWith)

// - Outputs
override fun isViewMoreRepliesPaginationVisible(): Observable<Boolean> = this.isViewMoreRepliesPaginationVisible
override fun isErrorPaginationVisible(): Observable<Boolean> = this.isErrorPaginationVisible

fun clear() {
disposables.clear()
}
}
}
Original file line number Diff line number Diff line change
@@ -1,20 +1,26 @@
package com.kickstarter.viewmodels

import com.kickstarter.KSRobolectricTestCase
import com.kickstarter.libs.utils.extensions.addToDisposable
import com.kickstarter.ui.viewholders.RepliesStatusCellType
import io.reactivex.disposables.CompositeDisposable
import io.reactivex.subscribers.TestSubscriber
import org.junit.Test
import rx.observers.TestSubscriber

class RepliesStatusCellViewHolderViewModelTest : KSRobolectricTestCase() {
private lateinit var vm: RepliesStatusCellViewHolderViewModel.ViewModel

private val isViewMoreRepliesPaginationVisible = TestSubscriber<Boolean>()
private val isErrorPaginationVisible = TestSubscriber<Boolean>()
private val disposables = CompositeDisposable()

private fun setupEnvironment() {
this.vm = RepliesStatusCellViewHolderViewModel.ViewModel(environment())
this.vm.outputs.isViewMoreRepliesPaginationVisible().subscribe(isViewMoreRepliesPaginationVisible)
this.vm.outputs.isErrorPaginationVisible().subscribe(isErrorPaginationVisible)
this.vm = RepliesStatusCellViewHolderViewModel.ViewModel()
this.vm.outputs.isViewMoreRepliesPaginationVisible()
.subscribe { isViewMoreRepliesPaginationVisible.onNext(it) }
.addToDisposable(disposables)
this.vm.outputs.isErrorPaginationVisible().subscribe { isErrorPaginationVisible.onNext(it) }
.addToDisposable(disposables)
}

@Test
Expand Down

0 comments on commit a20e8f9

Please sign in to comment.