Skip to content

Commit 6a212b8

Browse files
authored
Merge pull request #592 from MadridSquad/refactor/review-format
refactor : review format in series
2 parents f3b516c + 2963284 commit 6a212b8

File tree

8 files changed

+92
-24
lines changed

8 files changed

+92
-24
lines changed

presentation/src/main/java/com/madrid/presentation/screens/detailsScreen/reviewsScreen/ReviewScreen.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import com.madrid.presentation.navigation.LocalNavController
2424
import com.madrid.presentation.screens.detailsScreen.reviewsScreen.composables.ReviewCard
2525
import com.madrid.presentation.viewModel.detailsViewModel.review.ReviewsScreenUiState
2626
import com.madrid.presentation.viewModel.detailsViewModel.review.ReviewsScreenViewModel
27+
import com.madrid.presentation.viewModel.shared.parser.formatDate
2728

2829
@Composable
2930
fun ReviewsScreen(viewModel: ReviewsScreenViewModel = hiltViewModel()) {
@@ -67,7 +68,7 @@ fun ReviewsScreenContent(
6768
reviewerName = review.reviewerName,
6869
reviewerImageUrl = review.reviewerImageUrl.toString(),
6970
rating = review.rating,
70-
date = review.date,
71+
date = formatDate(review.date),
7172
content = review.content,
7273
modifier = Modifier.fillMaxWidth()
7374
)

presentation/src/main/java/com/madrid/presentation/viewModel/detailsViewModel/seriesDetails/SeriesDetailsViewModel.kt

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ import com.madrid.presentation.navigation.Destinations
2626
import com.madrid.presentation.viewModel.base.BaseViewModel
2727
import com.madrid.presentation.viewModel.detailsViewModel.SeeAllType
2828
import com.madrid.presentation.viewModel.detailsViewModel.SeriesDetailsUiState
29+
import com.madrid.presentation.viewModel.detailsViewModel.review.ReviewUiState
30+
import com.madrid.presentation.viewModel.detailsViewModel.review.toReviewUiState
2931
import com.madrid.presentation.viewModel.shared.parser.formatDateKotlinx
3032
import com.madrid.presentation.viewModel.shared.parser.formatRate
3133
import dagger.hilt.android.lifecycle.HiltViewModel
@@ -388,13 +390,12 @@ class SeriesDetailsViewModel @Inject constructor(
388390
}
389391
}
390392

391-
private fun onSuccessLoadReviews(reviews: List<Review>) {
392-
updateState {
393-
it.copy(
394-
reviews = reviews.map { review -> review.toUiState() },
395-
seeAllType = SeeAllType.Review
396-
)
393+
private fun onSuccessLoadReviews(domainReviews: List<Review>) {
394+
395+
updateState { currentState -> currentState.copy(reviews = domainReviews.map { review ->
396+
review.toReviewUiState() })
397397
}
398+
398399
}
399400

400401
private fun onSuccessLoadTrailer(trailers: List<Trailer>) {
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package com.madrid.presentation.viewModel.shared.parser
2+
3+
fun convertEnglishDigitsToArabic(englishNumberString: String): String {
4+
val arabicDigitsMap = mapOf(
5+
'0' to '٠', '1' to '١', '2' to '٢', '3' to '٣', '4' to '٤',
6+
'5' to '٥', '6' to '٦', '7' to '٧', '8' to '٨', '9' to '٩'
7+
)
8+
return englishNumberString.map { char ->
9+
arabicDigitsMap[char] ?: char
10+
}.joinToString("")
11+
}

presentation/src/main/java/com/madrid/presentation/viewModel/shared/parser/DateFormaterForEpisode.kt

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.madrid.presentation.viewModel.shared.parser
22

33
import kotlinx.datetime.toLocalDate
4+
import java.util.Locale
45

56
fun String.formatYearKtx(): String = runCatching {
67
this.toLocalDate().year.toString()
@@ -10,5 +11,21 @@ fun String.formatFullDateKtx(): String = runCatching {
1011
val date = this.toLocalDate()
1112
val monthName = date.month.name.lowercase()
1213
.replaceFirstChar { it.uppercase() }
14+
val language = Locale.getDefault().toLanguageTag()
15+
if (language == "ar") {
16+
val monthsMap = mapOf(
17+
"en" to listOf(
18+
"January", "February", "March", "April", "May", "June",
19+
"July", "August", "September", "October", "November", "December"
20+
),
21+
"ar" to listOf(
22+
"يناير", "فبراير", "مارس", "أبريل", "مايو", "يونيو",
23+
"يوليو", "أغسطس", "سبتمبر", "أكتوبر", "نوفمبر", "ديسمبر"
24+
)
25+
)
26+
val months = monthsMap["ar"]!!
27+
val monthNameAr = months[date.monthNumber - 1]
28+
return convertEnglishDigitsToArabic("${date.dayOfMonth} $monthNameAr ${date.year}")
29+
}
1330
"$monthName ${date.dayOfMonth}, ${date.year}"
1431
}.getOrElse { "" }

presentation/src/main/java/com/madrid/presentation/viewModel/shared/parser/RateFormatter.kt

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,22 +7,25 @@ import kotlin.math.floor
77

88

99
fun formatRate(rate: Double): String {
10-
return try {
10+
try {
1111
val numericRate = rate
1212
val truncated = floor(numericRate * 10) / 10
13-
if (truncated == truncated.toInt().toDouble()) {
13+
val result = if (truncated == truncated.toInt().toDouble()) {
1414
truncated.toInt().toString()
1515
} else {
1616
DecimalFormat("#.#").format(truncated)
1717
}
18+
return when (Locale.getDefault().toLanguageTag()) {
19+
"ar" -> convertEnglishDigitsToArabic(result)
20+
else -> result
21+
}
1822
} catch (e: Exception) {
19-
rate.toString()
23+
return rate.toString()
2024
}
2125
}
2226

2327
fun formatDate(dateString: String?): String {
2428
if (dateString.isNullOrEmpty()) return ""
25-
2629
return try {
2730
val inputFormat = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.getDefault())
2831
val outputFormat = SimpleDateFormat("MMM dd, yyyy", Locale.getDefault())

presentation/src/main/java/com/madrid/presentation/viewModel/shared/parser/formatDateKotlinx.kt

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,29 @@ package com.madrid.presentation.viewModel.shared.parser
22

33
import kotlinx.datetime.LocalDate
44
import kotlinx.datetime.toLocalDate
5+
import java.util.Locale
56

67

78
fun formatDateKotlinx(dateString: String): String {
8-
try{
9+
try {
910
val date: LocalDate = dateString.toLocalDate()
10-
1111
val month = date.monthNumber.toString().padStart(2, '0')
1212
val day = date.dayOfMonth.toString().padStart(2, '0')
1313
val year = date.year.toString()
1414

15-
return "$month/$day/$year"
16-
}
17-
catch (e: Exception) {
15+
val language = Locale.getDefault().toLanguageTag()
16+
return when (language) {
17+
"en" -> {
18+
"$month/$day/$year"
19+
}
20+
"ar" -> {
21+
convertEnglishDigitsToArabic("$year/$month/$day")
22+
}
23+
else -> {
24+
"$day/$month/$year"
25+
}
26+
}
27+
} catch (e: Exception) {
1828
return ""
1929
}
2030
}

presentation/src/main/java/com/madrid/presentation/viewModel/shared/parser/formatDateOfBirth.kt

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,21 @@
11
package com.madrid.presentation.viewModel.shared.parser
22

3+
import java.util.Locale
4+
35
fun formatDateOfBirth(rawDate: String): String {
4-
val months = listOf(
5-
"January", "February", "March", "April", "May", "June",
6-
"July", "August", "September", "October", "November", "December"
6+
val monthsMap = mapOf(
7+
"en" to listOf(
8+
"January", "February", "March", "April", "May", "June",
9+
"July", "August", "September", "October", "November", "December"
10+
),
11+
"ar" to listOf(
12+
"يناير", "فبراير", "مارس", "أبريل", "مايو", "يونيو",
13+
"يوليو", "أغسطس", "سبتمبر", "أكتوبر", "نوفمبر", "ديسمبر"
14+
)
715
)
816

17+
val localeTag = Locale.getDefault().toLanguageTag()
18+
919
return try {
1020
val parts = rawDate.split("-")
1121
if (parts.size != 3) return "Unknown"
@@ -14,8 +24,12 @@ fun formatDateOfBirth(rawDate: String): String {
1424
val monthIndex = parts[1].toIntOrNull()?.minus(1) ?: return "Unknown"
1525
val day = parts[2].toIntOrNull() ?: return "Unknown"
1626

27+
val months = monthsMap[localeTag.substring(0, 2)] ?: monthsMap["en"]!!
1728
val monthName = months.getOrNull(monthIndex) ?: return "Unknown"
18-
"$monthName $day, $year"
29+
return when (localeTag) {
30+
"ar" -> convertEnglishDigitsToArabic("$day $monthName $year")
31+
else -> "$monthName $day, $year"
32+
}
1933
} catch (e: Exception) {
2034
"Unknown"
2135
}
Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,24 @@
11
package com.madrid.presentation.viewModel.shared.parser
22

3+
import java.util.Locale
4+
35

46
fun formatDuration(durationInMinutes: String): String {
57
val minutes = durationInMinutes.toIntOrNull() ?: return "Unknown"
68
val hours = minutes / 60
79
val remainingMinutes = minutes % 60
8-
return if (hours > 0) {
9-
"${hours}h ${remainingMinutes}min"
10-
} else {
11-
"${remainingMinutes}min"
10+
11+
val localeTag = Locale.getDefault().toLanguageTag()
12+
return when (localeTag) {
13+
"ar" -> {
14+
val hourPart = if (hours > 0) "$hours ساعة " else ""
15+
val minutePart = if (remainingMinutes > 0) "$remainingMinutes دقيقة" else ""
16+
convertEnglishDigitsToArabic((hourPart + minutePart).trim().ifEmpty { "0 دقيقة" })
17+
}
18+
else -> {
19+
val hourPart = if (hours > 0) "$hours h " else ""
20+
val minutePart = if (remainingMinutes > 0) "$remainingMinutes min" else ""
21+
(hourPart + minutePart).trim().ifEmpty { "0 min" }
22+
}
1223
}
1324
}

0 commit comments

Comments
 (0)