1
1
package com.everymeal.presentation.components
2
2
3
3
import androidx.compose.foundation.Image
4
+ import androidx.compose.foundation.clickable
5
+ import androidx.compose.foundation.interaction.MutableInteractionSource
6
+ import androidx.compose.foundation.layout.Arrangement
4
7
import androidx.compose.foundation.layout.Column
8
+ import androidx.compose.foundation.layout.Row
5
9
import androidx.compose.foundation.layout.Spacer
6
10
import androidx.compose.foundation.layout.fillMaxWidth
7
11
import androidx.compose.foundation.layout.padding
8
12
import androidx.compose.foundation.layout.size
13
+ import androidx.compose.foundation.lazy.LazyRow
14
+ import androidx.compose.foundation.shape.RoundedCornerShape
9
15
import androidx.compose.material3.ExperimentalMaterial3Api
10
16
import androidx.compose.material3.ModalBottomSheet
17
+ import androidx.compose.material3.Surface
11
18
import androidx.compose.material3.Text
12
19
import androidx.compose.runtime.Composable
20
+ import androidx.compose.runtime.remember
21
+ import androidx.compose.ui.Alignment
13
22
import androidx.compose.ui.Modifier
14
23
import androidx.compose.ui.graphics.Color
24
+ import androidx.compose.ui.graphics.vector.ImageVector
15
25
import androidx.compose.ui.res.painterResource
16
26
import androidx.compose.ui.res.stringResource
27
+ import androidx.compose.ui.res.vectorResource
17
28
import androidx.compose.ui.text.font.FontWeight
18
29
import androidx.compose.ui.unit.dp
19
30
import androidx.compose.ui.unit.sp
20
31
import com.everymeal.presentation.R
32
+ import com.everymeal.presentation.ui.home.CategoryItem
33
+ import com.everymeal.presentation.ui.home.HomeCategoryList
21
34
import com.everymeal.presentation.ui.theme.Gray600
22
35
import com.everymeal.presentation.ui.theme.Gray900
36
+ import com.everymeal.presentation.ui.theme.Grey2
37
+ import com.everymeal.presentation.ui.theme.Grey7
38
+ import com.everymeal.presentation.ui.theme.Typography
23
39
24
40
@OptIn(ExperimentalMaterial3Api ::class )
25
41
@Composable
@@ -65,4 +81,151 @@ fun EveryMealMainBottomSheetDialog(
65
81
Spacer (modifier = Modifier .padding(10 .dp))
66
82
}
67
83
}
84
+ }
85
+
86
+ @OptIn(ExperimentalMaterial3Api ::class )
87
+ @Composable
88
+ fun EveryMealSortCategoryBottomSheetDialog (
89
+ onClick : (String ) -> Unit ,
90
+ onDismiss : () -> Unit
91
+ ) {
92
+ ModalBottomSheet (
93
+ onDismissRequest = { onDismiss() },
94
+ containerColor = Color .White ,
95
+ ) {
96
+ Column (
97
+ modifier = Modifier
98
+ .fillMaxWidth()
99
+ .padding(horizontal = 20 .dp)
100
+ ) {
101
+ Text (
102
+ modifier = Modifier
103
+ .fillMaxWidth()
104
+ .clickable { onClick(" 인기순" ) }
105
+ .padding(vertical = 14 .dp),
106
+ text = stringResource(R .string.popularity_sort),
107
+ fontSize = 17 .sp,
108
+ color = Gray900 ,
109
+ fontWeight = FontWeight .SemiBold ,
110
+ )
111
+ Spacer (modifier = Modifier .padding(4 .dp))
112
+ Text (
113
+ modifier = Modifier
114
+ .fillMaxWidth()
115
+ .clickable { onClick(" 거리순" ) }
116
+ .padding(vertical = 14 .dp),
117
+ text = stringResource(R .string.distance_sort),
118
+ fontSize = 17 .sp,
119
+ color = Gray900 ,
120
+ fontWeight = FontWeight .SemiBold ,
121
+ )
122
+ Spacer (modifier = Modifier .padding(4 .dp))
123
+ Text (
124
+ modifier = Modifier
125
+ .fillMaxWidth()
126
+ .clickable { onClick(" 최신순" ) }
127
+ .padding(vertical = 14 .dp),
128
+ text = stringResource(R .string.recent_sort),
129
+ fontSize = 17 .sp,
130
+ color = Gray900 ,
131
+ fontWeight = FontWeight .SemiBold ,
132
+ )
133
+ Spacer (modifier = Modifier .padding(10 .dp))
134
+ }
135
+ }
136
+ }
137
+
138
+ @OptIn(ExperimentalMaterial3Api ::class )
139
+ @Composable
140
+ fun EveryMealCategoryRatingBottomSheetDialog (
141
+ onClick : () -> Unit ,
142
+ onDismiss : () -> Unit ,
143
+ onCategoryClick : (String ) -> Unit ,
144
+ onRatingClick : (Int ) -> Unit
145
+ ) {
146
+ ModalBottomSheet (
147
+ onDismissRequest = { onDismiss() },
148
+ containerColor = Color .White ,
149
+ ) {
150
+ Column (
151
+ modifier = Modifier
152
+ .fillMaxWidth()
153
+ .padding(horizontal = 20 .dp)
154
+ ) {
155
+ Text (
156
+ modifier = Modifier
157
+ .fillMaxWidth()
158
+ .padding(vertical = 14 .dp),
159
+ text = stringResource(R .string.meal_category),
160
+ fontSize = 17 .sp,
161
+ color = Gray900 ,
162
+ fontWeight = FontWeight .SemiBold ,
163
+ )
164
+ Spacer (modifier = Modifier .padding(4 .dp))
165
+ HomeCategoryList (
166
+ isBottomSheet = true
167
+ ) {
168
+ onCategoryClick(it)
169
+ }
170
+ Spacer (modifier = Modifier .padding(4 .dp))
171
+ Text (
172
+ modifier = Modifier
173
+ .fillMaxWidth()
174
+ .padding(vertical = 14 .dp),
175
+ text = stringResource(R .string.rating_category),
176
+ fontSize = 17 .sp,
177
+ color = Gray900 ,
178
+ fontWeight = FontWeight .SemiBold ,
179
+ )
180
+ Spacer (modifier = Modifier .padding(4 .dp))
181
+ LazyRow (content = {
182
+ items(5 ) {
183
+ RatingItem (
184
+ ratingCount = it + 1 ,
185
+ onRatingClick = onRatingClick
186
+ )
187
+ Spacer (modifier = Modifier .padding(4 .dp))
188
+ }
189
+ })
190
+ Spacer (modifier = Modifier .padding(4 .dp))
191
+ EveryMealMainButton (
192
+ text = stringResource(R .string.meal_rating_category_apply),
193
+ onClick = onClick,
194
+ )
195
+ Spacer (modifier = Modifier .padding(10 .dp))
196
+ }
197
+ }
198
+ }
199
+
200
+ @Composable
201
+ fun RatingItem (
202
+ ratingCount : Int ,
203
+ onRatingClick : (Int ) -> Unit
204
+ ) {
205
+ Surface (
206
+ modifier = Modifier .clickable(
207
+ indication = null ,
208
+ interactionSource = remember { MutableInteractionSource () }
209
+ ) { onRatingClick(ratingCount) },
210
+ color = Grey2 ,
211
+ shape = RoundedCornerShape (100 .dp),
212
+ ) {
213
+ Row (
214
+ verticalAlignment = Alignment .CenterVertically
215
+ ) {
216
+ Image (
217
+ modifier = Modifier
218
+ .padding(start = 12 .dp)
219
+ .size(16 .dp),
220
+ imageVector = ImageVector .vectorResource(R .drawable.icon_gray_star_mono),
221
+ contentDescription = " rating"
222
+ )
223
+ Text (
224
+ text = ratingCount.toString(),
225
+ color = Grey7 ,
226
+ style = Typography .bodySmall,
227
+ modifier = Modifier .padding(start = 4 .dp, end = 12 .dp, top = 6 .dp, bottom = 6 .dp)
228
+ )
229
+ }
230
+ }
68
231
}
0 commit comments