Browse Source

added tags to warmonger card

sirekanian 2 năm trước cách đây
mục cha
commit
71d56ac9b4

+ 1 - 0
app/src/main/java/com/sirekanian/warmongr/D.kt

@@ -30,6 +30,7 @@ object D {
     val cardSelectedCornerSize = 12.dp
     val cardDefaultElevation = 2.dp
     val cardSelectedElevation = 4.dp
+    val cardTagsPaddings = PaddingValues(0.dp, 16.dp, 0.dp, 0.dp)
     val progressSize = 2.dp
     val dialogTitlePadding = 16.dp
     val menuIconPadding = 16.dp

+ 1 - 1
app/src/main/java/com/sirekanian/warmongr/MainActivity.kt

@@ -60,7 +60,7 @@ class MainActivity : ComponentActivity() {
                                     .height(D.toolbarSize)
                             ) {
                                 MainToolbar(state.search)
-                                MainTags(state.search, tags)
+                                MainTags(D.tagsPaddings, state.search, tags)
                             }
                             MainProgress(insets, state.progress)
                         },

+ 6 - 3
app/src/main/java/com/sirekanian/warmongr/MainPresenter.kt

@@ -20,10 +20,13 @@ class MainPresenterImpl(
     private val state: MainState,
 ) : MainPresenter {
 
-    override suspend fun getWarmongers(): List<WarmongerModel> =
-        repository.getWarmongers(state.search.fullQuery).map { warmonger ->
-            Warmonger.toModel(warmonger, state.isCyrillic)
+    override suspend fun getWarmongers(): List<WarmongerModel> {
+        val allTags = getTags().associateBy(TagModel::id)
+        return repository.getWarmongers(state.search.fullQuery).map { warmonger ->
+            val tags = warmonger.tags.mapNotNull { allTags[it] }
+            Warmonger.toModel(warmonger, tags, state.isCyrillic)
         }
+    }
 
     override suspend fun getTags(): List<TagModel> =
         repository.getTags().map { tag ->

+ 1 - 1
app/src/main/java/com/sirekanian/warmongr/WarmongerModel.kt

@@ -1,5 +1,5 @@
 package com.sirekanian.warmongr
 
-class WarmongerModel(val id: Int, val title: String, val description: String) {
+class WarmongerModel(val id: Int, val title: String, val description: String, val tags: List<TagModel>) {
     val content get() = "$title\n\n$description"
 }

+ 7 - 2
app/src/main/java/com/sirekanian/warmongr/data/Warmonger.kt

@@ -1,5 +1,6 @@
 package com.sirekanian.warmongr.data
 
+import com.sirekanian.warmongr.TagModel
 import com.sirekanian.warmongr.WarmongerModel
 import com.sirekanian.warmongr.data.local.WarmongerEntity
 import com.sirekanian.warmongr.data.remote.WarmongerDto
@@ -9,6 +10,7 @@ class Warmonger(
     val cyrillicName: String,
     val name: String,
     val notes: String,
+    val tags: List<Int>,
 ) {
 
     companion object {
@@ -19,6 +21,7 @@ class Warmonger(
                 cyrillicName = dto.`0`,
                 name = dto.`1`.ifEmpty { dto.`0` },
                 notes = dto.`4`,
+                tags = listOf(), // TODO: 1202468796234411
             )
 
         fun fromEntity(entity: WarmongerEntity): Warmonger =
@@ -27,6 +30,7 @@ class Warmonger(
                 cyrillicName = entity.cyrillicName,
                 name = entity.name,
                 notes = entity.notes,
+                tags = entity.tags.split(" ").map(String::toInt),
             )
 
         fun toEntity(warmonger: Warmonger): WarmongerEntity =
@@ -38,11 +42,12 @@ class Warmonger(
                 tags = "" // TODO: 1202468796234411
             )
 
-        fun toModel(warmonger: Warmonger, isCyrillic: Boolean): WarmongerModel =
+        fun toModel(warmonger: Warmonger, tags: List<TagModel>, cyrillic: Boolean): WarmongerModel =
             WarmongerModel(
                 id = warmonger.id,
-                title = if (isCyrillic) warmonger.cyrillicName else warmonger.name,
+                title = if (cyrillic) warmonger.cyrillicName else warmonger.name,
                 description = warmonger.notes,
+                tags = tags,
             )
 
     }

+ 1 - 1
app/src/main/java/com/sirekanian/warmongr/ui/MainContent.kt

@@ -29,7 +29,7 @@ fun MainContent(insets: PaddingValues, state: MainState, data: List<WarmongerMod
         verticalArrangement = Arrangement.spacedBy(D.cardsSpacing)
     ) {
         items(data) { item ->
-            WarmongerCard(state.dialog, item)
+            WarmongerCard(state, item)
         }
     }
 }

+ 2 - 2
app/src/main/java/com/sirekanian/warmongr/ui/MainTags.kt

@@ -17,11 +17,11 @@ import com.sirekanian.warmongr.ext.AdvancedAnimatedVisibility
 import com.sirekanian.warmongr.ui.icons.IconDone
 
 @Composable
-fun MainTags(searchState: SearchState, tags: List<TagModel>) {
+fun MainTags(paddings: PaddingValues, searchState: SearchState, tags: List<TagModel>) {
     Row(
         modifier = Modifier
             .horizontalScroll(rememberScrollState())
-            .padding(D.tagsPaddings),
+            .padding(paddings),
         horizontalArrangement = Arrangement.spacedBy(D.tagsSpacing),
     ) {
         tags.forEach { tag ->

+ 8 - 5
app/src/main/java/com/sirekanian/warmongr/ui/WarmongerCard.kt

@@ -15,12 +15,10 @@ import androidx.compose.ui.Modifier
 import androidx.compose.ui.draw.alpha
 import androidx.compose.ui.text.style.TextOverflow
 import androidx.compose.ui.unit.dp
-import com.sirekanian.warmongr.D
-import com.sirekanian.warmongr.DialogState
-import com.sirekanian.warmongr.WarmongerModel
+import com.sirekanian.warmongr.*
 
 @Composable
-fun WarmongerCard(dialogState: DialogState, warmonger: WarmongerModel) {
+fun WarmongerCard(state: MainState, warmonger: WarmongerModel) {
     var isExpanded by remember { mutableStateOf(false) }
     val surfaceCornerSize by animateDpAsState(
         if (isExpanded) {
@@ -42,10 +40,11 @@ fun WarmongerCard(dialogState: DialogState, warmonger: WarmongerModel) {
         elevation = surfaceElevation
     ) {
         WarmongerCardContent(
+            searchState = state.search,
             warmonger = warmonger,
             isExpanded = isExpanded,
             onClick = { isExpanded = !isExpanded },
-            onLongClick = { dialogState.show(warmonger) },
+            onLongClick = { state.dialog.show(warmonger) },
         )
     }
 }
@@ -53,6 +52,7 @@ fun WarmongerCard(dialogState: DialogState, warmonger: WarmongerModel) {
 @OptIn(ExperimentalFoundationApi::class)
 @Composable
 private fun WarmongerCardContent(
+    searchState: SearchState,
     warmonger: WarmongerModel,
     isExpanded: Boolean,
     onClick: () -> Unit,
@@ -77,5 +77,8 @@ private fun WarmongerCardContent(
             maxLines = if (isExpanded) Int.MAX_VALUE else 2,
             overflow = TextOverflow.Ellipsis
         )
+        if (isExpanded) {
+            MainTags(D.cardTagsPaddings, searchState, warmonger.tags)
+        }
     }
 }