11package com.threegap.bitnagil.presentation.home
22
33import androidx.compose.foundation.background
4+ import androidx.compose.foundation.layout.Arrangement
45import androidx.compose.foundation.layout.Box
56import androidx.compose.foundation.layout.Column
7+ import androidx.compose.foundation.layout.Row
68import androidx.compose.foundation.layout.Spacer
79import androidx.compose.foundation.layout.fillMaxSize
810import androidx.compose.foundation.layout.fillMaxWidth
911import androidx.compose.foundation.layout.height
1012import androidx.compose.foundation.layout.padding
1113import androidx.compose.foundation.lazy.LazyColumn
1214import androidx.compose.foundation.shape.RoundedCornerShape
15+ import androidx.compose.material3.Text
1316import androidx.compose.runtime.Composable
1417import androidx.compose.runtime.getValue
1518import androidx.compose.ui.Alignment
1619import androidx.compose.ui.Modifier
17- import androidx.compose.ui.geometry.Offset
18- import androidx.compose.ui.graphics.Brush
1920import androidx.compose.ui.input.nestedscroll.nestedScroll
2021import androidx.compose.ui.tooling.preview.Preview
2122import androidx.compose.ui.unit.dp
22- import androidx.compose.ui.zIndex
2323import androidx.hilt.navigation.compose.hiltViewModel
2424import androidx.lifecycle.compose.collectAsStateWithLifecycle
2525import com.threegap.bitnagil.designsystem.BitnagilTheme
26- import com.threegap.bitnagil.designsystem.R
27- import com.threegap.bitnagil.designsystem.component.atom.BitnagilIcon
2826import com.threegap.bitnagil.designsystem.modifier.clickableWithoutRipple
2927import com.threegap.bitnagil.presentation.common.flow.collectAsEffect
3028import com.threegap.bitnagil.presentation.common.toast.GlobalBitnagilToast
3129import com.threegap.bitnagil.presentation.home.component.template.CollapsibleHomeHeader
3230import com.threegap.bitnagil.presentation.home.component.template.DeleteConfirmDialog
33- import com.threegap.bitnagil.presentation.home.component.template.RoutineDetailsBottomSheet
3431import com.threegap.bitnagil.presentation.home.component.template.EmptyRoutineView
32+ import com.threegap.bitnagil.presentation.home.component.template.RoutineDetailsBottomSheet
3533import com.threegap.bitnagil.presentation.home.component.template.RoutineSection
3634import com.threegap.bitnagil.presentation.home.component.template.WeeklyDatePicker
3735import com.threegap.bitnagil.presentation.home.model.HomeIntent
3836import com.threegap.bitnagil.presentation.home.model.HomeSideEffect
3937import com.threegap.bitnagil.presentation.home.model.HomeState
40- import com.threegap.bitnagil.presentation.home.model.RoutineUiModel
4138import com.threegap.bitnagil.presentation.home.util.rememberCollapsibleHeaderState
4239import java.time.LocalDate
4340
@@ -125,15 +122,15 @@ fun HomeScreenContainer(
125122 onSubRoutineCompletionToggle = { routineId, subRoutineId, isCompleted ->
126123 viewModel.toggleSubRoutineCompletion(routineId, subRoutineId, isCompleted)
127124 },
128- onShowRoutineDetailsBottomSheet = { routine ->
129- viewModel.sendIntent(HomeIntent .ShowRoutineDetailsBottomSheet (routine))
130- },
131125 onRegisterRoutineClick = {
132126 viewModel.sendIntent(HomeIntent .OnRegisterRoutineClick )
133127 },
134128 onRegisterEmotionClick = {
135129 viewModel.sendIntent(HomeIntent .OnRegisterEmotionClick )
136130 },
131+ onShowMoreRoutinesClick = {
132+ // TODO: 루틴 리스트 화면으로 이동
133+ }
137134 )
138135}
139136
@@ -145,26 +142,17 @@ private fun HomeScreen(
145142 onNextWeekClick : () -> Unit ,
146143 onRoutineCompletionToggle : (String , Boolean ) -> Unit ,
147144 onSubRoutineCompletionToggle : (String , String , Boolean ) -> Unit ,
148- onShowRoutineDetailsBottomSheet : (RoutineUiModel ) -> Unit ,
149145 onRegisterRoutineClick : () -> Unit ,
150146 onRegisterEmotionClick : () -> Unit ,
147+ onShowMoreRoutinesClick : () -> Unit ,
151148 modifier : Modifier = Modifier ,
152149) {
153150 val collapsibleHeaderState = rememberCollapsibleHeaderState()
154151
155152 Box (
156153 modifier = modifier
157154 .fillMaxSize()
158- .background(
159- brush = Brush .linearGradient(
160- colors = listOf (
161- BitnagilTheme .colors.homeGradientStartColor,
162- BitnagilTheme .colors.homeGradientEndColor,
163- ),
164- start = Offset (0f , 0f ),
165- end = Offset (collapsibleHeaderState.screenHeight.value, collapsibleHeaderState.screenWidth.value * 2 ),
166- ),
167- ),
155+ .background(BitnagilTheme .colors.coolGray10),
168156 ) {
169157 Column {
170158 Spacer (modifier = Modifier .height(collapsibleHeaderState.currentHeaderHeight))
@@ -177,76 +165,88 @@ private fun HomeScreen(
177165 onNextWeekClick = onNextWeekClick,
178166 modifier = Modifier
179167 .background(
180- color = BitnagilTheme .colors.white ,
168+ color = BitnagilTheme .colors.coolGray99 ,
181169 shape = RoundedCornerShape (
182170 topStart = 20 .dp,
183171 topEnd = 20 .dp,
184172 ),
185173 ),
186174 )
187175
188- LazyColumn (
189- state = collapsibleHeaderState.lazyListState,
190- modifier = Modifier
191- .fillMaxSize()
192- .background(BitnagilTheme .colors.white)
193- .nestedScroll(collapsibleHeaderState.nestedScrollConnection),
194- ) {
195- if (uiState.selectedDateRoutines.isEmpty()) {
196- item {
197- EmptyRoutineView (
198- onRegisterRoutineClick = onRegisterRoutineClick,
199- modifier = Modifier
200- .fillMaxSize()
201- .padding(top = 62 .dp),
202- )
203- }
204- } else {
205- uiState.selectedDateRoutines.forEachIndexed { index, routine ->
176+ if (uiState.selectedDateRoutines.isEmpty()) {
177+ EmptyRoutineView (
178+ onRegisterRoutineClick = onRegisterRoutineClick,
179+ modifier = Modifier
180+ .fillMaxSize()
181+ .background(BitnagilTheme .colors.coolGray99)
182+ .padding(top = 62 .dp),
183+ )
184+ } else {
185+ Row (
186+ modifier = Modifier
187+ .fillMaxWidth()
188+ .background(BitnagilTheme .colors.coolGray99)
189+ .padding(start = 16 .dp, end = 4 .dp),
190+ horizontalArrangement = Arrangement .SpaceBetween ,
191+ verticalAlignment = Alignment .Top ,
192+ ) {
193+ Text (
194+ text = " 루틴 리스트" ,
195+ color = BitnagilTheme .colors.coolGray60,
196+ style = BitnagilTheme .typography.body2SemiBold,
197+ modifier = Modifier .padding(top = 6 .dp),
198+ )
199+ Text (
200+ text = " 더보기" ,
201+ color = BitnagilTheme .colors.coolGray10,
202+ style = BitnagilTheme .typography.body2SemiBold,
203+ modifier = Modifier
204+ .clickableWithoutRipple { onShowMoreRoutinesClick() }
205+ .padding(vertical = 10 .dp, horizontal = 12 .dp),
206+ )
207+ }
208+
209+ LazyColumn (
210+ modifier = Modifier
211+ .fillMaxSize()
212+ .background(BitnagilTheme .colors.coolGray99)
213+ .nestedScroll(collapsibleHeaderState.nestedScrollConnection)
214+ .padding(horizontal = 16 .dp)
215+ .padding(bottom = 12 .dp),
216+ state = collapsibleHeaderState.lazyListState,
217+ verticalArrangement = Arrangement .spacedBy(12 .dp),
218+ ) {
219+ uiState.selectedDateRoutines.forEach { routine ->
206220 item(
207221 key = " ${routine.routineId} _${uiState.selectedDate} " ,
208222 ) {
209- Box (
210- modifier = Modifier .fillMaxWidth(),
211- ) {
212- RoutineSection (
213- routine = routine,
214- onRoutineToggle = { isCompleted ->
215- onRoutineCompletionToggle(
216- routine.routineId,
217- isCompleted,
218- )
219- },
220- onSubRoutineToggle = { subRoutineId, isCompleted ->
221- onSubRoutineCompletionToggle(
222- routine.routineId,
223- subRoutineId,
224- isCompleted,
225- )
226- },
227- onMoreClick = {
228- onShowRoutineDetailsBottomSheet(routine)
229- },
230- modifier = Modifier
231- .padding(top = 23 .dp, bottom = 10 .dp)
232- .padding(horizontal = 16 .dp),
233- )
234-
223+ RoutineSection (
224+ routine = routine,
225+ onRoutineToggle = { isCompleted ->
226+ onRoutineCompletionToggle(
227+ routine.routineId,
228+ isCompleted,
229+ )
230+ },
231+ onSubRoutineToggle = { subRoutineId, isCompleted ->
232+ onSubRoutineCompletionToggle(
233+ routine.routineId,
234+ subRoutineId,
235+ isCompleted,
235236 )
237+ },
238+ )
236239 }
237240 }
238241 }
239- item {
240- Spacer (modifier = Modifier .height(110 .dp))
241- }
242242 }
243243 }
244244
245245 CollapsibleHomeHeader (
246246 userName = uiState.userNickname,
247247 emotionBallType = uiState.myEmotion,
248248 collapsibleHeaderState = collapsibleHeaderState,
249- onEmotionRecordClick = onRegisterEmotionClick,
249+ onRegisterEmotion = onRegisterEmotionClick,
250250 )
251251 }
252252}
@@ -261,8 +261,8 @@ private fun HomeScreenPreview() {
261261 onNextWeekClick = {},
262262 onRoutineCompletionToggle = { _, _ -> },
263263 onSubRoutineCompletionToggle = { _, _, _ -> },
264- onShowRoutineDetailsBottomSheet = {},
265264 onRegisterRoutineClick = {},
266265 onRegisterEmotionClick = {},
266+ onShowMoreRoutinesClick = {}
267267 )
268268}
0 commit comments