8
8
package io.element.android.features.createroom.impl
9
9
10
10
import android.os.Parcelable
11
+ import androidx.compose.foundation.layout.Box
11
12
import androidx.compose.runtime.Composable
13
+ import androidx.compose.runtime.remember
12
14
import androidx.compose.ui.Modifier
13
15
import com.bumble.appyx.core.modality.BuildContext
16
+ import com.bumble.appyx.core.navigation.transition.JumpToEndTransitionHandler
14
17
import com.bumble.appyx.core.node.Node
15
18
import com.bumble.appyx.core.plugin.Plugin
16
19
import com.bumble.appyx.core.plugin.plugins
17
20
import com.bumble.appyx.navmodel.backstack.BackStack
18
- import com.bumble.appyx.navmodel.backstack.operation.push
19
21
import dagger.assisted.Assisted
20
22
import dagger.assisted.AssistedInject
21
23
import io.element.android.anvilannotations.ContributesNode
24
+ import io.element.android.features.createroom.DefaultCreateRoomNavigator
22
25
import io.element.android.features.createroom.api.CreateRoomEntryPoint
23
- import io.element.android.features.createroom.impl.configureroom.ConfigureRoomNode
26
+ import io.element.android.features.createroom.impl.joinbyaddress.JoinRoomByAddressNode
24
27
import io.element.android.features.createroom.impl.root.CreateRoomRootNode
25
28
import io.element.android.libraries.architecture.BackstackView
26
29
import io.element.android.libraries.architecture.BaseFlowNode
30
+ import io.element.android.libraries.architecture.OverlayView
27
31
import io.element.android.libraries.architecture.createNode
28
32
import io.element.android.libraries.di.SessionScope
29
- import io.element.android.libraries.matrix.api.core.RoomId
30
33
import kotlinx.parcelize.Parcelize
31
34
32
35
@ContributesNode(SessionScope ::class )
@@ -47,35 +50,38 @@ class CreateRoomFlowNode @AssistedInject constructor(
47
50
48
51
@Parcelize
49
52
data object NewRoom : NavTarget
53
+
54
+ @Parcelize
55
+ data object JoinByAddress : NavTarget
50
56
}
51
57
58
+ private val navigator = DefaultCreateRoomNavigator (
59
+ backstack = backstack,
60
+ overlay = overlay,
61
+ openRoom = { roomIdOrAlias, viaServers ->
62
+ plugins<CreateRoomEntryPoint .Callback >().forEach { it.onOpenRoom(roomIdOrAlias, viaServers) }
63
+ }
64
+ )
65
+
52
66
override fun resolve (navTarget : NavTarget , buildContext : BuildContext ): Node {
53
67
return when (navTarget) {
54
68
NavTarget .Root -> {
55
- val callback = object : CreateRoomRootNode .Callback {
56
- override fun onCreateNewRoom () {
57
- backstack.push(NavTarget .NewRoom )
58
- }
59
-
60
- override fun onStartChatSuccess (roomId : RoomId ) {
61
- plugins<CreateRoomEntryPoint .Callback >().forEach { it.onSuccess(roomId) }
62
- }
63
- }
64
- createNode<CreateRoomRootNode >(buildContext = buildContext, plugins = listOf (callback))
69
+ createNode<CreateRoomRootNode >(buildContext = buildContext, plugins = listOf (navigator))
65
70
}
66
71
NavTarget .NewRoom -> {
67
- val callback = object : ConfigureRoomNode .Callback {
68
- override fun onCreateRoomSuccess (roomId : RoomId ) {
69
- plugins<CreateRoomEntryPoint .Callback >().forEach { it.onSuccess(roomId) }
70
- }
71
- }
72
- createNode<ConfigureRoomFlowNode >(buildContext = buildContext, plugins = listOf (callback))
72
+ createNode<ConfigureRoomFlowNode >(buildContext = buildContext, plugins = listOf (navigator))
73
+ }
74
+ NavTarget .JoinByAddress -> {
75
+ createNode<JoinRoomByAddressNode >(buildContext = buildContext, plugins = listOf (navigator))
73
76
}
74
77
}
75
78
}
76
79
77
80
@Composable
78
81
override fun View (modifier : Modifier ) {
79
- BackstackView ()
82
+ Box (modifier = modifier) {
83
+ BackstackView ()
84
+ OverlayView (transitionHandler = remember { JumpToEndTransitionHandler () })
85
+ }
80
86
}
81
87
}
0 commit comments