Skip to content

Commit 64ac39a

Browse files
author
Arkadii Ivanov
committed
Added onDisposeAction to MviAbstractComponent
1 parent e539db3 commit 64ac39a

File tree

2 files changed

+17
-3
lines changed

2 files changed

+17
-3
lines changed

mvidroid/src/main/java/com/arkivanov/mvidroid/component/MviAbstractComponent.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ import io.reactivex.disposables.CompositeDisposable
1616
*/
1717
abstract class MviAbstractComponent<in UiEvent : Any, out States : Any> @MainThread constructor(
1818
private val stores: List<MviStoreBundle<*, UiEvent>>,
19-
labels: Relay<Any>? = null
19+
labels: Relay<Any>? = null,
20+
private val onDisposeAction: (() -> Unit)? = null
2021
) : MviComponent<UiEvent, States> {
2122

2223
private val disposables = CompositeDisposable()
@@ -41,6 +42,7 @@ abstract class MviAbstractComponent<in UiEvent : Any, out States : Any> @MainThr
4142
it.store.dispose()
4243
}
4344
}
45+
onDisposeAction?.invoke()
4446
}
4547

4648
override fun isDisposed(): Boolean {

mvidroid/src/test/java/com/arkivanov/mvidroid/component/MviAbstractComponentTest.kt

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,13 @@ class MviAbstractComponentTest {
2626
assertTrue(component.isDisposed)
2727
}
2828

29+
@Test
30+
fun `onDisposeAction is called WHEN component is disposed`() {
31+
val onDisposeAction = mock<() -> Unit>()
32+
TestComponent(onDisposeAction = onDisposeAction).dispose()
33+
verify(onDisposeAction)()
34+
}
35+
2936
@Test
3037
fun `store is disposed WHEN not persistent AND component is disposed`() {
3138
TestComponent().dispose()
@@ -75,8 +82,13 @@ class MviAbstractComponentTest {
7582
private inner class TestComponent(
7683
eventTransformer: ((String) -> String?)? = null,
7784
labelTransformer: ((Any) -> String?)? = null,
78-
isPersistent: Boolean = false
79-
) : MviAbstractComponent<String, String>(listOf(MviStoreBundle(store, eventTransformer, labelTransformer, isPersistent)), labels) {
85+
isPersistent: Boolean = false,
86+
onDisposeAction: (() -> Unit)? = null
87+
) : MviAbstractComponent<String, String>(
88+
listOf(MviStoreBundle(store, eventTransformer, labelTransformer, isPersistent)),
89+
labels,
90+
onDisposeAction
91+
) {
8092
override val states: String
8193
get() = throw UnsupportedOperationException()
8294
}

0 commit comments

Comments
 (0)