Skip to content

Commit 4ec647a

Browse files
committed
fix/#220 : immutable state 로 변경
- core:model의 모델을 state로 사용 -> 화면 전용 immutable 모델 선언 및 state 사용
1 parent 7503b14 commit 4ec647a

File tree

4 files changed

+50
-8
lines changed

4 files changed

+50
-8
lines changed
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package com.boostcamp.mapisode.mygroup.model
2+
3+
import androidx.compose.runtime.Immutable
4+
import com.boostcamp.mapisode.model.GroupModel
5+
import kotlinx.collections.immutable.ImmutableList
6+
import kotlinx.collections.immutable.toImmutableList
7+
import java.util.Date
8+
9+
@Immutable
10+
data class GroupUiModel(
11+
val id: String,
12+
val adminUser: String,
13+
val createdAt: Date,
14+
val description: String,
15+
val imageUrl: String,
16+
val name: String,
17+
val members: ImmutableList<String>,
18+
) {
19+
fun toGroupModel(): GroupModel = GroupModel(
20+
id = id,
21+
adminUser = adminUser,
22+
createdAt = createdAt,
23+
description = description,
24+
imageUrl = imageUrl,
25+
name = name,
26+
members = members.toList(),
27+
)
28+
}
29+
30+
fun GroupModel.toGroupUiModel(): GroupUiModel = GroupUiModel(
31+
id = id,
32+
adminUser = adminUser,
33+
createdAt = createdAt,
34+
description = description,
35+
imageUrl = imageUrl,
36+
name = name,
37+
members = members.toImmutableList(),
38+
)

feature/mygroup/src/main/java/com/boostcamp/mapisode/mygroup/screen/GroupDetailScreen.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -266,7 +266,7 @@ fun GroupDetailContent(
266266
0 -> {
267267
if (uiState.group != null) {
268268
GroupDetailContent(
269-
group = uiState.group,
269+
group = uiState.group.toGroupModel(),
270270
members = uiState.membersInfo,
271271
onIssueCodeClick = onIssueCodeClick,
272272
onGroupOutClick = onGroupOutClick,
Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,19 @@
11
package com.boostcamp.mapisode.mygroup.state
22

33
import androidx.compose.runtime.Immutable
4-
import com.boostcamp.mapisode.model.GroupModel
54
import com.boostcamp.mapisode.mygroup.model.GroupUiEpisodeModel
65
import com.boostcamp.mapisode.mygroup.model.GroupUiMemberModel
6+
import com.boostcamp.mapisode.mygroup.model.GroupUiModel
77
import com.boostcamp.mapisode.ui.base.UiState
8+
import kotlinx.collections.immutable.ImmutableList
9+
import kotlinx.collections.immutable.persistentListOf
810

911
@Immutable
1012
data class GroupDetailState(
1113
val isGroupIdCaching: Boolean = true,
1214
val isGroupLoading: Boolean = false,
1315
val isGroupOwner: Boolean = false,
14-
val group: GroupModel? = null,
15-
val membersInfo: List<GroupUiMemberModel> = emptyList(),
16-
val episodes: List<GroupUiEpisodeModel> = emptyList(),
16+
val group: GroupUiModel? = null,
17+
val membersInfo: ImmutableList<GroupUiMemberModel> = persistentListOf(),
18+
val episodes: ImmutableList<GroupUiEpisodeModel> = persistentListOf(),
1719
) : UiState

feature/mygroup/src/main/java/com/boostcamp/mapisode/mygroup/viewmodel/GroupDetailViewModel.kt

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,12 @@ import com.boostcamp.mapisode.mygroup.R
99
import com.boostcamp.mapisode.mygroup.intent.GroupDetailIntent
1010
import com.boostcamp.mapisode.mygroup.model.GroupUiMemberModel
1111
import com.boostcamp.mapisode.mygroup.model.toGroupUiEpisodeModel
12+
import com.boostcamp.mapisode.mygroup.model.toGroupUiModel
1213
import com.boostcamp.mapisode.mygroup.sideeffect.GroupDetailSideEffect
1314
import com.boostcamp.mapisode.mygroup.state.GroupDetailState
1415
import com.boostcamp.mapisode.ui.base.BaseViewModel
1516
import dagger.hilt.android.lifecycle.HiltViewModel
17+
import kotlinx.collections.immutable.toImmutableList
1618
import kotlinx.coroutines.delay
1719
import kotlinx.coroutines.flow.first
1820
import kotlinx.coroutines.launch
@@ -97,7 +99,7 @@ class GroupDetailViewModel @Inject constructor(
9799
intent {
98100
copy(
99101
isGroupLoading = false,
100-
group = group,
102+
group = group.toGroupUiModel(),
101103
)
102104
}
103105
if (group.adminUser == userPreferenceDataStore.getUserId().first()) {
@@ -154,7 +156,7 @@ class GroupDetailViewModel @Inject constructor(
154156

155157
intent {
156158
copy(
157-
membersInfo = memberInfo,
159+
membersInfo = memberInfo.toImmutableList(),
158160
)
159161
}
160162
}
@@ -186,7 +188,7 @@ class GroupDetailViewModel @Inject constructor(
186188
member.id == it.createdBy
187189
}?.name ?: ""
188190
it.toGroupUiEpisodeModel(name)
189-
},
191+
}.toImmutableList(),
190192
)
191193
}
192194
} catch (e: Exception) {

0 commit comments

Comments
 (0)