Skip to content

Commit 490e179

Browse files
committed
REFACTOR: 리디자인된 루틴 작성/수정 화면에 맞게 ViewModel 수정 및 세부 UI 수정
1 parent 747ddbd commit 490e179

9 files changed

Lines changed: 327 additions & 89 deletions

File tree

presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/WriteRoutineScreen.kt

Lines changed: 51 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -76,33 +76,42 @@ fun WriteRoutineScreenContainer(
7676
if (state.showStartDatePickerBottomSheet) {
7777
DatePickerBottomSheet(
7878
modifier = Modifier.fillMaxWidth(),
79-
onDateSelected = {},
80-
date = state.startDate ?: Date.now(),
81-
onDismiss = {},
79+
onDateSelected = viewModel::setStartDate,
80+
date = state.startDate ?: state.endDate?.let { Date.min(it, Date.now()) } ?: Date.now(),
81+
onDismiss = viewModel::hideStartDatePickerBottomSheet,
82+
availableStartDate = null,
83+
availableEndDate = state.endDate,
8284
)
8385
}
8486

8587
if (state.showEndDatePickerBottomSheet) {
8688
DatePickerBottomSheet(
8789
modifier = Modifier.fillMaxWidth(),
88-
onDateSelected = {},
89-
date = state.endDate ?: Date.now(),
90-
onDismiss = {},
90+
onDateSelected = viewModel::setEndDate,
91+
date = state.endDate ?: state.startDate?.let { Date.max(it, Date.now()) } ?: Date.now(),
92+
onDismiss = viewModel::hideEndDatePickerBottomSheet,
93+
availableStartDate = state.startDate,
94+
availableEndDate = null,
9195
)
9296
}
9397

9498
WriteRoutineScreen(
9599
state = state,
96100
setRoutineName = viewModel::setRoutineName,
97101
setSubRoutineName = viewModel::setSubRoutineName,
98-
addSubRoutine = viewModel::addSubRoutine,
102+
selectNotUseSubRoutines = viewModel::selectNotUseSubRoutines,
99103
selectRepeatTime = viewModel::selectRepeatType,
100104
selectDay = viewModel::selectDay,
101105
selectAllTime = viewModel::selectAllTime,
102106
showTimePickerBottomSheet = viewModel::showTimePickerBottomSheet,
103107
onClickRegister = viewModel::registerRoutine,
104-
removeSubRoutine = viewModel::removeSubRoutine,
105108
onClickBack = navigateToBack,
109+
onClickSubRoutineExpand = viewModel::toggleSubRoutineUiExpanded,
110+
onClickRepeatDaysExpand = viewModel::toggleRepeatDaysUiExpanded,
111+
onClickStartTimeExpand = viewModel::toggleStartTimeUiExpanded,
112+
onClickPeriodExpand = viewModel::togglePeriodUiExpanded,
113+
showStartDatePickerBottomSheet = viewModel::showStartDatePickerBottomSheet,
114+
showEndDatePickerBottomSheet = viewModel::showEndDatePickerBottomSheet,
106115
)
107116
}
108117

@@ -111,14 +120,19 @@ private fun WriteRoutineScreen(
111120
state: WriteRoutineState,
112121
setRoutineName: (String) -> Unit,
113122
setSubRoutineName: (Int, String) -> Unit,
114-
addSubRoutine: () -> Unit,
123+
selectNotUseSubRoutines: () -> Unit,
115124
selectRepeatTime: (RepeatType) -> Unit,
116125
selectDay: (Day) -> Unit,
117126
selectAllTime: () -> Unit,
118127
showTimePickerBottomSheet: () -> Unit,
119128
onClickRegister: () -> Unit,
120-
removeSubRoutine: (Int) -> Unit,
121129
onClickBack: () -> Unit,
130+
onClickSubRoutineExpand: () -> Unit,
131+
onClickRepeatDaysExpand: () -> Unit,
132+
onClickStartTimeExpand: () -> Unit,
133+
onClickPeriodExpand: () -> Unit,
134+
showStartDatePickerBottomSheet: () -> Unit,
135+
showEndDatePickerBottomSheet: () -> Unit,
122136
) {
123137
val scrollState = rememberScrollState()
124138

@@ -163,10 +177,8 @@ private fun WriteRoutineScreen(
163177
iconResourceId = R.drawable.img_subroutines,
164178
title = "세부루틴",
165179
placeHolder = "ex) 일어나자마자 이불 개기",
166-
valueText = "",
167-
onClick = {
168-
169-
}
180+
valueText = state.subRoutinesText,
181+
onClick = onClickSubRoutineExpand
170182
) {
171183
Column(
172184
modifier = Modifier.fillMaxWidth().padding(horizontal = 18.dp, vertical = 20.dp),
@@ -178,31 +190,29 @@ private fun WriteRoutineScreen(
178190
placeHolder = getSubRoutinePlaceHolder(0),
179191
value = state.subRoutineNames.getOrNull(0) ?: "",
180192
onValueChange = { setSubRoutineName(0, it) },
181-
enabled = true,
193+
enabled = !state.selectNotUseSUbRoutines,
182194
)
183195

184196
SubRoutineField(
185197
resourceId = R.drawable.img_circle_2,
186198
placeHolder = getSubRoutinePlaceHolder(1),
187199
value = state.subRoutineNames.getOrNull(1) ?: "",
188200
onValueChange = { setSubRoutineName(1, it) },
189-
enabled = true,
201+
enabled = !state.selectNotUseSUbRoutines,
190202
)
191203

192204
SubRoutineField(
193205
resourceId = R.drawable.img_circle_3,
194206
placeHolder = getSubRoutinePlaceHolder(2),
195207
value = state.subRoutineNames.getOrNull(2) ?: "",
196208
onValueChange = { setSubRoutineName(2, it) },
197-
enabled = true,
209+
enabled = !state.selectNotUseSUbRoutines,
198210
)
199211

200212
LabeledCheckBox(
201213
label = "세부 루틴 설정 안함",
202-
checked = true,
203-
onClick = {
204-
addSubRoutine()
205-
}
214+
checked = state.selectNotUseSUbRoutines,
215+
onClick = selectNotUseSubRoutines
206216
)
207217
}
208218
}
@@ -213,10 +223,8 @@ private fun WriteRoutineScreen(
213223
iconResourceId = R.drawable.img_repeat_days,
214224
title = "반복 요일",
215225
placeHolder = "ex) 매주 월,화,수.목,금",
216-
valueText = "",
217-
onClick = {
218-
219-
}
226+
valueText = state.repeatDaysText,
227+
onClick = onClickRepeatDaysExpand
220228
) {
221229
Column(
222230
modifier = Modifier.fillMaxWidth().padding(top = 14.dp, bottom = 18.dp, start = 18.dp, end = 18.dp)
@@ -271,10 +279,8 @@ private fun WriteRoutineScreen(
271279
iconResourceId = R.drawable.img_routine_period,
272280
title = "목표 기간",
273281
placeHolder = "ex) 25.08.06 - 25.08.06",
274-
valueText = "",
275-
onClick = {
276-
277-
}
282+
valueText = state.periodText,
283+
onClick = onClickPeriodExpand
278284
) {
279285
Column(
280286
modifier = Modifier.fillMaxWidth().padding(top = 14.dp, bottom = 18.dp, start = 18.dp, end = 18.dp),
@@ -283,15 +289,15 @@ private fun WriteRoutineScreen(
283289
RoutineDetailRow(
284290
title = "시작일",
285291
placeHolder = "눌러서 선택",
286-
value = "",
287-
onClick = {},
292+
value = state.startDate?.toFormattedString() ?: "",
293+
onClick = showStartDatePickerBottomSheet,
288294
)
289295

290296
RoutineDetailRow(
291297
title = "종료일",
292298
placeHolder = "눌러서 선택",
293-
value = "",
294-
onClick = {},
299+
value = state.endDate?.toFormattedString() ?: "",
300+
onClick = showEndDatePickerBottomSheet,
295301
)
296302
}
297303
}
@@ -302,10 +308,8 @@ private fun WriteRoutineScreen(
302308
iconResourceId = R.drawable.img_start_time,
303309
title = "시간",
304310
placeHolder = "ex) 오전 9:40부터 시작",
305-
valueText = "",
306-
onClick = {
307-
308-
}
311+
valueText = state.startTimeText,
312+
onClick = onClickStartTimeExpand
309313
) {
310314
Column(
311315
modifier = Modifier.fillMaxWidth().padding(top = 14.dp, bottom = 18.dp, start = 18.dp, end = 18.dp),
@@ -314,18 +318,16 @@ private fun WriteRoutineScreen(
314318
RoutineDetailRow(
315319
title = "시작 시간",
316320
placeHolder = "눌러서 선택",
317-
value = "",
318-
onClick = {},
321+
value = state.startTime?.toAmPmFormattedString() ?: "",
322+
onClick = showTimePickerBottomSheet,
319323
)
320324

321325
Spacer(modifier = Modifier.height(20.dp))
322326

323327
LabeledCheckBox(
324328
label = "하루 종일",
325329
checked = state.selectAllTime,
326-
onClick = {
327-
328-
}
330+
onClick = selectAllTime
329331
)
330332
}
331333

@@ -361,14 +363,19 @@ fun WriteRoutineScreenPreview() {
361363
state = WriteRoutineState.Init.copy(periodUiExpanded = true, startTimeUiExpanded = true),
362364
setRoutineName = {},
363365
setSubRoutineName = { _, _ -> },
364-
addSubRoutine = {},
365366
selectRepeatTime = {},
366367
selectDay = {},
367368
selectAllTime = {},
368369
showTimePickerBottomSheet = {},
369370
onClickRegister = {},
370-
removeSubRoutine = {},
371371
onClickBack = {},
372+
onClickSubRoutineExpand = {},
373+
onClickRepeatDaysExpand = {},
374+
onClickStartTimeExpand = {},
375+
onClickPeriodExpand = {},
376+
showStartDatePickerBottomSheet = {},
377+
showEndDatePickerBottomSheet = {},
378+
selectNotUseSubRoutines = {}
372379
)
373380
}
374381
}

0 commit comments

Comments
 (0)