diff --git a/jvm/core/src/main/kotlin/com/intuit/playerui/core/player/Player.kt b/jvm/core/src/main/kotlin/com/intuit/playerui/core/player/Player.kt index e13bfb750..134a21491 100644 --- a/jvm/core/src/main/kotlin/com/intuit/playerui/core/player/Player.kt +++ b/jvm/core/src/main/kotlin/com/intuit/playerui/core/player/Player.kt @@ -10,6 +10,7 @@ import com.intuit.playerui.core.constants.ConstantsController import com.intuit.playerui.core.data.DataController import com.intuit.playerui.core.experimental.ExperimentalPlayerApi import com.intuit.playerui.core.expressions.ExpressionController +import com.intuit.playerui.core.flow.Flow import com.intuit.playerui.core.flow.FlowController import com.intuit.playerui.core.flow.FlowResult import com.intuit.playerui.core.logger.TapableLogger @@ -60,11 +61,15 @@ public abstract class Player : Pluggable { /** The hook that creates and manages data */ public val dataController: NodeSyncHook1 + /** Manages validations (schema and x-field ) */ public val validationController: NodeSyncHook1 /** A that's called for state changes in the flow execution */ public val state: NodeSyncHook1 + /** A hook to access the current flow */ + public val onStart: NodeSyncHook1 + public companion object { internal interface HooksByNode : Hooks, NodeWrapper public fun serializer(): KSerializer = Serializer @@ -77,6 +82,7 @@ public abstract class Player : Pluggable { override val dataController: NodeSyncHook1 by NodeSerializableField(NodeSyncHook1.serializer(DataController.serializer())) override val validationController: NodeSyncHook1 by NodeSerializableField(NodeSyncHook1.serializer(ValidationController.serializer())) override val state: NodeSyncHook1 by NodeSerializableField(NodeSyncHook1.serializer(PlayerFlowState.serializer())) + override val onStart: NodeSyncHook1 by NodeSerializableField(NodeSyncHook1.serializer(Flow.serializer())) } internal object Serializer : KSerializer by NodeWrapperSerializer(Hooks::invoke) as KSerializer diff --git a/jvm/core/src/test/kotlin/com/intuit/playerui/core/player/PlayerHooksTest.kt b/jvm/core/src/test/kotlin/com/intuit/playerui/core/player/PlayerHooksTest.kt index e86919fbb..472c5e4de 100644 --- a/jvm/core/src/test/kotlin/com/intuit/playerui/core/player/PlayerHooksTest.kt +++ b/jvm/core/src/test/kotlin/com/intuit/playerui/core/player/PlayerHooksTest.kt @@ -3,6 +3,7 @@ package com.intuit.playerui.core.player import com.intuit.playerui.core.NodeBaseTest import com.intuit.playerui.core.bridge.hooks.NodeSyncHook1 import com.intuit.playerui.core.data.DataController +import com.intuit.playerui.core.flow.Flow import com.intuit.playerui.core.flow.FlowController import com.intuit.playerui.core.player.state.PlayerFlowState import com.intuit.playerui.core.view.ViewController @@ -25,6 +26,9 @@ internal class PlayerHooksTest : NodeBaseTest() { @MockK private lateinit var state: NodeSyncHook1 + @MockK + private lateinit var onStart: NodeSyncHook1 + private val hooks by lazy { Player.Hooks(node) } @@ -36,6 +40,7 @@ internal class PlayerHooksTest : NodeBaseTest() { every { node.getSerializable>("viewController", any()) } returns vc every { node.getSerializable>("dataController", any()) } returns dc every { node.getSerializable>("state", any()) } returns state + every { node.getSerializable>("onStart", any()) } returns onStart every { node.nativeReferenceEquals(any()) } returns true } @@ -61,4 +66,9 @@ internal class PlayerHooksTest : NodeBaseTest() { fun state() { assertNotNull(hooks.state) } + + @Test + fun onStart() { + assertNotNull(hooks.onStart) + } }