Skip to content

Commit 434104e

Browse files
authored
Merge pull request #1637 from DimensionDev/feature/localized_formatter
update formatter
2 parents 9a88f8d + 8098172 commit 434104e

File tree

24 files changed

+280
-269
lines changed

24 files changed

+280
-269
lines changed

compose-ui/build.gradle.kts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,6 @@ kotlin {
8181
implementation(libs.fluent.ui)
8282
implementation(libs.koin.compose)
8383
implementation(libs.androidx.collection)
84-
implementation(libs.prettytime)
8584
}
8685
}
8786
val iosMain by getting {

compose-ui/src/androidMain/kotlin/dev/dimension/flare/ui/component/DateTimeText.android.kt

Lines changed: 0 additions & 75 deletions
This file was deleted.

compose-ui/src/commonMain/kotlin/dev/dimension/flare/ui/component/DateTimeText.kt

Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package dev.dimension.flare.ui.component
22

33
import androidx.compose.foundation.text.InlineTextContent
44
import androidx.compose.runtime.Composable
5-
import androidx.compose.runtime.saveable.SaverScope
65
import androidx.compose.ui.Modifier
76
import androidx.compose.ui.graphics.Color
87
import androidx.compose.ui.text.TextLayoutResult
@@ -17,14 +16,6 @@ import androidx.compose.ui.unit.TextUnit
1716
import dev.dimension.flare.ui.component.platform.PlatformText
1817
import dev.dimension.flare.ui.component.platform.PlatformTextStyle
1918
import dev.dimension.flare.ui.render.UiDateTime
20-
import dev.dimension.flare.ui.render.toUi
21-
import kotlin.time.Instant
22-
23-
@Composable
24-
internal expect fun rememberFormattedDateTime(
25-
data: UiDateTime,
26-
fullTime: Boolean = false,
27-
): String
2819

2920
@Composable
3021
public fun DateTimeText(
@@ -48,10 +39,13 @@ public fun DateTimeText(
4839
style: TextStyle = PlatformTextStyle.current,
4940
fullTime: Boolean = false,
5041
) {
51-
val text = rememberFormattedDateTime(data, fullTime)
52-
5342
PlatformText(
54-
text = text,
43+
text =
44+
if (fullTime) {
45+
data.full
46+
} else {
47+
data.relative
48+
},
5549
modifier = modifier,
5650
color = color,
5751
fontSize = fontSize,
@@ -71,9 +65,3 @@ public fun DateTimeText(
7165
style = style,
7266
)
7367
}
74-
75-
internal data object UiDateTimeSaver : androidx.compose.runtime.saveable.Saver<UiDateTime, Long> {
76-
override fun restore(value: Long): UiDateTime? = Instant.fromEpochMilliseconds(value).toUi()
77-
78-
override fun SaverScope.save(value: UiDateTime): Long = value.value.toEpochMilliseconds()
79-
}

compose-ui/src/commonMain/kotlin/dev/dimension/flare/ui/component/status/CommonStatusComponent.kt

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,6 @@ import dev.dimension.flare.ui.component.platform.PlatformText
124124
import dev.dimension.flare.ui.component.platform.PlatformTextButton
125125
import dev.dimension.flare.ui.component.platform.PlatformTextStyle
126126
import dev.dimension.flare.ui.component.platform.placeholder
127-
import dev.dimension.flare.ui.component.rememberFormattedDateTime
128127
import dev.dimension.flare.ui.model.ClickContext
129128
import dev.dimension.flare.ui.model.Digit
130129
import dev.dimension.flare.ui.model.UiCard
@@ -1138,13 +1137,11 @@ private fun StatusPollComponent(
11381137
)
11391138
} else {
11401139
poll.expiredAt?.let { expiredAt ->
1141-
val localizedExpiredTimeline =
1142-
rememberFormattedDateTime(expiredAt, fullTime = true)
11431140
PlatformText(
11441141
text =
11451142
stringResource(
11461143
resource = Res.string.poll_expired_at,
1147-
localizedExpiredTimeline,
1144+
expiredAt.full,
11481145
),
11491146
modifier =
11501147
Modifier

compose-ui/src/iosMain/kotlin/dev/dimension/flare/ui/controllers/ComposeUIHelper.kt

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,23 +8,30 @@ import dev.dimension.flare.common.InAppNotification
88
import dev.dimension.flare.common.Message
99
import dev.dimension.flare.data.network.ktorClient
1010
import dev.dimension.flare.di.KoinHelper
11+
import dev.dimension.flare.ui.humanizer.SwiftFormatter
1112
import kotlinx.coroutines.CoroutineScope
1213
import kotlinx.coroutines.Dispatchers
1314
import kotlinx.coroutines.launch
1415
import kotlinx.coroutines.withContext
1516
import org.koin.core.context.startKoin
16-
import org.koin.dsl.binds
17+
import org.koin.dsl.bind
1718
import org.koin.dsl.module
1819

1920
public object ComposeUIHelper {
20-
public fun initialize(inAppNotification: InAppNotification) {
21+
public fun initialize(
22+
inAppNotification: InAppNotification,
23+
swiftFormatter: SwiftFormatter,
24+
) {
2125
startKoin {
2226
modules(KoinHelper.modules())
2327
modules(
2428
module {
2529
single {
2630
ProxyInAppNotification(inAppNotification, get())
27-
} binds arrayOf(InAppNotification::class)
31+
} bind InAppNotification::class
32+
single {
33+
swiftFormatter
34+
} bind SwiftFormatter::class
2835
},
2936
)
3037
modules(dev.dimension.flare.di.composeUiModule)

compose-ui/src/jvmMain/kotlin/dev/dimension/flare/ui/component/DateTimeText.jvm.kt

Lines changed: 0 additions & 58 deletions
This file was deleted.

desktopApp/src/main/kotlin/dev/dimension/flare/ui/theme/FlareTheme.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ import dev.dimension.flare.data.model.Theme
3636
import dev.dimension.flare.data.repository.SettingsRepository
3737
import dev.dimension.flare.ui.component.ComponentAppearance
3838
import dev.dimension.flare.ui.component.LocalComponentAppearance
39-
import dev.dimension.flare.ui.component.updateTimeFormatterLocale
39+
import dev.dimension.flare.ui.humanizer.updateTimeFormatterLocale
4040
import dev.dimension.flare.ui.model.collectAsUiState
4141
import dev.dimension.flare.ui.model.onSuccess
4242
import io.github.composefluent.ExperimentalFluentApi
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import Foundation
2+
import KotlinSharedUI
3+
4+
class Formatter: SwiftFormatter {
5+
private init() {}
6+
7+
static let shared = Formatter()
8+
nonisolated func formatNumber(number: Int64) -> String {
9+
return Int(number)
10+
.formatted(
11+
.number
12+
.notation(.compactName)
13+
.grouping(.never)
14+
.precision(.fractionLength(0...2))
15+
)
16+
}
17+
}

iosApp/flare/FlareApp.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ struct FlareApp: App {
88
configureAudioSessionForMixing()
99
ComposeUIHelper.shared.initialize(
1010
inAppNotification: SwiftInAppNotification.shared,
11+
swiftFormatter: Formatter.shared
1112
)
1213
}
1314
var body: some Scene {

iosApp/flare/UI/Component/DateTimeText.swift

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,11 @@ struct DateTimeText: View {
77

88
var body: some View {
99
if fullTime {
10-
HStack {
11-
Text(data.platformValue, style: .date)
12-
Text(data.platformValue, style: .time)
13-
}
10+
Text(data.platformValue, style: .date) + Text(data.platformValue, style: .time)
11+
} else if data.shouldShowFull {
12+
Text(data.platformValue, style: .date)
1413
} else {
15-
switch data.diff {
16-
case .days: Text(data.platformValue, style: .relative)
17-
case .hours: Text(data.platformValue, style: .relative)
18-
case .minutes: Text(data.platformValue, style: .relative)
19-
case .seconds: Text(data.platformValue, style: .relative)
20-
case .monthDay: Text(data.platformValue, style: .date)
21-
case .yearMonthDay: Text(data.platformValue, style: .date)
22-
}
14+
Text(data.platformValue, style: .relative)
2315
}
2416
}
2517
}

0 commit comments

Comments
 (0)