change(space) : last admin navigate to security&privacy

This commit is contained in:
ganfra 2025-12-15 20:46:23 +01:00
parent 591eac83bd
commit a21b66b862
4 changed files with 19 additions and 10 deletions

View file

@ -65,7 +65,7 @@ class SpaceFlowNode(
data object Root : NavTarget data object Root : NavTarget
@Parcelize @Parcelize
data object Settings : NavTarget data class Settings(val initialTarget: SpaceSettingsFlowNode.NavTarget = SpaceSettingsFlowNode.NavTarget.Root) : NavTarget
@Parcelize @Parcelize
data object Leave : NavTarget data object Leave : NavTarget
@ -89,7 +89,7 @@ class SpaceFlowNode(
} }
override fun navigateToRolesAndPermissions() { override fun navigateToRolesAndPermissions() {
// TODO backstack.push(NavTarget.Settings(SpaceSettingsFlowNode.NavTarget.RolesAndPermissions))
} }
} }
createNode<LeaveSpaceNode>(buildContext, listOf(callback)) createNode<LeaveSpaceNode>(buildContext, listOf(callback))
@ -101,7 +101,7 @@ class SpaceFlowNode(
} }
override fun navigateToSpaceSettings() { override fun navigateToSpaceSettings() {
backstack.push(NavTarget.Settings) backstack.push(NavTarget.Settings())
} }
override fun navigateToRoomMemberList() { override fun navigateToRoomMemberList() {
@ -114,8 +114,10 @@ class SpaceFlowNode(
} }
createNode<SpaceNode>(buildContext, listOf(callback)) createNode<SpaceNode>(buildContext, listOf(callback))
} }
NavTarget.Settings -> { is NavTarget.Settings -> {
val callback = object : SpaceSettingsFlowNode.Callback { val callback = object : SpaceSettingsFlowNode.Callback {
override fun initialTarget() = navTarget.initialTarget
override fun navigateToSpaceMembers() { override fun navigateToSpaceMembers() {
callback.navigateToRoomMemberList() callback.navigateToRoomMemberList()
} }

View file

@ -132,8 +132,7 @@ fun LeaveSpaceView(
state.eventSink(LeaveSpaceEvents.LeaveSpace) state.eventSink(LeaveSpaceEvents.LeaveSpace)
}, },
onCancel = onCancel, onCancel = onCancel,
// TODO enable when navigation is ready showRolesAndPermissionsButton = state.isLastAdmin,
showRolesAndPermissionsButton = false, // state.isLastAdmin,
onRolesAndPermissionsClick = onRolesAndPermissionsClick, onRolesAndPermissionsClick = onRolesAndPermissionsClick,
) )
} }

View file

@ -39,13 +39,14 @@ class SpaceSettingsFlowNode(
private val roomDetailsEditEntryPoint: RoomDetailsEditEntryPoint private val roomDetailsEditEntryPoint: RoomDetailsEditEntryPoint
) : BaseFlowNode<SpaceSettingsFlowNode.NavTarget>( ) : BaseFlowNode<SpaceSettingsFlowNode.NavTarget>(
backstack = BackStack( backstack = BackStack(
initialElement = NavTarget.Root, initialElement = initialElement(plugins),
savedStateMap = buildContext.savedStateMap, savedStateMap = buildContext.savedStateMap,
), ),
buildContext = buildContext, buildContext = buildContext,
plugins = plugins, plugins = plugins,
) { ) {
interface Callback : Plugin { interface Callback : Plugin {
fun initialTarget(): NavTarget = NavTarget.Root
fun navigateToSpaceMembers() fun navigateToSpaceMembers()
fun startLeaveSpaceFlow() fun startLeaveSpaceFlow()
fun closeSettings() fun closeSettings()
@ -56,7 +57,7 @@ class SpaceSettingsFlowNode(
data object Root : NavTarget data object Root : NavTarget
@Parcelize @Parcelize
data object EditDetails: NavTarget data object EditDetails : NavTarget
@Parcelize @Parcelize
data object SecurityAndPrivacy : NavTarget data object SecurityAndPrivacy : NavTarget
@ -138,3 +139,7 @@ class SpaceSettingsFlowNode(
BackstackView(modifier) BackstackView(modifier)
} }
} }
fun initialElement(plugins: List<Plugin>): SpaceSettingsFlowNode.NavTarget {
return plugins.callback<SpaceSettingsFlowNode.Callback>().initialTarget()
}

View file

@ -10,8 +10,11 @@ package io.element.android.libraries.architecture
import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.node.Node
import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.Plugin
import com.bumble.appyx.core.plugin.plugins
inline fun <reified I : Plugin> Node.callback(): I { inline fun <reified I : Plugin> Node.callback(): I {
return requireNotNull(plugins<I>().singleOrNull()) { "Make sure to actually pass a Callback plugin to your node" } return plugins.callback()
}
inline fun <reified I : Plugin> List<Plugin>.callback(): I {
return requireNotNull(filterIsInstance<I>().singleOrNull()) { "Make sure to actually pass a Callback plugin to your node" }
} }