Skip to content

Commit 951f1a0

Browse files
committed
✨ 그룹 생성 시 규칙 삭제가 가능하도록 구현(chip)
1 parent eed25fa commit 951f1a0

File tree

3 files changed

+70
-19
lines changed

3 files changed

+70
-19
lines changed

presentation/src/main/java/com/whyranoid/presentation/community/group/create/CreateGroupFragment.kt

Lines changed: 40 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import androidx.compose.runtime.getValue
88
import androidx.compose.ui.platform.ViewCompositionStrategy
99
import androidx.fragment.app.viewModels
1010
import androidx.navigation.fragment.findNavController
11+
import com.google.android.material.chip.Chip
1112
import com.google.android.material.snackbar.Snackbar
1213
import com.whyranoid.presentation.R
1314
import com.whyranoid.presentation.base.BaseFragment
@@ -25,15 +26,53 @@ internal class CreateGroupFragment :
2526
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
2627
super.onViewCreated(view, savedInstanceState)
2728

28-
binding.viewModel = viewModel
29+
initViews()
30+
observeState()
31+
}
2932

33+
private fun initViews() {
34+
binding.viewModel = viewModel
3035
setupMenu()
36+
}
37+
38+
private fun observeState() {
39+
viewLifecycleOwner.repeatWhenUiStarted {
40+
viewModel.isGroupCreateButtonEnable.collect { isEnable ->
41+
if (isEnable) {
42+
binding.topAppBar.menu.setGroupVisible(R.id.ready_to_create, true)
43+
binding.topAppBar.menu.setGroupVisible(R.id.not_ready_to_create, false)
44+
} else {
45+
binding.topAppBar.menu.setGroupVisible(R.id.ready_to_create, false)
46+
binding.topAppBar.menu.setGroupVisible(R.id.not_ready_to_create, true)
47+
}
48+
}
49+
}
3150

3251
viewLifecycleOwner.repeatWhenUiStarted {
3352
viewModel.eventFlow.collect { event ->
3453
handleEvent(event)
3554
}
3655
}
56+
57+
viewLifecycleOwner.repeatWhenUiStarted {
58+
viewModel.rules.collect { rules ->
59+
binding.ruleChipGroup.apply {
60+
removeAllViews()
61+
rules.forEach { rule ->
62+
addView(
63+
Chip(requireContext()).apply {
64+
isCloseIconVisible = true
65+
setChipBackgroundColorResource(R.color.mogakrun_primary)
66+
text = rule
67+
setOnCloseIconClickListener {
68+
viewModel.removeRule(rule)
69+
}
70+
}
71+
)
72+
}
73+
}
74+
}
75+
}
3776
}
3877

3978
private fun handleEvent(event: Event) {
@@ -114,17 +153,5 @@ internal class CreateGroupFragment :
114153
}
115154
}
116155
}
117-
118-
viewLifecycleOwner.repeatWhenUiStarted {
119-
viewModel.isGroupCreateButtonEnable.collect { isEnable ->
120-
if (isEnable) {
121-
binding.topAppBar.menu.setGroupVisible(R.id.ready_to_create, true)
122-
binding.topAppBar.menu.setGroupVisible(R.id.not_ready_to_create, false)
123-
} else {
124-
binding.topAppBar.menu.setGroupVisible(R.id.ready_to_create, false)
125-
binding.topAppBar.menu.setGroupVisible(R.id.not_ready_to_create, true)
126-
}
127-
}
128-
}
129156
}
130157
}

presentation/src/main/java/com/whyranoid/presentation/community/group/create/CreateGroupViewModel.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,10 @@ class CreateGroupViewModel @Inject constructor(
4747
_showDialog.value = false
4848
}
4949

50+
fun removeRule(rule: String) {
51+
rules.value = rules.value.filter { it != rule }
52+
}
53+
5054
val isDoubleCheckButtonEnable: StateFlow<Boolean>
5155
get() = groupName.combine(groupIntroduce) { name, introduce ->
5256
name?.trim()?.isNotEmpty() ?: false && introduce?.trim()?.isNotEmpty() ?: false

presentation/src/main/res/layout/fragment_create_group.xml

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
xmlns:tools="http://schemas.android.com/tools">
55

66
<data>
7+
78
<variable
89
name="viewModel"
910
type="com.whyranoid.presentation.community.group.create.CreateGroupViewModel" />
@@ -65,19 +66,38 @@
6566
app:layout_constraintEnd_toEndOf="parent"
6667
app:layout_constraintTop_toBottomOf="@id/app_bar" />
6768

68-
<TextView
69+
<ScrollView
6970
android:id="@+id/time_and_date_picker"
70-
style="@style/MoGakRunText.Bold.Medium"
7171
android:layout_width="0dp"
7272
android:layout_height="70dp"
7373
android:layout_margin="16dp"
7474
android:background="@color/mogakrun_secondary_dark"
75-
android:gravity="center_vertical"
76-
android:text="@{viewModel.rules.toString()}"
75+
android:paddingHorizontal="8dp"
76+
android:scrollbars="none"
7777
app:layout_constraintEnd_toStartOf="@id/btn_select_rule"
7878
app:layout_constraintStart_toStartOf="parent"
79-
app:layout_constraintTop_toBottomOf="@id/text_input_layout_group_name"
80-
tools:text="규칙들 들어갈 자리입니다~" />
79+
app:layout_constraintTop_toBottomOf="@id/text_input_layout_group_name">
80+
81+
<com.google.android.material.chip.ChipGroup
82+
android:id="@+id/rule_chip_group"
83+
style="@style/MoGakRunText.Bold.Medium"
84+
android:layout_width="wrap_content"
85+
android:layout_height="wrap_content" />
86+
</ScrollView>
87+
88+
<!-- <TextView-->
89+
<!-- android:id="@+id/time_and_date_picker"-->
90+
<!-- style="@style/MoGakRunText.Bold.Medium"-->
91+
<!-- android:layout_width="0dp"-->
92+
<!-- android:layout_height="70dp"-->
93+
<!-- android:layout_margin="16dp"-->
94+
<!-- android:background="@color/mogakrun_secondary_dark"-->
95+
<!-- android:gravity="center_vertical"-->
96+
<!-- android:text="@{viewModel.rules.toString()}"-->
97+
<!-- app:layout_constraintEnd_toStartOf="@id/btn_select_rule"-->
98+
<!-- app:layout_constraintStart_toStartOf="parent"-->
99+
<!-- app:layout_constraintTop_toBottomOf="@id/text_input_layout_group_name"-->
100+
<!-- tools:text="규칙들 들어갈 자리입니다~" />-->
81101

82102
<com.google.android.material.button.MaterialButton
83103
android:id="@+id/btn_select_rule"

0 commit comments

Comments
 (0)