Skip to content

Commit f1b2168

Browse files
committed
chore(opencode): add Formatting constraints to formatted()
Signed-off-by: Brandon McAnsh <git@bmcreations.dev>
1 parent d24ac22 commit f1b2168

4 files changed

Lines changed: 28 additions & 10 deletions

File tree

apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/money/FormatUtils.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.flipcash.app.core.money
22

33
import com.getcode.opencode.model.financial.CurrencyCode
4+
import com.getcode.opencode.model.financial.Fiat
45
import com.getcode.opencode.model.financial.LocalFiat
56
import java.text.NumberFormat
67
import java.util.*
@@ -39,6 +40,6 @@ fun Int.withCommas(): String {
3940
return this.toString().reversed().chunked(3).joinToString(",").reversed()
4041
}
4142

42-
fun LocalFiat.formatted(suffix: String? = null, truncated: Boolean = false): String {
43-
return converted.formatted(suffix, truncated)
43+
fun LocalFiat.formatted(formatting: Fiat.Formatting = Fiat.Formatting.None, suffix: String? = null): String {
44+
return converted.formatted(formatting = formatting, suffix = suffix)
4445
}

apps/flipcash/features/purchase/src/main/kotlin/com/flipcash/app/purchase/internal/PurchaseAccountViewModel.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ internal class PurchaseAccountViewModel @Inject constructor(
131131
stateFlow
132132
.mapNotNull { it.costOfAccount }
133133
.map { (amount, currency) -> Fiat(amount, currency) }
134-
.onEach { dispatchEvent(Event.OnPriceFormatted(it.formatted(truncate = true))) }
134+
.onEach { dispatchEvent(Event.OnPriceFormatted(it.formatted(formatting = Fiat.Formatting.Truncated))) }
135135
.launchIn(viewModelScope)
136136

137137
eventFlow

apps/flipcash/shared/shareable/src/main/kotlin/com/flipcash/app/shareable/internal/InternalShareSheetController.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import com.flipcash.app.shareable.ShareablePendingData
1818
import com.flipcash.shared.shareable.R
1919
import com.getcode.opencode.model.accounts.GiftCardAccount
2020
import com.getcode.opencode.model.accounts.entropy
21+
import com.getcode.opencode.model.financial.Fiat
2122
import com.getcode.opencode.model.financial.LocalFiat
2223
import com.getcode.util.resources.ResourceHelper
2324
import dagger.hilt.android.qualifiers.ApplicationContext
@@ -142,11 +143,11 @@ internal class InternalShareSheetController(
142143
action = Intent.ACTION_SEND
143144
putExtra(
144145
Intent.EXTRA_TITLE,
145-
resources.getString(R.string.title_shareCashLink, amount.formatted(truncated = true))
146+
resources.getString(R.string.title_shareCashLink, amount.formatted(Fiat.Formatting.Truncated))
146147
)
147148
putExtra(
148149
Intent.EXTRA_SUBJECT,
149-
resources.getString(R.string.title_shareCashLink, amount.formatted(truncated = true))
150+
resources.getString(R.string.title_shareCashLink, amount.formatted(Fiat.Formatting.Truncated))
150151
)
151152
putExtra(Intent.EXTRA_TEXT, text)
152153
type = "text/plain"

services/opencode/src/main/kotlin/com/getcode/opencode/model/financial/Fiat.kt

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,18 @@ data class Fiat(
3636
currencyCode = currencyCode
3737
)
3838

39+
sealed interface Formatting {
40+
data object Truncated: Formatting
41+
data object None: Formatting
42+
data class Length(val decimalPlaces: Int): Formatting
43+
}
44+
3945
// Formatting
40-
fun formatted(suffix: String? = null, truncate: Boolean = false): String {
41-
val shouldTruncate = if (truncate) {
46+
fun formatted(
47+
formatting: Formatting = Formatting.None,
48+
suffix: String? = null,
49+
): String {
50+
val shouldTruncate = if (formatting is Formatting.Truncated) {
4251
val fractionalPart = decimalValue - decimalValue.toLong()
4352
fractionalPart == 0.0
4453
} else {
@@ -47,8 +56,15 @@ data class Fiat(
4756

4857
val formatter = android.icu.text.DecimalFormat.getInstance(ULocale.US).apply {
4958
val decimalDigits = java.util.Currency.getInstance(currencyCode.name).defaultFractionDigits
50-
minimumFractionDigits = if (shouldTruncate) 0 else decimalDigits
51-
maximumFractionDigits = if (shouldTruncate) 0 else decimalDigits
59+
val preferredDigits = when (formatting) {
60+
is Formatting.Length -> formatting.decimalPlaces
61+
Formatting.None -> decimalDigits
62+
Formatting.Truncated -> {
63+
if (shouldTruncate) 0 else decimalDigits
64+
}
65+
}
66+
minimumFractionDigits = preferredDigits
67+
maximumFractionDigits = preferredDigits
5268
roundingMode = RoundingMode.DOWN.ordinal
5369
(this as android.icu.text.DecimalFormat).decimalFormatSymbols = decimalFormatSymbols.apply {
5470
currencySymbol = ""
@@ -66,7 +82,7 @@ data class Fiat(
6682
}
6783

6884
// String representation
69-
override fun toString(): String = formatted(null)
85+
override fun toString(): String = formatted()
7086

7187
// Currency conversion
7288
fun convertingTo(rate: Rate): Fiat = Fiat(

0 commit comments

Comments
 (0)