Skip to content

Commit dcf449c

Browse files
authored
Merge pull request #94 from Nexters/feature/modify-history
내기록 화면 개선 및 변경된 디자인 반영
2 parents e430286 + 9a0183e commit dcf449c

File tree

16 files changed

+141
-72
lines changed

16 files changed

+141
-72
lines changed

core/data/history/src/main/java/com/goalpanzi/mission_mate/core/data/history/mapper/HistoryMapper.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ fun MissionHistoryResponse.toModel(): MissionHistory = MissionHistory(
2222
)
2323

2424
fun MissionHistoriesResponse.toModel(): MissionHistories = MissionHistories(
25+
totalCount = totalCount ?: 0,
2526
hasNext = hasNext,
2627
resultList = resultList.map {
2728
it.toModel()
5.01 KB
Loading
445 Bytes
Loading
3.79 KB
Loading
4.99 KB
Loading
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.goalpanzi.mission_mate.core.domain.history.model
22

33
data class MissionHistories(
4+
val totalCount: Int,
45
val hasNext: Boolean,
56
val resultList: List<MissionHistory>
67
)

core/network/src/main/java/com/goalpanzi/mission_mate/core/network/model/response/MissionHistoriesResponse.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import kotlinx.serialization.Serializable
44

55
@Serializable
66
data class MissionHistoriesResponse(
7+
val totalCount: Int? = 0,
78
val hasNext: Boolean,
89
val resultList: List<MissionHistoryResponse>
910
)

feature/history/src/main/java/com/goalpanzi/mission_mate/feature/history/HistoryUiState.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,8 @@ import com.goalpanzi.mission_mate.feature.history.model.Histories
55
sealed interface HistoryUiState {
66
data object Loading : HistoryUiState
77
data object Refreshing : HistoryUiState
8-
data class Success(val histories: Histories) : HistoryUiState
8+
data class Success(
9+
val histories: Histories,
10+
val isPaging: Boolean = false
11+
) : HistoryUiState
912
}

feature/history/src/main/java/com/goalpanzi/mission_mate/feature/history/HistoryViewModel.kt

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import dagger.hilt.android.lifecycle.HiltViewModel
1010
import kotlinx.coroutines.flow.MutableStateFlow
1111
import kotlinx.coroutines.flow.StateFlow
1212
import kotlinx.coroutines.flow.asStateFlow
13+
import kotlinx.coroutines.flow.onStart
1314
import kotlinx.coroutines.launch
1415
import javax.inject.Inject
1516

@@ -45,7 +46,17 @@ class HistoryViewModel @Inject constructor(
4546
getMissionHistoriesUseCase(
4647
page = page,
4748
pageSize = HISTORIES_PAGE_SIZE
48-
).collect { result ->
49+
).onStart {
50+
val state = historyState.value
51+
52+
if(page != 0 && state is HistoryUiState.Success){
53+
_historyState.emit(
54+
state.copy(isPaging = true)
55+
)
56+
}else {
57+
_historyState.emit(HistoryUiState.Loading)
58+
}
59+
}.collect { result ->
4960
val uiState = when (result) {
5061
is DomainResult.Success -> {
5162
val data = result.data.toUiModel()

feature/history/src/main/java/com/goalpanzi/mission_mate/feature/history/component/HistoryList.kt

Lines changed: 69 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import androidx.compose.foundation.layout.Arrangement
1010
import androidx.compose.foundation.layout.Box
1111
import androidx.compose.foundation.layout.Column
1212
import androidx.compose.foundation.layout.Row
13+
import androidx.compose.foundation.layout.RowScope
1314
import androidx.compose.foundation.layout.aspectRatio
1415
import androidx.compose.foundation.layout.fillMaxSize
1516
import androidx.compose.foundation.layout.fillMaxWidth
@@ -102,7 +103,7 @@ fun HistoryList(
102103
missionId = history.missionId,
103104
imageUrls = history.imageUrls,
104105
characters = history.missionMembers.distinctCharacters,
105-
extraNumbers = history.missionMembers.extraNumbers,
106+
membersCount = history.missionMembers.size,
106107
title = history.description,
107108
startDate = history.missionFormattedStartDate,
108109
endDate = history.missionFormattedEndDate,
@@ -132,7 +133,7 @@ fun HistoryListItem(
132133
missionId: Long,
133134
imageUrls: List<String>,
134135
characters: List<CharacterType>,
135-
extraNumbers: Int,
136+
membersCount: Int,
136137
title: String,
137138
startDate: String,
138139
endDate: String,
@@ -190,7 +191,7 @@ fun HistoryListItem(
190191

191192
HistoryListItemInfo(
192193
characters = characters,
193-
extraNumbers = extraNumbers,
194+
membersCount = membersCount,
194195
title = title,
195196
startDate = startDate,
196197
endDate = endDate,
@@ -209,7 +210,8 @@ fun HistoryListItemImage(
209210
) {
210211
HorizontalPager(
211212
state = state,
212-
userScrollEnabled = false
213+
userScrollEnabled = false,
214+
beyondViewportPageCount = 2
213215
) { index ->
214216
AsyncImage(
215217
modifier = modifier
@@ -235,7 +237,7 @@ fun HistoryListItemImageEmpty(
235237
@Composable
236238
fun HistoryListItemInfo(
237239
characters: List<CharacterType>,
238-
extraNumbers: Int,
240+
membersCount: Int,
239241
title: String,
240242
startDate: String,
241243
endDate: String,
@@ -245,36 +247,29 @@ fun HistoryListItemInfo(
245247
modifier: Modifier = Modifier
246248
) {
247249
Column(
248-
modifier = modifier.padding(20.dp),
249-
verticalArrangement = Arrangement.spacedBy(24.dp)
250+
modifier = modifier.padding(horizontal = 20.dp, vertical = 16.dp),
251+
verticalArrangement = Arrangement.spacedBy(8.dp)
250252
) {
251253
Row(
252254
horizontalArrangement = Arrangement.spacedBy(12.dp),
253255
) {
254256
HistoryListItemInfoDetail(
255257
modifier = Modifier.weight(1f),
256258
characters = characters,
257-
extraNumbers = extraNumbers,
259+
membersCount = membersCount,
258260
title = title,
259-
startDate = startDate,
260-
endDate = endDate
261+
boardProgressed = boardProgressed,
262+
boardTotal = boardTotal,
263+
rank = rank
264+
)
265+
HistoryListItemInfoTrophy(
266+
rank = rank,
267+
boardProgressed = boardProgressed
261268
)
262-
if (rank == 1) {
263-
StableImage(
264-
modifier = Modifier
265-
.width(85.dp)
266-
.height(80.dp)
267-
.align(
268-
Alignment.Bottom
269-
),
270-
drawableResId = com.goalpanzi.mission_mate.core.designsystem.R.drawable.img_normal_trophy_gold
271-
)
272-
}
273269
}
274-
HistoryListItemInfoResult(
275-
boardProgressed = boardProgressed,
276-
boardTotal = boardTotal,
277-
rank = rank
270+
HistoryListItemInfoDetailPeriod(
271+
startDate = startDate,
272+
endDate = endDate
278273
)
279274
}
280275

@@ -283,35 +278,37 @@ fun HistoryListItemInfo(
283278
@Composable
284279
fun HistoryListItemInfoDetail(
285280
characters: List<CharacterType>,
286-
extraNumbers: Int,
281+
membersCount: Int,
287282
title: String,
288-
startDate: String,
289-
endDate: String,
283+
boardProgressed: Int,
284+
boardTotal: Int,
285+
rank: Int,
290286
modifier: Modifier = Modifier
291287
) {
292288
Column(
293289
modifier = modifier,
294-
verticalArrangement = Arrangement.spacedBy(8.dp)
290+
verticalArrangement = Arrangement.spacedBy(2.dp)
295291
) {
296292
HistoryListItemInfoDetailMembers(
297-
modifier = Modifier.padding(bottom = 4.dp),
293+
modifier = Modifier.padding(bottom = 2.dp),
298294
characters = characters,
299-
extraNumbers = extraNumbers
295+
membersCount = membersCount
300296
)
301297
HistoryListItemInfoDetailTitle(
302298
title = title
303299
)
304-
HistoryListItemInfoDetailPeriod(
305-
startDate = startDate,
306-
endDate = endDate
300+
HistoryListItemInfoResult(
301+
boardProgressed = boardProgressed,
302+
boardTotal = boardTotal,
303+
rank = rank
307304
)
308305
}
309306
}
310307

311308
@Composable
312309
fun HistoryListItemInfoDetailMembers(
313310
characters: List<CharacterType>,
314-
extraNumbers: Int,
311+
membersCount : Int,
315312
modifier: Modifier = Modifier
316313
) {
317314
Row(
@@ -322,16 +319,14 @@ fun HistoryListItemInfoDetailMembers(
322319
HistoryListItemInfoDetailMembersCharacterList(
323320
characters = characters
324321
)
325-
if(extraNumbers > 0) {
326-
Text(
327-
text = stringResource(
328-
id = R.string.history_list_item_member_count,
329-
extraNumbers
330-
),
331-
style = MissionMateTypography.body_xl_bold,
332-
color = ColorGray1_FF404249
333-
)
334-
}
322+
Text(
323+
text = stringResource(
324+
id = R.string.history_list_item_member_count,
325+
membersCount
326+
),
327+
style = MissionMateTypography.body_xl_bold,
328+
color = ColorGray1_FF404249
329+
)
335330
}
336331
}
337332

@@ -396,7 +391,7 @@ fun HistoryListItemInfoDetailTitle(
396391
Text(
397392
modifier = modifier,
398393
text = title,
399-
style = MissionMateTypography.title_xl_bold,
394+
style = MissionMateTypography.title_lg_bold,
400395
color = ColorGray1_FF404249
401396
)
402397
}
@@ -454,7 +449,7 @@ fun HistoryListItemInfoResultBoard(
454449
progressed,
455450
total
456451
),
457-
style = MissionMateTypography.body_xl_bold,
452+
style = MissionMateTypography.body_lg_bold,
458453
color = ColorOrange_FFFF5732
459454
)
460455
}
@@ -470,11 +465,36 @@ fun HistoryListItemInfoResultRank(
470465
id = R.string.history_list_item_rank,
471466
rank
472467
),
473-
style = MissionMateTypography.body_xl_regular,
468+
style = MissionMateTypography.body_lg_regular,
474469
color = ColorGray1_FF404249
475470
)
476471
}
477472

473+
@Composable
474+
fun RowScope.HistoryListItemInfoTrophy(
475+
rank: Int,
476+
boardProgressed: Int,
477+
modifier: Modifier = Modifier
478+
) {
479+
val trophyDrawableResId = if(boardProgressed == 0) {
480+
com.goalpanzi.mission_mate.core.designsystem.R.drawable.img_normal_trophy_question_mark
481+
}else {
482+
when(rank) {
483+
1 -> com.goalpanzi.mission_mate.core.designsystem.R.drawable.img_normal_trophy_gold
484+
2 -> com.goalpanzi.mission_mate.core.designsystem.R.drawable.img_normal_trophy_silver
485+
3 -> com.goalpanzi.mission_mate.core.designsystem.R.drawable.img_normal_trophy_bronze
486+
else -> return
487+
}
488+
}
489+
StableImage(
490+
modifier = modifier
491+
.width(63.dp)
492+
.height(59.dp)
493+
.align(Alignment.Bottom),
494+
drawableResId = trophyDrawableResId
495+
)
496+
}
497+
478498
@Preview
479499
@Composable
480500
private fun HistoryListItemInfoDetailMembersCharacterListPreview() {
@@ -507,7 +527,7 @@ private fun HistoryListItemPreview() {
507527
CharacterType.DOG,
508528
CharacterType.BIRD
509529
),
510-
extraNumbers = 3,
530+
membersCount = 3,
511531
title = "매일 저녁 1시간 먹기",
512532
startDate = "2024.08.15",
513533
endDate = "2024.09.14",

0 commit comments

Comments
 (0)