Add empty create room fab button
This commit is contained in:
parent
c135d2a13c
commit
7fbab8939b
3 changed files with 29 additions and 2 deletions
|
|
@ -31,6 +31,7 @@ import com.bumble.appyx.core.node.ParentNode
|
||||||
import com.bumble.appyx.core.node.node
|
import com.bumble.appyx.core.node.node
|
||||||
import com.bumble.appyx.navmodel.backstack.BackStack
|
import com.bumble.appyx.navmodel.backstack.BackStack
|
||||||
import com.bumble.appyx.navmodel.backstack.operation.push
|
import com.bumble.appyx.navmodel.backstack.operation.push
|
||||||
|
import io.element.android.features.createroom.CreateRoomNode
|
||||||
import io.element.android.features.preferences.PreferencesFlowNode
|
import io.element.android.features.preferences.PreferencesFlowNode
|
||||||
import io.element.android.features.roomlist.RoomListNode
|
import io.element.android.features.roomlist.RoomListNode
|
||||||
import io.element.android.libraries.architecture.animation.rememberDefaultTransitionHandler
|
import io.element.android.libraries.architecture.animation.rememberDefaultTransitionHandler
|
||||||
|
|
@ -86,6 +87,10 @@ class LoggedInFlowNode(
|
||||||
override fun onSettingsClicked() {
|
override fun onSettingsClicked() {
|
||||||
backstack.push(NavTarget.Settings)
|
backstack.push(NavTarget.Settings)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onCreateRoomClicked() {
|
||||||
|
backstack.push(NavTarget.CreateRoom)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sealed interface NavTarget : Parcelable {
|
sealed interface NavTarget : Parcelable {
|
||||||
|
|
@ -97,6 +102,9 @@ class LoggedInFlowNode(
|
||||||
|
|
||||||
@Parcelize
|
@Parcelize
|
||||||
object Settings : NavTarget
|
object Settings : NavTarget
|
||||||
|
|
||||||
|
@Parcelize
|
||||||
|
object CreateRoom : NavTarget
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun resolve(navTarget: NavTarget, buildContext: BuildContext): Node {
|
override fun resolve(navTarget: NavTarget, buildContext: BuildContext): Node {
|
||||||
|
|
@ -120,6 +128,9 @@ class LoggedInFlowNode(
|
||||||
NavTarget.Settings -> {
|
NavTarget.Settings -> {
|
||||||
PreferencesFlowNode(buildContext, onOpenBugReport)
|
PreferencesFlowNode(buildContext, onOpenBugReport)
|
||||||
}
|
}
|
||||||
|
NavTarget.CreateRoom -> {
|
||||||
|
CreateRoomNode(buildContext)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -38,6 +38,7 @@ class RoomListNode @AssistedInject constructor(
|
||||||
interface Callback : Plugin {
|
interface Callback : Plugin {
|
||||||
fun onRoomClicked(roomId: RoomId)
|
fun onRoomClicked(roomId: RoomId)
|
||||||
fun onSettingsClicked()
|
fun onSettingsClicked()
|
||||||
|
fun onCreateRoomClicked()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun onRoomClicked(roomId: RoomId) {
|
private fun onRoomClicked(roomId: RoomId) {
|
||||||
|
|
@ -48,6 +49,10 @@ class RoomListNode @AssistedInject constructor(
|
||||||
plugins<Callback>().forEach { it.onSettingsClicked() }
|
plugins<Callback>().forEach { it.onSettingsClicked() }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun onCreateRoomClicked() {
|
||||||
|
plugins<Callback>().forEach { it.onCreateRoomClicked() }
|
||||||
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
override fun View(modifier: Modifier) {
|
override fun View(modifier: Modifier) {
|
||||||
val state = presenter.present()
|
val state = presenter.present()
|
||||||
|
|
@ -55,7 +60,8 @@ class RoomListNode @AssistedInject constructor(
|
||||||
state = state,
|
state = state,
|
||||||
modifier = modifier,
|
modifier = modifier,
|
||||||
onRoomClicked = this::onRoomClicked,
|
onRoomClicked = this::onRoomClicked,
|
||||||
onOpenSettings = this::onOpenSettings
|
onOpenSettings = this::onOpenSettings,
|
||||||
|
onCreateRoomClicked = this::onCreateRoomClicked,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,7 @@ import androidx.compose.foundation.lazy.LazyColumn
|
||||||
import androidx.compose.foundation.lazy.items
|
import androidx.compose.foundation.lazy.items
|
||||||
import androidx.compose.foundation.lazy.rememberLazyListState
|
import androidx.compose.foundation.lazy.rememberLazyListState
|
||||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||||
|
import androidx.compose.material3.FabPosition
|
||||||
import androidx.compose.material3.TopAppBarDefaults
|
import androidx.compose.material3.TopAppBarDefaults
|
||||||
import androidx.compose.material3.rememberTopAppBarState
|
import androidx.compose.material3.rememberTopAppBarState
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
|
|
@ -42,6 +43,7 @@ import io.element.android.features.roomlist.model.RoomListState
|
||||||
import io.element.android.features.roomlist.model.RoomListStateProvider
|
import io.element.android.features.roomlist.model.RoomListStateProvider
|
||||||
import io.element.android.libraries.designsystem.preview.ElementPreviewDark
|
import io.element.android.libraries.designsystem.preview.ElementPreviewDark
|
||||||
import io.element.android.libraries.designsystem.preview.ElementPreviewLight
|
import io.element.android.libraries.designsystem.preview.ElementPreviewLight
|
||||||
|
import io.element.android.libraries.designsystem.theme.components.FloatingActionButton
|
||||||
import io.element.android.libraries.designsystem.theme.components.Scaffold
|
import io.element.android.libraries.designsystem.theme.components.Scaffold
|
||||||
import io.element.android.libraries.designsystem.utils.LogCompositions
|
import io.element.android.libraries.designsystem.utils.LogCompositions
|
||||||
import io.element.android.libraries.matrix.api.core.RoomId
|
import io.element.android.libraries.matrix.api.core.RoomId
|
||||||
|
|
@ -54,6 +56,7 @@ fun RoomListView(
|
||||||
modifier: Modifier = Modifier,
|
modifier: Modifier = Modifier,
|
||||||
onRoomClicked: (RoomId) -> Unit = {},
|
onRoomClicked: (RoomId) -> Unit = {},
|
||||||
onOpenSettings: () -> Unit = {},
|
onOpenSettings: () -> Unit = {},
|
||||||
|
onCreateRoomClicked: () -> Unit = {},
|
||||||
) {
|
) {
|
||||||
fun onFilterChanged(filter: String) {
|
fun onFilterChanged(filter: String) {
|
||||||
state.eventSink(RoomListEvents.UpdateFilter(filter))
|
state.eventSink(RoomListEvents.UpdateFilter(filter))
|
||||||
|
|
@ -72,6 +75,7 @@ fun RoomListView(
|
||||||
onFilterChanged = ::onFilterChanged,
|
onFilterChanged = ::onFilterChanged,
|
||||||
onOpenSettings = onOpenSettings,
|
onOpenSettings = onOpenSettings,
|
||||||
onScrollOver = ::onVisibleRangedChanged,
|
onScrollOver = ::onVisibleRangedChanged,
|
||||||
|
onCreateRoomClicked = onCreateRoomClicked,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -86,6 +90,7 @@ fun RoomListContent(
|
||||||
onFilterChanged: (String) -> Unit = {},
|
onFilterChanged: (String) -> Unit = {},
|
||||||
onOpenSettings: () -> Unit = {},
|
onOpenSettings: () -> Unit = {},
|
||||||
onScrollOver: (IntRange) -> Unit = {},
|
onScrollOver: (IntRange) -> Unit = {},
|
||||||
|
onCreateRoomClicked: () -> Unit = {},
|
||||||
) {
|
) {
|
||||||
fun onRoomClicked(room: RoomListRoomSummary) {
|
fun onRoomClicked(room: RoomListRoomSummary) {
|
||||||
onRoomClicked(room.roomId)
|
onRoomClicked(room.roomId)
|
||||||
|
|
@ -148,7 +153,12 @@ fun RoomListContent(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
|
floatingActionButton = {
|
||||||
|
FloatingActionButton(onClick = onCreateRoomClicked) {
|
||||||
|
|
||||||
|
}
|
||||||
|
},
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue