1
1
package com.everymeal.presentation.ui.signup
2
2
3
+ import android.annotation.SuppressLint
3
4
import androidx.compose.foundation.Image
4
5
import androidx.compose.foundation.background
6
+ import androidx.compose.foundation.clickable
7
+ import androidx.compose.foundation.interaction.MutableInteractionSource
5
8
import androidx.compose.foundation.layout.Arrangement
6
9
import androidx.compose.foundation.layout.Box
7
10
import androidx.compose.foundation.layout.Column
@@ -17,6 +20,10 @@ import androidx.compose.foundation.shape.RoundedCornerShape
17
20
import androidx.compose.material3.Icon
18
21
import androidx.compose.material3.Text
19
22
import androidx.compose.runtime.Composable
23
+ import androidx.compose.runtime.LaunchedEffect
24
+ import androidx.compose.runtime.collectAsState
25
+ import androidx.compose.runtime.getValue
26
+ import androidx.compose.runtime.remember
20
27
import androidx.compose.ui.Alignment
21
28
import androidx.compose.ui.Modifier
22
29
import androidx.compose.ui.draw.clip
@@ -30,13 +37,15 @@ import androidx.compose.ui.text.font.FontWeight
30
37
import androidx.compose.ui.tooling.preview.Preview
31
38
import androidx.compose.ui.unit.dp
32
39
import androidx.compose.ui.unit.sp
40
+ import androidx.hilt.navigation.compose.hiltViewModel
33
41
import com.everymeal.presentation.R
34
42
import com.everymeal.presentation.components.EveryMealMainButton
35
43
import com.everymeal.presentation.ui.theme.EveryMeal_AndroidTheme
36
44
import com.everymeal.presentation.ui.theme.Gray100
37
45
import com.everymeal.presentation.ui.theme.Gray300
38
46
import com.everymeal.presentation.ui.theme.Gray500
39
47
import com.everymeal.presentation.ui.theme.Gray800
48
+ import com.everymeal.presentation.ui.theme.Paddings
40
49
41
50
data class Item (
42
51
val Image : Int ,
@@ -45,8 +54,11 @@ data class Item(
45
54
46
55
@Composable
47
56
fun UnivSelectScreen (
48
- onSelectClick : () -> Unit
57
+ viewModel : UnivSelectViewModel = hiltViewModel(),
58
+ onUnivSelectClick : () -> Unit ,
49
59
) {
60
+ val viewState by viewModel.viewState.collectAsState()
61
+
50
62
val items = listOf (
51
63
Item (Image = R .drawable.image_myongji, name = " 명지대" ),
52
64
Item (Image = R .drawable.image_sungsin, name = " 성신여대" ),
@@ -62,7 +74,7 @@ fun UnivSelectScreen(
62
74
Column (
63
75
modifier = Modifier
64
76
.fillMaxSize()
65
- .padding(horizontal = 24 .dp )
77
+ .padding(horizontal = Paddings .extra )
66
78
) {
67
79
Spacer (modifier = Modifier .padding(58 .dp))
68
80
Text (
@@ -78,14 +90,21 @@ fun UnivSelectScreen(
78
90
modifier = Modifier .weight(1f ),
79
91
) {
80
92
items(items.size) { index ->
81
- UnivSelectItem (item = items[index])
93
+ val item = items[index]
94
+ val isSelected = viewState.selectedUniv == item.name
95
+ UnivSelectItem (
96
+ item = item,
97
+ isSelected = isSelected,
98
+ ) {
99
+ viewModel.setEvent(UnivSelectContract .UnivSelectEvent .SelectedUniv (item.name))
100
+ }
82
101
}
83
102
}
84
103
Row (
85
104
modifier = Modifier
86
105
.fillMaxWidth()
87
106
.background(Gray300 , RoundedCornerShape (100 .dp))
88
- .padding(horizontal = 24 .dp , vertical = 14 .dp),
107
+ .padding(horizontal = Paddings .extra , vertical = 14 .dp),
89
108
verticalAlignment = Alignment .CenterVertically ,
90
109
) {
91
110
Icon (
@@ -115,21 +134,36 @@ fun UnivSelectScreen(
115
134
}
116
135
EveryMealMainButton (
117
136
text = stringResource(R .string.select),
118
- enabled = false ,
137
+ enabled = viewState.selectedUniv.isNotEmpty() ,
119
138
) {
120
- onSelectClick()
139
+ viewModel.setEvent(UnivSelectContract .UnivSelectEvent .SelectButtonClicked )
140
+ }
141
+ }
142
+ }
143
+
144
+ LaunchedEffect (key1 = viewModel.effect) {
145
+ viewModel.effect.collect { effect ->
146
+ when (effect) {
147
+ UnivSelectContract .UnivSelectEffect .MoveToMain -> {
148
+ onUnivSelectClick()
149
+ }
121
150
}
122
151
}
123
152
}
124
153
}
125
154
155
+ @SuppressLint(" RememberReturnType" )
126
156
@Composable
127
- fun UnivSelectItem (item : Item ) {
157
+ fun UnivSelectItem (item : Item , isSelected : Boolean , onSelectClick : ( Item ) -> Unit ) {
128
158
Column (
129
159
modifier = Modifier
130
- .padding(8 .dp)
131
- .clip(RoundedCornerShape (8 .dp))
132
- .background(Gray100 )
160
+ .clickable(
161
+ indication = null ,
162
+ interactionSource = remember { MutableInteractionSource () }
163
+ ) { onSelectClick(item) }
164
+ .padding(Paddings .medium)
165
+ .clip(RoundedCornerShape (Paddings .medium))
166
+ .background(if (isSelected) Gray500 else Gray100 )
133
167
.fillMaxSize(),
134
168
horizontalAlignment = Alignment .CenterHorizontally ,
135
169
verticalArrangement = Arrangement .Center
@@ -152,7 +186,9 @@ fun UnivSelectItem(item: Item) {
152
186
@Composable
153
187
fun UnivSelectScreenPreview () {
154
188
EveryMeal_AndroidTheme {
155
- UnivSelectScreen { }
189
+ UnivSelectScreen {
190
+
191
+ }
156
192
}
157
193
}
158
194
@@ -161,8 +197,12 @@ fun UnivSelectScreenPreview() {
161
197
fun UnivSelectScreenItemPreview () {
162
198
EveryMeal_AndroidTheme {
163
199
UnivSelectItem (item = Item (
164
- Image = R .drawable.image_myongji,
165
- name = " 명지대학교"
166
- ))
200
+ Image = R .drawable.image_myongji,
201
+ name = " 명지대학교"
202
+ ),
203
+ false
204
+ ) {
205
+
206
+ }
167
207
}
168
208
}
0 commit comments