compose-lobsters/desktop/src/main/kotlin/dev.msfjarvis.lobsters.ui/Main.kt
Harsh Shandilya c5fafba7b5
desktop: sort everything under packages
Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
2021-03-14 20:01:45 +05:30

78 lines
2.4 KiB
Kotlin

@file:JvmName("Main")
package dev.msfjarvis.lobsters.ui
import androidx.compose.desktop.Window
import androidx.compose.foundation.VerticalScrollbar
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxHeight
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.rememberScrollbarAdapter
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.Text
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import dev.msfjarvis.lobsters.data.local.SavedPost
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import dev.msfjarvis.lobsters.data.ApiRepository
import dev.msfjarvis.lobsters.model.LobstersPost
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
val repository = ApiRepository()
@OptIn(ExperimentalStdlibApi::class)
fun main() = Window(title = "Claw for lobste.rs") {
val coroutineScope = rememberCoroutineScope()
var items by remember { mutableStateOf(emptyList<SavedPost>()) }
coroutineScope.launch {
withContext(Dispatchers.IO) {
items = repository.loadPosts(0).map(::toDbModel)
}
}
LobstersTheme {
Box(
modifier = Modifier.fillMaxSize(),
) {
val stateVertical = rememberScrollState(0)
Box(
modifier = Modifier
.fillMaxSize()
.verticalScroll(stateVertical),
) {
if (items.isEmpty()) {
Text("Loading...")
} else {
Column {
items.forEach {
LobstersItem(it)
}
}
}
}
VerticalScrollbar(
modifier = Modifier.align(Alignment.CenterEnd).fillMaxHeight(),
adapter = rememberScrollbarAdapter(stateVertical),
)
}
}
}
fun toDbModel(post: LobstersPost): SavedPost {
return SavedPost(
shortId = post.shortId,
title = post.title,
url = post.url,
createdAt = post.createdAt,
commentsUrl = post.commentsUrl,
submitterName = post.submitterUser.username,
submitterAvatarUrl = post.submitterUser.avatarUrl,
tags = post.tags,
)
}