Skip to content

Commit

Permalink
Updated the dashboard screen with state and actions
Browse files Browse the repository at this point in the history
  • Loading branch information
nkuppan committed Jun 2, 2024
1 parent d6f3c2f commit 67a2400
Show file tree
Hide file tree
Showing 13 changed files with 227 additions and 204 deletions.
2 changes: 1 addition & 1 deletion core/common/src/debug/res/values/color.xml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="ic_launcher_background">#DC3D3D</color>
<color name="ic_launcher_background">#07052A</color>
</resources>
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,9 @@ import com.github.mikephil.charting.data.PieEntry
import com.github.mikephil.charting.formatter.ValueFormatter

data class PieChartUiData(
var name: String,
var value: Float,
@ColorInt var color: Int,
val name: String,
val value: Float,
@ColorInt val color: Int,
)

@Composable
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package com.naveenapps.expensemanager.core.domain.usecase.transaction
import com.naveenapps.expensemanager.core.common.utils.AppCoroutineDispatchers
import com.naveenapps.expensemanager.core.domain.usecase.settings.currency.GetCurrencyUseCase
import com.naveenapps.expensemanager.core.domain.usecase.settings.currency.GetFormattedAmountUseCase
import com.naveenapps.expensemanager.core.model.AmountUiState
import com.naveenapps.expensemanager.core.model.ExpenseFlowState
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.flowOn
Expand All @@ -16,7 +16,7 @@ class GetAmountStateUseCase @Inject constructor(
private val getExpenseAmountUseCase: GetExpenseAmountUseCase,
private val dispatcher: AppCoroutineDispatchers,
) {
fun invoke(): Flow<AmountUiState> {
fun invoke(): Flow<ExpenseFlowState> {
return combine(
getCurrencyUseCase.invoke(),
getIncomeAmountUseCase.invoke(),
Expand All @@ -25,7 +25,7 @@ class GetAmountStateUseCase @Inject constructor(

val incomeValue = income ?: 0.0
val expenseValue = expense ?: 0.0
AmountUiState(
ExpenseFlowState(
income = getFormattedAmountUseCase.invoke(
incomeValue,
currency,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.naveenapps.expensemanager.core.domain.usecase.transaction

import com.naveenapps.expensemanager.core.common.utils.AppCoroutineDispatchers
import com.naveenapps.expensemanager.core.domain.usecase.category.GetAllCategoryUseCase
import com.naveenapps.expensemanager.core.domain.usecase.settings.currency.GetCurrencyUseCase
import com.naveenapps.expensemanager.core.domain.usecase.settings.currency.GetFormattedAmountUseCase
Expand All @@ -11,13 +12,15 @@ import com.naveenapps.expensemanager.core.model.getDummyPieChartData
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.firstOrNull
import kotlinx.coroutines.flow.flowOn
import javax.inject.Inject

class GetTransactionGroupByCategoryUseCase @Inject constructor(
private val getAllCategoryUseCase: GetAllCategoryUseCase,
private val getCurrencyUseCase: GetCurrencyUseCase,
private val getFormattedAmountUseCase: GetFormattedAmountUseCase,
private val getTransactionWithFilterUseCase: GetTransactionWithFilterUseCase,
private val appCoroutineDispatchers: AppCoroutineDispatchers
) {
fun invoke(categoryType: CategoryType): Flow<CategoryTransactionState> {
return combine(
Expand Down Expand Up @@ -103,7 +106,7 @@ class GetTransactionGroupByCategoryUseCase @Inject constructor(
categoryTransactions = newCategoryTransaction,
hideValues = categoryTransactions.isEmpty(),
)
}
}.flowOn(appCoroutineDispatchers.computation)
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.naveenapps.expensemanager.core.model

data class AmountUiState(
data class ExpenseFlowState(
val income: String = "",
val expense: String = "",
val balance: String = "",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package com.naveenapps.expensemanager.core.model

data class PieChartData(
var name: String,
var value: Float,
var color: String,
val name: String,
val value: Float,
val color: String,
)

fun getDummyPieChartData(categoryName: String, percent: Float): PieChartData {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ import com.naveenapps.expensemanager.core.designsystem.ui.theme.ExpenseManagerTh
import com.naveenapps.expensemanager.core.designsystem.ui.utils.getExpenseColor
import com.naveenapps.expensemanager.core.designsystem.ui.utils.getIncomeColor
import com.naveenapps.expensemanager.core.designsystem.utils.shouldUseDarkTheme
import com.naveenapps.expensemanager.core.model.AmountUiState
import com.naveenapps.expensemanager.core.model.ExpenseFlowState
import com.naveenapps.expensemanager.core.model.AverageData
import com.naveenapps.expensemanager.core.model.WholeAverageData
import com.patrykandpatrick.vico.compose.axis.axisLabelComponent
Expand Down Expand Up @@ -85,7 +85,7 @@ fun AnalysisGraphScreen(
}

IncomeExpenseBalanceView(
amountUiState = amountUiState,
expenseFlowState = amountUiState,
transactionPeriod = transactionPeriod,
modifier = Modifier
.fillMaxWidth()
Expand All @@ -101,14 +101,14 @@ fun AnalysisGraphScreen(

@Composable
fun IncomeExpenseBalanceView(
amountUiState: AmountUiState,
expenseFlowState: ExpenseFlowState,
transactionPeriod: String,
modifier: Modifier = Modifier,
) {
AmountInfoWidget(
expenseAmount = amountUiState.expense,
incomeAmount = amountUiState.income,
balanceAmount = amountUiState.balance,
expenseAmount = expenseFlowState.expense,
incomeAmount = expenseFlowState.income,
balanceAmount = expenseFlowState.balance,
transactionPeriod = transactionPeriod,
modifier = modifier,
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import com.naveenapps.expensemanager.core.domain.usecase.settings.theme.GetCurre
import com.naveenapps.expensemanager.core.domain.usecase.transaction.GetAmountStateUseCase
import com.naveenapps.expensemanager.core.domain.usecase.transaction.GetAverageDataUseCase
import com.naveenapps.expensemanager.core.domain.usecase.transaction.GetChartDataUseCase
import com.naveenapps.expensemanager.core.model.AmountUiState
import com.naveenapps.expensemanager.core.model.ExpenseFlowState
import com.naveenapps.expensemanager.core.model.AverageData
import com.naveenapps.expensemanager.core.model.Theme
import com.naveenapps.expensemanager.core.model.TransactionUiItem
Expand Down Expand Up @@ -38,8 +38,8 @@ class AnalysisScreenViewModel @Inject constructor(
)
val currentTheme = _currentTheme.asStateFlow()

private val _amountUiState = MutableStateFlow(AmountUiState())
val amountUiState = _amountUiState.asStateFlow()
private val _expenseFlowState = MutableStateFlow(ExpenseFlowState())
val amountUiState = _expenseFlowState.asStateFlow()

private val _transactionPeriod = MutableStateFlow("")
val transactionPeriod = _transactionPeriod.asStateFlow()
Expand Down Expand Up @@ -90,7 +90,7 @@ class AnalysisScreenViewModel @Inject constructor(
}.launchIn(viewModelScope)

getAmountStateUseCase.invoke().onEach { response ->
_amountUiState.value = response
_expenseFlowState.value = response
}.launchIn(viewModelScope)

getCurrentThemeUseCase.invoke().onEach {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import androidx.core.graphics.toColorInt
import com.naveenapps.expensemanager.core.designsystem.AppPreviewsLightAndDarkMode
import com.naveenapps.expensemanager.core.designsystem.components.DashboardWidgetTitle
import com.naveenapps.expensemanager.core.designsystem.ui.components.PieChartUiData
import com.naveenapps.expensemanager.core.designsystem.ui.components.PieChartView
Expand All @@ -31,7 +32,11 @@ fun CategoryAmountView(
modifier = Modifier.fillMaxWidth(),
title = stringResource(id = R.string.categories),
)
Row(modifier = Modifier.padding(top = 16.dp)) {
Row(
modifier = Modifier
.padding(top = 16.dp)
.fillMaxWidth()
) {
PieChartView(
totalAmountText = categoryTransactionState.totalAmount.amountString ?: "",
chartData = categoryTransactionState.pieChartData.map {
Expand Down Expand Up @@ -68,7 +73,7 @@ fun CategoryAmountView(
}
}

@com.naveenapps.expensemanager.core.designsystem.AppPreviewsLightAndDarkMode
@AppPreviewsLightAndDarkMode
@Composable
fun CategoryAmountViewPreview() {
ExpenseManagerTheme {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package com.naveenapps.expensemanager.feature.dashboard

import com.naveenapps.expensemanager.core.domain.usecase.budget.BudgetUiModel
import com.naveenapps.expensemanager.core.model.AccountUiModel
import com.naveenapps.expensemanager.core.model.TransactionUiItem

sealed class DashboardAction {

data object OpenSettings : DashboardAction()

data class OpenTransactionEdit(val transaction: TransactionUiItem?) : DashboardAction()

data object OpenTransactionList : DashboardAction()

data object OpenBudgetList : DashboardAction()

data class OpenBudgetDetails(val budgetUiModel: BudgetUiModel) : DashboardAction()

data class OpenAccountEdit(val account: AccountUiModel) : DashboardAction()

data object OpenAccountList : DashboardAction()
}
Loading

0 comments on commit 67a2400

Please sign in to comment.