Create ContributesNode annotation to generate module and assistedFactory for node.

This commit is contained in:
ganfra 2023-01-05 11:22:38 +01:00
parent a37cf3adde
commit 4fb063654f
4 changed files with 165 additions and 27 deletions

View file

@ -1,19 +0,0 @@
package io.element.android.x.features.roomlist
import com.squareup.anvil.annotations.ContributesTo
import dagger.Binds
import dagger.Module
import dagger.multibindings.IntoMap
import io.element.android.x.architecture.AssistedNodeFactory
import io.element.android.x.architecture.NodeKey
import io.element.android.x.di.SessionScope
@Module
@ContributesTo(SessionScope::class)
abstract class RoomListModule {
@Binds
@IntoMap
@NodeKey(RoomListNode::class)
abstract fun bindRoomListNodeFactory(factory: RoomListNode.Factory): AssistedNodeFactory<*>
}

View file

@ -9,24 +9,20 @@ import com.bumble.appyx.core.node.Node
import com.bumble.appyx.core.plugin.Plugin
import com.bumble.appyx.core.plugin.plugins
import dagger.assisted.Assisted
import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject
import io.element.android.x.architecture.AssistedNodeFactory
import io.element.android.x.anvilannotations.ContributesNode
import io.element.android.x.architecture.presenterConnector
import io.element.android.x.di.SessionScope
import io.element.android.x.features.roomlist.model.RoomListEvents
import io.element.android.x.matrix.core.RoomId
import io.element.android.x.architecture.presenterConnector
@ContributesNode(SessionScope::class)
class RoomListNode @AssistedInject constructor(
@Assisted buildContext: BuildContext,
@Assisted plugins: List<Plugin>,
presenter: RoomListPresenter,
) : Node(buildContext, plugins = plugins) {
@AssistedFactory
interface Factory : AssistedNodeFactory<RoomListNode> {
override fun create(buildContext: BuildContext, plugins: List<Plugin>): RoomListNode
}
interface Callback : Plugin {
fun onRoomClicked(roomId: RoomId)
}