trixnity-messenger-playground

A playground for trixnity-messenger based on jetbrains compose-html
git clone git://archive.git.mtrnord.blog/MTRNord/trixnity-messenger-playground.git
Log | Files | Refs | README

Main.kt (3295B)


      1 import androidx.compose.runtime.Composable
      2 import androidx.compose.runtime.collectAsState
      3 import androidx.compose.runtime.getValue
      4 import androidx.compose.runtime.remember
      5 import com.arkivanov.decompose.DefaultComponentContext
      6 import com.arkivanov.decompose.extensions.compose.jetbrains.subscribeAsState
      7 import com.arkivanov.essenty.lifecycle.LifecycleRegistry
      8 import com.varabyte.kobweb.silk.SilkStyleSheet
      9 import com.varabyte.kobweb.silk.init.initSilk
     10 import com.varabyte.kobweb.silk.init.setSilkVariables
     11 import de.connect2x.trixnity.messenger.DefaultMatrixClientService
     12 import de.connect2x.trixnity.messenger.trixnityMessengerModule
     13 import de.connect2x.trixnity.messenger.viewmodel.RootRouter
     14 import de.connect2x.trixnity.messenger.viewmodel.RootViewModel
     15 import de.connect2x.trixnity.messenger.viewmodel.RootViewModelImpl
     16 import de.connect2x.trixnity.messenger.viewmodel.connecting.MatrixClientInitializationViewModel
     17 import kotlinx.browser.document
     18 import kotlinx.coroutines.ExperimentalCoroutinesApi
     19 import org.jetbrains.compose.web.css.Style
     20 import org.jetbrains.compose.web.css.padding
     21 import org.jetbrains.compose.web.css.px
     22 import org.jetbrains.compose.web.dom.Div
     23 import org.jetbrains.compose.web.dom.Text
     24 import org.jetbrains.compose.web.renderComposable
     25 import org.koin.dsl.koinApplication
     26 import org.w3c.dom.HTMLElement
     27 import pages.Main
     28 
     29 fun main() {
     30     //KotlinLoggingConfiguration.LOG_LEVEL = Level.DEBUG
     31     // Init Kobweb
     32     initSilk()
     33 
     34     val koinApplication = koinApplication {
     35         modules(trixnityMessengerModule())
     36     }
     37     val matrixClientService = DefaultMatrixClientService(koinApplication.koin)
     38     val componentContext = DefaultComponentContext(LifecycleRegistry())
     39 
     40     val rootViewModel = RootViewModelImpl(
     41         componentContext = componentContext,
     42         matrixClientService = matrixClientService,
     43         koinApplication = koinApplication,
     44         initialSyncOnceIsFinished = { finished ->
     45 
     46         }
     47     )
     48     renderComposable(rootElementId = "root") {
     49         // Further Init for kobweb
     50         val root = remember { document.getElementById("root") as HTMLElement }
     51         root.setSilkVariables()
     52         Style(SilkStyleSheet)
     53 
     54         Base(rootViewModel)
     55     }
     56 
     57 }
     58 
     59 @OptIn(ExperimentalCoroutinesApi::class)
     60 @Composable
     61 fun Base(rootViewModel: RootViewModel) {
     62     // Trixnity messenger router
     63     val routerState by rootViewModel.rootStack.subscribeAsState()
     64     when (val route = routerState.active.instance) {
     65         is RootRouter.RootWrapper.MatrixClientInitialization -> {
     66             Init(route.matrixClientInitializationViewModel)
     67         } // show initialization of the MatrixClient (aka loading screen)
     68 
     69         is RootRouter.RootWrapper.Main -> {
     70             Main(route.mainViewModel)
     71         }
     72 
     73         is RootRouter.RootWrapper.AddMatrixAccount -> {
     74             Login(route.addMatrixAccountViewModel)
     75         }
     76 
     77         is RootRouter.RootWrapper.PasswordLogin -> {
     78             PasswordLogin(route.passwordLoginViewModel)
     79         }
     80 
     81         else -> {} // add more cases
     82     }
     83 }
     84 
     85 
     86 @Composable
     87 fun Init(matrixClientInitializationViewModel: MatrixClientInitializationViewModel) {
     88     val initState by matrixClientInitializationViewModel.currentState.collectAsState()
     89     Div({ style { padding(25.px) } }) {
     90         Text(initState)
     91     }
     92 }