[Architecture] introduce nodeBuilder concept

This commit is contained in:
ganfra 2023-03-07 20:31:16 +01:00
parent 49f624afd3
commit 84bfb14bd9
30 changed files with 153 additions and 59 deletions

View file

@ -16,10 +16,20 @@
package io.element.android.features.onboarding.api
import com.bumble.appyx.core.modality.BuildContext
import com.bumble.appyx.core.node.Node
import com.bumble.appyx.core.plugin.Plugin
import io.element.android.libraries.architecture.FeatureEntryPoint
interface OnBoardingEntryPoint : FeatureEntryPoint {
fun nodeBuilder(parentNode: Node, buildContext: BuildContext): NodeBuilder
interface NodeBuilder {
fun callback(callback: Callback): NodeBuilder
fun build(): Node
}
interface Callback : Plugin {
fun onSignUp()
fun onSignIn()

View file

@ -27,7 +27,19 @@ import javax.inject.Inject
@ContributesBinding(AppScope::class)
class DefaultOnBoardingEntryPoint @Inject constructor() : OnBoardingEntryPoint {
override fun node(parentNode: Node, buildContext: BuildContext, plugins: List<Plugin>): Node {
return parentNode.createNode<OnBoardingNode>(buildContext, plugins)
override fun nodeBuilder(parentNode: Node, buildContext: BuildContext): OnBoardingEntryPoint.NodeBuilder {
return object : OnBoardingEntryPoint.NodeBuilder {
val plugins = ArrayList<Plugin>()
override fun callback(callback: OnBoardingEntryPoint.Callback): OnBoardingEntryPoint.NodeBuilder {
plugins += callback
return this
}
override fun build(): Node {
return parentNode.createNode<OnBoardingNode>(buildContext, plugins)
}
}
}
}