Skip to content

Commit

Permalink
WIP: Loans UI
Browse files Browse the repository at this point in the history
  • Loading branch information
Iliyan Germanov committed Nov 25, 2021
1 parent 8b61bb7 commit 1cea958
Show file tree
Hide file tree
Showing 9 changed files with 732 additions and 101 deletions.
9 changes: 8 additions & 1 deletion app/src/main/java/com/ivy/wallet/model/entity/Loan.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package com.ivy.wallet.model.entity
import androidx.room.Entity
import androidx.room.PrimaryKey
import com.ivy.wallet.model.LoanType
import com.ivy.wallet.model.Reorderable
import java.util.*

@Entity(tableName = "loans")
Expand All @@ -19,4 +20,10 @@ data class Loan(

@PrimaryKey
val id: UUID = UUID.randomUUID()
)
) : Reorderable {
override fun getItemOrderNum() = orderNum

override fun withNewOrderNum(newOrderNum: Double) = this.copy(
orderNum = newOrderNum
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,7 @@ private fun BoxWithConstraintsScope.UI(
Spacer(Modifier.height(150.dp)) //scroll hack
}

ReorderViewSingleType(
ReorderModalSingleType(
visible = reorderVisible,
initialItems = accounts,
dismiss = {
Expand Down
150 changes: 84 additions & 66 deletions app/src/main/java/com/ivy/wallet/ui/budget/BudgetScreen.kt
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ import com.ivy.wallet.ui.theme.Typo
import com.ivy.wallet.ui.theme.components.BudgetBattery
import com.ivy.wallet.ui.theme.components.IvyIcon
import com.ivy.wallet.ui.theme.components.ReorderButton
import com.ivy.wallet.ui.theme.components.ReorderViewSingleType
import com.ivy.wallet.ui.theme.components.ReorderModalSingleType
import com.ivy.wallet.ui.theme.modal.BudgetModal
import com.ivy.wallet.ui.theme.modal.BudgetModalData
import com.ivy.wallet.ui.theme.style
Expand Down Expand Up @@ -88,7 +88,7 @@ private fun BoxWithConstraintsScope.UI(
onDeleteBudget: (Budget) -> Unit = {},
onReorder: (List<DisplayBudget>) -> Unit = {}
) {
var reorderVisible by remember { mutableStateOf(false) }
var reorderModalVisible by remember { mutableStateOf(false) }
var budgetModalData: BudgetModalData? by remember { mutableStateOf(null) }

Column(
Expand All @@ -99,67 +99,15 @@ private fun BoxWithConstraintsScope.UI(
) {
Spacer(Modifier.height(32.dp))

Row(
modifier = Modifier.fillMaxWidth(),
verticalAlignment = Alignment.CenterVertically
) {
Column(
modifier = Modifier
.weight(1f)
.padding(start = 24.dp, end = 16.dp)
) {
Text(
text = "Budgets",
style = Typo.h2.style(
color = IvyTheme.colors.pureInverse,
fontWeight = FontWeight.ExtraBold
)
)

if (timeRange != null) {
Spacer(Modifier.height(4.dp))

Text(
text = timeRange.toDisplay(),
style = Typo.body2.style(
color = IvyTheme.colors.pureInverse,
fontWeight = FontWeight.Medium
)
)
}

if (categoryBudgetsTotal > 0 || appBudgetMax > 0) {
Spacer(Modifier.height(4.dp))

val categoryBudgetText = if (categoryBudgetsTotal > 0) {
"${categoryBudgetsTotal.format(baseCurrency)} $baseCurrency for categories"
} else ""

val appBudgetMaxText = if (appBudgetMax > 0) {
"${appBudgetMax.format(baseCurrency)} $baseCurrency app budget"
} else ""

val hasBothBudgetTypes =
categoryBudgetText.isNotBlank() && appBudgetMaxText.isNotBlank()
Text(
modifier = Modifier.testTag("budgets_info_text"),
text = if (hasBothBudgetTypes)
"Budget info: $categoryBudgetText / $appBudgetMaxText" else "Budget info: $categoryBudgetText$appBudgetMaxText",
style = Typo.numberCaption.style(
color = Gray,
fontWeight = FontWeight.ExtraBold
)
)
}

Toolbar(
timeRange = timeRange,
baseCurrency = baseCurrency,
appBudgetMax = appBudgetMax,
categoryBudgetsTotal = categoryBudgetsTotal,
setReorderModalVisible = {
reorderModalVisible = it
}

ReorderButton {
reorderVisible = true
}

Spacer(Modifier.width(24.dp))
}
)

Spacer(Modifier.height(8.dp))

Expand Down Expand Up @@ -193,7 +141,6 @@ private fun BoxWithConstraintsScope.UI(
}

Spacer(Modifier.height(150.dp)) //scroll hack

}

val ivyContext = LocalIvyContext.current
Expand All @@ -211,11 +158,11 @@ private fun BoxWithConstraintsScope.UI(
},
)

ReorderViewSingleType(
visible = reorderVisible,
ReorderModalSingleType(
visible = reorderModalVisible,
initialItems = displayBudgets,
dismiss = {
reorderVisible = false
reorderModalVisible = false
},
onReordered = onReorder
) { _, item ->
Expand All @@ -241,7 +188,78 @@ private fun BoxWithConstraintsScope.UI(
budgetModalData = null
}
)
}

@Composable
private fun Toolbar(
timeRange: FromToTimeRange?,
baseCurrency: String,
appBudgetMax: Double,
categoryBudgetsTotal: Double,

setReorderModalVisible: (Boolean) -> Unit
) {
Row(
modifier = Modifier.fillMaxWidth(),
verticalAlignment = Alignment.CenterVertically
) {
Column(
modifier = Modifier
.weight(1f)
.padding(start = 24.dp, end = 16.dp)
) {
Text(
text = "Budgets",
style = Typo.h2.style(
color = IvyTheme.colors.pureInverse,
fontWeight = FontWeight.ExtraBold
)
)

if (timeRange != null) {
Spacer(Modifier.height(4.dp))

Text(
text = timeRange.toDisplay(),
style = Typo.body2.style(
color = IvyTheme.colors.pureInverse,
fontWeight = FontWeight.Medium
)
)
}

if (categoryBudgetsTotal > 0 || appBudgetMax > 0) {
Spacer(Modifier.height(4.dp))

val categoryBudgetText = if (categoryBudgetsTotal > 0) {
"${categoryBudgetsTotal.format(baseCurrency)} $baseCurrency for categories"
} else ""

val appBudgetMaxText = if (appBudgetMax > 0) {
"${appBudgetMax.format(baseCurrency)} $baseCurrency app budget"
} else ""

val hasBothBudgetTypes =
categoryBudgetText.isNotBlank() && appBudgetMaxText.isNotBlank()
Text(
modifier = Modifier.testTag("budgets_info_text"),
text = if (hasBothBudgetTypes)
"Budget info: $categoryBudgetText / $appBudgetMaxText" else "Budget info: $categoryBudgetText$appBudgetMaxText",
style = Typo.numberCaption.style(
color = Gray,
fontWeight = FontWeight.ExtraBold
)
)
}

}

ReorderButton {
setReorderModalVisible(true)
}

Spacer(Modifier.width(24.dp))
}
}

@Composable
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ import com.ivy.wallet.ui.theme.*
import com.ivy.wallet.ui.theme.components.BalanceRow
import com.ivy.wallet.ui.theme.components.ItemIconSDefaultIcon
import com.ivy.wallet.ui.theme.components.ReorderButton
import com.ivy.wallet.ui.theme.components.ReorderViewSingleType
import com.ivy.wallet.ui.theme.components.ReorderModalSingleType
import com.ivy.wallet.ui.theme.modal.edit.CategoryModal
import com.ivy.wallet.ui.theme.modal.edit.CategoryModalData
import com.ivy.wallet.ui.theme.wallet.AmountCurrencyB1
Expand Down Expand Up @@ -134,7 +134,7 @@ private fun BoxWithConstraintsScope.UI(
},
)

ReorderViewSingleType(
ReorderModalSingleType(
visible = reorderVisible,
initialItems = categories,
dismiss = {
Expand Down
Loading

0 comments on commit 1cea958

Please sign in to comment.