mirror of
https://github.com/msfjarvis/compose-lobsters
synced 2025-08-17 14:27:02 +05:30
all: reformat with ktfmt google style
Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
This commit is contained in:
parent
8448910628
commit
db07a12be5
54 changed files with 496 additions and 656 deletions
|
@ -6,9 +6,7 @@ plugins {
|
|||
`lobsters-plugin`
|
||||
}
|
||||
|
||||
repositories {
|
||||
maven("https://maven.pkg.jetbrains.space/public/p/compose/dev")
|
||||
}
|
||||
repositories { maven("https://maven.pkg.jetbrains.space/public/p/compose/dev") }
|
||||
|
||||
dependencies {
|
||||
implementation(project(":api"))
|
||||
|
@ -22,8 +20,4 @@ dependencies {
|
|||
implementation(Dependencies.ThirdParty.Retrofit.moshi)
|
||||
}
|
||||
|
||||
compose.desktop {
|
||||
application {
|
||||
mainClass = "dev.msfjarvis.lobsters.ui.Main"
|
||||
}
|
||||
}
|
||||
compose.desktop { application { mainClass = "dev.msfjarvis.lobsters.ui.Main" } }
|
||||
|
|
|
@ -8,12 +8,12 @@ import retrofit2.converter.moshi.MoshiConverterFactory
|
|||
import retrofit2.create
|
||||
|
||||
class ApiRepository {
|
||||
private val moshi = Moshi.Builder()
|
||||
.build()
|
||||
private val retrofit = Retrofit.Builder()
|
||||
.baseUrl(LobstersApi.BASE_URL)
|
||||
.addConverterFactory(MoshiConverterFactory.create(moshi))
|
||||
.build()
|
||||
private val moshi = Moshi.Builder().build()
|
||||
private val retrofit =
|
||||
Retrofit.Builder()
|
||||
.baseUrl(LobstersApi.BASE_URL)
|
||||
.addConverterFactory(MoshiConverterFactory.create(moshi))
|
||||
.build()
|
||||
private val api: LobstersApi = retrofit.create()
|
||||
|
||||
suspend fun loadPosts(pageNumber: Int): List<LobstersPost> {
|
||||
|
|
|
@ -29,16 +29,11 @@ fun LobstersItem(
|
|||
post: SavedPost,
|
||||
) {
|
||||
Surface(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.clickable {
|
||||
UrlLauncher.launch(post.url)
|
||||
}
|
||||
.wrapContentHeight(),
|
||||
modifier =
|
||||
Modifier.fillMaxWidth().clickable { UrlLauncher.launch(post.url) }.wrapContentHeight(),
|
||||
) {
|
||||
Row(
|
||||
modifier = Modifier
|
||||
.padding(start = 12.dp, end = 24.dp),
|
||||
modifier = Modifier.padding(start = 12.dp, end = 24.dp),
|
||||
verticalAlignment = Alignment.CenterVertically,
|
||||
horizontalArrangement = Arrangement.SpaceBetween,
|
||||
) {
|
||||
|
@ -49,26 +44,21 @@ fun LobstersItem(
|
|||
text = post.title,
|
||||
color = titleColor,
|
||||
fontWeight = FontWeight.Bold,
|
||||
modifier = Modifier
|
||||
.padding(top = 4.dp),
|
||||
modifier = Modifier.padding(top = 4.dp),
|
||||
)
|
||||
TagRow(
|
||||
tags = post.tags,
|
||||
modifier = Modifier
|
||||
.padding(top = 8.dp, bottom = 8.dp, end = 16.dp),
|
||||
modifier = Modifier.padding(top = 8.dp, bottom = 8.dp, end = 16.dp),
|
||||
)
|
||||
Row {
|
||||
KamelImage(
|
||||
resource = lazyImageResource(data = URI(post.submitterAvatarUrl)),
|
||||
contentDescription = "${post.submitterName}'s avatar",
|
||||
modifier = Modifier
|
||||
.requiredWidth(30.dp)
|
||||
.padding(4.dp),
|
||||
modifier = Modifier.requiredWidth(30.dp).padding(4.dp),
|
||||
)
|
||||
Text(
|
||||
text = "Submitted by ${post.submitterName}",
|
||||
modifier = Modifier
|
||||
.padding(4.dp),
|
||||
modifier = Modifier.padding(4.dp),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -87,9 +77,9 @@ fun TagRow(
|
|||
tags.forEach { tag ->
|
||||
Text(
|
||||
text = tag,
|
||||
modifier = Modifier
|
||||
.background(Color(0xFFFFFCD7), RoundedCornerShape(8.dp))
|
||||
.padding(horizontal = 8.dp),
|
||||
modifier =
|
||||
Modifier.background(Color(0xFFFFFCD7), RoundedCornerShape(8.dp))
|
||||
.padding(horizontal = 8.dp),
|
||||
color = Color.DarkGray,
|
||||
)
|
||||
}
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
@file:JvmName("Main")
|
||||
|
||||
package dev.msfjarvis.lobsters.ui
|
||||
|
||||
import androidx.compose.desktop.Window
|
||||
|
@ -12,15 +13,15 @@ import androidx.compose.foundation.rememberScrollbarAdapter
|
|||
import androidx.compose.foundation.verticalScroll
|
||||
import androidx.compose.material.Text
|
||||
import androidx.compose.runtime.CompositionLocalProvider
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.rememberCoroutineScope
|
||||
import androidx.compose.runtime.setValue
|
||||
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.data.local.SavedPost
|
||||
import dev.msfjarvis.lobsters.model.LobstersPost
|
||||
import dev.msfjarvis.lobsters.ui.urllauncher.LocalUrlLauncher
|
||||
import dev.msfjarvis.lobsters.ui.urllauncher.UrlLauncher
|
||||
|
@ -31,44 +32,37 @@ import kotlinx.coroutines.withContext
|
|||
val repository = ApiRepository()
|
||||
|
||||
@OptIn(ExperimentalStdlibApi::class)
|
||||
fun main() = Window(title = "Claw for lobste.rs") {
|
||||
val urlLauncher = UrlLauncher()
|
||||
val coroutineScope = rememberCoroutineScope()
|
||||
var items by remember { mutableStateOf(emptyList<SavedPost>()) }
|
||||
coroutineScope.launch {
|
||||
withContext(Dispatchers.IO) {
|
||||
items = repository.loadPosts(0).map(::toDbModel)
|
||||
fun main() =
|
||||
Window(title = "Claw for lobste.rs") {
|
||||
val urlLauncher = UrlLauncher()
|
||||
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)
|
||||
LobstersTheme {
|
||||
Box(
|
||||
modifier = Modifier
|
||||
.fillMaxSize()
|
||||
.verticalScroll(stateVertical),
|
||||
modifier = Modifier.fillMaxSize(),
|
||||
) {
|
||||
if (items.isEmpty()) {
|
||||
Text("Loading...")
|
||||
} else {
|
||||
CompositionLocalProvider(LocalUrlLauncher provides urlLauncher) {
|
||||
Column {
|
||||
items.forEach {
|
||||
LobstersItem(it)
|
||||
}
|
||||
val stateVertical = rememberScrollState(0)
|
||||
Box(
|
||||
modifier = Modifier.fillMaxSize().verticalScroll(stateVertical),
|
||||
) {
|
||||
if (items.isEmpty()) {
|
||||
Text("Loading...")
|
||||
} else {
|
||||
CompositionLocalProvider(LocalUrlLauncher provides urlLauncher) {
|
||||
Column { items.forEach { LobstersItem(it) } }
|
||||
}
|
||||
}
|
||||
}
|
||||
VerticalScrollbar(
|
||||
modifier = Modifier.align(Alignment.CenterEnd).fillMaxHeight(),
|
||||
adapter = rememberScrollbarAdapter(stateVertical),
|
||||
)
|
||||
}
|
||||
VerticalScrollbar(
|
||||
modifier = Modifier.align(Alignment.CenterEnd).fillMaxHeight(),
|
||||
adapter = rememberScrollbarAdapter(stateVertical),
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun toDbModel(post: LobstersPost): SavedPost {
|
||||
return SavedPost(
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
@file:Suppress("UNUSED")
|
||||
|
||||
package dev.msfjarvis.lobsters.ui
|
||||
|
||||
import androidx.compose.material.MaterialTheme
|
||||
|
@ -9,33 +10,32 @@ import androidx.compose.ui.graphics.Color
|
|||
|
||||
val titleColor = Color(0xFF7395D9)
|
||||
|
||||
val lightColors = lightColors(
|
||||
primary = Color.White,
|
||||
secondary = Color(0xFF6C0000),
|
||||
background = Color.White,
|
||||
surface = Color.White,
|
||||
onPrimary = Color.DarkGray,
|
||||
onSecondary = Color.White,
|
||||
onBackground = Color.White,
|
||||
onSurface = Color.White,
|
||||
)
|
||||
val lightColors =
|
||||
lightColors(
|
||||
primary = Color.White,
|
||||
secondary = Color(0xFF6C0000),
|
||||
background = Color.White,
|
||||
surface = Color.White,
|
||||
onPrimary = Color.DarkGray,
|
||||
onSecondary = Color.White,
|
||||
onBackground = Color.White,
|
||||
onSurface = Color.White,
|
||||
)
|
||||
|
||||
val darkColors = darkColors(
|
||||
primary = Color.White,
|
||||
secondary = Color(0xFF6C0000),
|
||||
background = Color.Black,
|
||||
surface = Color.Black,
|
||||
onPrimary = Color.Black,
|
||||
onSecondary = Color.White,
|
||||
onBackground = Color.White,
|
||||
onSurface = Color.White,
|
||||
)
|
||||
val darkColors =
|
||||
darkColors(
|
||||
primary = Color.White,
|
||||
secondary = Color(0xFF6C0000),
|
||||
background = Color.Black,
|
||||
surface = Color.Black,
|
||||
onPrimary = Color.Black,
|
||||
onSecondary = Color.White,
|
||||
onBackground = Color.White,
|
||||
onSurface = Color.White,
|
||||
)
|
||||
|
||||
@Composable
|
||||
fun LobstersTheme(
|
||||
useLightColors: Boolean = true,
|
||||
children: @Composable () -> Unit
|
||||
) {
|
||||
fun LobstersTheme(useLightColors: Boolean = true, children: @Composable () -> Unit) {
|
||||
MaterialTheme(
|
||||
colors = if (useLightColors) lightColors else darkColors,
|
||||
content = children,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue