From dd9937f473a659fc7897e00a83d978f34dc59e4f Mon Sep 17 00:00:00 2001
From: Vusal Aliev <93622997+vusketta@users.noreply.github.com>
Date: Tue, 17 Oct 2023 22:53:48 +0300
Subject: [PATCH] Dashboard main info works!

---
 .../SubscriptionDashBoardActivity.kt          | 101 ++++++------------
 1 file changed, 31 insertions(+), 70 deletions(-)

diff --git a/app/src/main/java/com/threehundredbugs/subscriptio/presentation/SubscriptionDashBoardActivity.kt b/app/src/main/java/com/threehundredbugs/subscriptio/presentation/SubscriptionDashBoardActivity.kt
index 26c3d1a..70cb1d5 100644
--- a/app/src/main/java/com/threehundredbugs/subscriptio/presentation/SubscriptionDashBoardActivity.kt
+++ b/app/src/main/java/com/threehundredbugs/subscriptio/presentation/SubscriptionDashBoardActivity.kt
@@ -3,10 +3,8 @@ package com.threehundredbugs.subscriptio.presentation
 import android.content.Context
 import android.content.Intent
 import android.os.Bundle
-import android.util.Log
+import android.view.SurfaceControl.Transaction
 import android.widget.Toast
-import androidx.compose.runtime.getValue
-import androidx.compose.runtime.setValue
 import androidx.activity.ComponentActivity
 import androidx.activity.compose.setContent
 import androidx.compose.foundation.background
@@ -34,9 +32,11 @@ import androidx.compose.material3.Surface
 import androidx.compose.material3.Text
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.DisposableEffect
+import androidx.compose.runtime.getValue
 import androidx.compose.runtime.mutableStateOf
 import androidx.compose.runtime.remember
 import androidx.compose.runtime.rememberUpdatedState
+import androidx.compose.runtime.setValue
 import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.draw.clip
@@ -51,28 +51,20 @@ import androidx.compose.ui.unit.sp
 import androidx.lifecycle.Lifecycle
 import androidx.lifecycle.LifecycleEventObserver
 import androidx.lifecycle.LifecycleOwner
-import androidx.lifecycle.lifecycleScope
 import com.threehundredbugs.subscriptio.R
 import com.threehundredbugs.subscriptio.data.local.MainDatabase
 import com.threehundredbugs.subscriptio.data.local.repository.SubscriptionRepository
 import com.threehundredbugs.subscriptio.domain.enity.SubscriptionEntity
 import com.threehundredbugs.subscriptio.presentation.ui.theme.SubScriptioTheme
-import kotlinx.coroutines.Dispatchers
-import kotlinx.coroutines.launch
-import kotlinx.coroutines.runBlocking
 
 class SubscriptionDashBoardActivity : ComponentActivity() {
-
     private val subscriptionRepository by lazy {
         SubscriptionRepository(MainDatabase.getInstance(application).subscriptionDao())
     }
 
-
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
-
         setContent {
-
             var subscription by remember {
                 try {
                     mutableStateOf(subscriptionRepository.getAllSubscriptions())
@@ -82,12 +74,8 @@ class SubscriptionDashBoardActivity : ComponentActivity() {
                     mutableStateOf(listOf())
                 }
             }
-
-
-
             HomeScreen(subscription = subscription) {
                 subscription = subscriptionRepository.getAllSubscriptions()
-
             }
         }
     }
@@ -122,11 +110,9 @@ fun HomeScreen(
     SubScriptioTheme {
         Scaffold(
             floatingActionButtonPosition = FabPosition.End,
-            floatingActionButton = {
-                FloatingButton()
-            }, content = { it ->
-                it.apply {
-                }
+            floatingActionButton = { FloatingButton() },
+            content = { it ->
+                it.apply {}
                 Surface(
                     modifier = Modifier
                         .background(MaterialTheme.colorScheme.background)
@@ -137,16 +123,17 @@ fun HomeScreen(
                             bottom = 12.dp
                         )
                 ) {
-
                     Column {
-                        DashBoard()
+                        val activeSubscription = subscription.filter { it.active }
+                        DashBoard(activeSubscription)
                         SubscriptionList(
-                            activeSubscription = subscription.filter { it.active },
+                            activeSubscription = activeSubscription,
                             notActiveSubscription = subscription.filter { !it.active },
                         )
                     }
                 }
-            })
+            }
+        )
     }
 }
 
@@ -158,12 +145,10 @@ fun FloatingButton() {
         contentColor = MaterialTheme.colorScheme.onPrimary,
         onClick = {
             context.startActivity(AddSubscriptionActivity.newInstance(context))
-        },
+        }
     ) {
         Icon(Icons.Filled.Add, "Floating action button.")
     }
-
-
 }
 
 fun testSubscriptionData(): Pair<List<SubscriptionEntity>, List<SubscriptionEntity>> {
@@ -203,9 +188,8 @@ fun testSubscriptionData(): Pair<List<SubscriptionEntity>, List<SubscriptionEnti
     return Pair(activeSubscription, notActiveSubscription)
 }
 
-
 @Composable
-fun DashBoard() {
+fun DashBoard(activeSubscription: List<SubscriptionEntity>) {
     Text(
         text = stringResource(id = R.string.my_subscription),
         fontSize = 26.sp,
@@ -223,8 +207,7 @@ fun DashBoard() {
                 .fillMaxWidth()
                 .padding(start = 20.dp, end = 20.dp, top = 8.dp, bottom = 8.dp),
             horizontalArrangement = Arrangement.SpaceBetween,
-
-            ) {
+        ) {
             Column(
                 horizontalAlignment = Alignment.CenterHorizontally,
             ) {
@@ -235,7 +218,7 @@ fun DashBoard() {
                     fontSize = 18.sp
                 )
                 Text(
-                    text = "20 подписок",
+                    text = getActiveSubscriptionsNumber(activeSubscription.size),
                     color = MaterialTheme.colorScheme.secondary,
                     fontSize = 14.sp,
                     fontWeight = FontWeight.Medium,
@@ -253,7 +236,7 @@ fun DashBoard() {
                     fontSize = 18.sp
                 )
                 Text(
-                    text = "100 р",
+                    text = getMonthAmount(activeSubscription.map { it.sum }),
                     color = MaterialTheme.colorScheme.secondary,
                     fontSize = 14.sp,
                     fontWeight = FontWeight.Medium,
@@ -261,9 +244,7 @@ fun DashBoard() {
                 )
             }
             Spacer(modifier = Modifier.padding(end = 14.dp))
-            Column(
-                horizontalAlignment = Alignment.CenterHorizontally,
-            ) {
+            Column(horizontalAlignment = Alignment.CenterHorizontally) {
                 Text(
                     modifier = Modifier.padding(bottom = 2.dp),
                     text = stringResource(id = R.string.transaction),
@@ -271,7 +252,7 @@ fun DashBoard() {
                     fontSize = 18.sp
                 )
                 Text(
-                    text = "20 января",
+                    text = getNextTransaction(activeSubscription.map { it.lastOrNextTransactionDate }),
                     color = MaterialTheme.colorScheme.secondary,
                     fontSize = 14.sp,
                     fontWeight = FontWeight.Medium,
@@ -280,9 +261,19 @@ fun DashBoard() {
             }
         }
     }
+}
 
+fun getActiveSubscriptionsNumber(number: Int): String = "$number " +
+        when {
+            number == 1 -> "подписка"
+            number % 10 in 2..4 -> "подписки"
+            else -> "подписок"
+        }
 
-}
+fun getMonthAmount(sums: List<String>): String = "${sums.sumOf { it.toDouble() }} руб."
+
+fun getNextTransaction(transactions: List<String>): String =
+    if (transactions.isEmpty()) "-" else transactions.min()
 
 @Composable
 fun SubscriptionList(
@@ -302,7 +293,6 @@ fun SubscriptionList(
             )
             Spacer(modifier = Modifier.padding(bottom = 12.dp))
         }
-
         if (activeSubscription.isEmpty()) {
             item {
                 Text(
@@ -310,7 +300,6 @@ fun SubscriptionList(
 
                 )
                 Spacer(modifier = Modifier.padding(bottom = 6.dp))
-
             }
         } else {
             items(activeSubscription) {
@@ -354,7 +343,6 @@ fun SubscriptionCard(subscriptionEntity: SubscriptionEntity) {
                     )
                 )
             }
-
     ) {
         Column(
             modifier = Modifier.padding(start = 14.dp, end = 14.dp, top = 6.dp, bottom = 6.dp)
@@ -391,7 +379,6 @@ fun SubscriptionCard(subscriptionEntity: SubscriptionEntity) {
                         textAlign = TextAlign.Center
                     )
                 }
-
             }
             Row(
                 modifier = Modifier.fillMaxWidth(),
@@ -399,9 +386,8 @@ fun SubscriptionCard(subscriptionEntity: SubscriptionEntity) {
             ) {
                 Text(
                     text = stringResource(
-                        id = if (subscriptionEntity.active) {
-                            R.string.next_transaction
-                        } else R.string.last_transaction
+                        id = if (subscriptionEntity.active) R.string.next_transaction
+                         else R.string.last_transaction
                     ),
                     color = MaterialTheme.colorScheme.outline,
                     fontWeight = FontWeight.SemiBold,
@@ -417,28 +403,3 @@ fun SubscriptionCard(subscriptionEntity: SubscriptionEntity) {
     }
     Spacer(modifier = Modifier.padding(bottom = 8.dp))
 }
-
-
-//@Preview(showBackground = true)
-//@Composable
-//fun GreetingPreview3() {
-//    val (activeSubscription, notActiveSubscription) = testSubscriptionData()
-//
-//    SubScriptioTheme {
-//        Surface {
-//            Column(
-//                modifier = Modifier
-//                    .background(MaterialTheme.colorScheme.background)
-//                    .padding(start = 16.dp, end = 16.dp, top = 12.dp, bottom = 12.dp)
-//
-//            ) {
-//                DashBoard()
-//                SubscriptionList(
-//                    activeSubscription = activeSubscription,
-//                    notActiveSubscription = notActiveSubscription
-//                )
-//            }
-//        }
-//
-//    }
-//}
\ No newline at end of file
-- 
GitLab