commit f86b19c49b4889d3cc644a542415826f78c8670e
parent 054bca33f71d47fe488eb6c806c93a8fc45bc5b2
Author: MTRNord <mtrnord1@gmail.com>
Date: Wed, 27 Sep 2023 16:25:12 +0200
Feat: Add basic room switching
Diffstat:
2 files changed, 55 insertions(+), 9 deletions(-)
diff --git a/src/jsMain/kotlin/Main.kt b/src/jsMain/kotlin/Main.kt
@@ -14,8 +14,6 @@ import de.connect2x.trixnity.messenger.viewmodel.RootRouter
import de.connect2x.trixnity.messenger.viewmodel.RootViewModel
import de.connect2x.trixnity.messenger.viewmodel.RootViewModelImpl
import de.connect2x.trixnity.messenger.viewmodel.connecting.MatrixClientInitializationViewModel
-import io.github.oshai.kotlinlogging.KotlinLoggingConfiguration
-import io.github.oshai.kotlinlogging.Level
import kotlinx.browser.document
import kotlinx.coroutines.ExperimentalCoroutinesApi
import org.jetbrains.compose.web.css.Style
@@ -29,7 +27,7 @@ import org.w3c.dom.HTMLElement
import pages.Main
fun main() {
- KotlinLoggingConfiguration.LOG_LEVEL = Level.DEBUG
+ //KotlinLoggingConfiguration.LOG_LEVEL = Level.DEBUG
// Init Kobweb
initSilk()
diff --git a/src/jsMain/kotlin/pages/Main.kt b/src/jsMain/kotlin/pages/Main.kt
@@ -8,19 +8,31 @@ import com.varabyte.kobweb.compose.css.Overflow
import com.varabyte.kobweb.compose.css.borderRight
import com.varabyte.kobweb.compose.css.overflowX
import com.varabyte.kobweb.compose.css.overflowY
+import com.varabyte.kobweb.silk.components.forms.Button
import de.connect2x.trixnity.messenger.viewmodel.MainViewModel
+import de.connect2x.trixnity.messenger.viewmodel.room.RoomRouter
+import de.connect2x.trixnity.messenger.viewmodel.room.RoomViewModel
+import de.connect2x.trixnity.messenger.viewmodel.room.timeline.RoomHeaderViewModel
+import de.connect2x.trixnity.messenger.viewmodel.room.timeline.TimelineRouter
import de.connect2x.trixnity.messenger.viewmodel.roomlist.RoomListElementViewModel
import de.connect2x.trixnity.messenger.viewmodel.roomlist.RoomListRouter
import de.connect2x.trixnity.messenger.viewmodel.roomlist.RoomListViewModel
+import io.github.oshai.kotlinlogging.KotlinLogging
+import net.folivo.trixnity.core.model.RoomId
import org.jetbrains.compose.web.css.*
import org.jetbrains.compose.web.dom.Div
import org.jetbrains.compose.web.dom.Text
+private val log = KotlinLogging.logger { }
@Composable
fun Main(mainViewModel: MainViewModel) {
- mainViewModel.start()
+ suspend {
+ mainViewModel.start()
+ }
val roomListData by mainViewModel.roomListRouterStack.subscribeAsState()
+ val roomData by mainViewModel.roomRouterStack.subscribeAsState()
+ val room = roomData.active.instance
val roomList = roomListData.active.instance
@@ -48,6 +60,7 @@ fun Main(mainViewModel: MainViewModel) {
RoomList(roomList.roomListViewModel)
}
}
+
Div({
style {
display(DisplayStyle.Flex)
@@ -57,7 +70,15 @@ fun Main(mainViewModel: MainViewModel) {
padding(4.px)
}
}) {
- Text("Room")
+ when (room) {
+ is RoomRouter.RoomWrapper.None -> {
+ Text("Room")
+ }
+
+ is RoomRouter.RoomWrapper.View -> {
+ Room(room.roomViewModel)
+ }
+ }
}
}
}
@@ -74,16 +95,42 @@ fun RoomList(roomListViewModel: RoomListViewModel) {
})
} else {
rooms.forEach { room ->
- Room(room.second, room.first == selectedRoomId)
+ RoomListItem(room.second, room.first == selectedRoomId) { roomID ->
+ roomListViewModel.selectRoom(roomID)
+ }
}
}
}
@Composable
-fun Room(roomViewModel: RoomListElementViewModel, selected: Boolean) {
+fun RoomListItem(roomViewModel: RoomListElementViewModel, selected: Boolean, selectRoom: (RoomId) -> Unit) {
val roomName by roomViewModel.roomName.collectAsState()
val roomId = roomViewModel.roomId
- Div {
- Text(roomName ?: roomId.full)
+ val roomNameReal = roomName ?: roomId.full
+ Button(onClick = {
+ if (!selected) {
+ // Geht das eleganter?
+ selectRoom(roomId)
+ }
+ }) {
+ Text(roomNameReal)
}
}
+
+@Composable
+fun Room(roomViewModel: RoomViewModel) {
+ val timelineStack by roomViewModel.timelineStack.subscribeAsState()
+ val timeline = timelineStack.active.instance
+ if (timeline is TimelineRouter.TimelineWrapper.View) {
+ val roomHeaderViewModel = timeline.timelineViewModel.roomHeaderViewModel
+
+ RoomHeaderElement(roomHeaderViewModel)
+ }
+}
+
+
+@Composable
+fun RoomHeaderElement(roomHeaderViewModel: RoomHeaderViewModel) {
+ val roomHeaderElement by roomHeaderViewModel.roomHeaderElement.collectAsState()
+ Text(roomHeaderElement.roomName)
+}
+\ No newline at end of file