Skip to content

Commit

Permalink
๐Ÿ”€ :: (#741) ์™ธ์ถœ ์‹ ์ฒญ ์‹œ๊ฐ„ ์„ค์ •
Browse files Browse the repository at this point in the history
๐Ÿ”€ :: (#741) ์™ธ์ถœ ์‹ ์ฒญ ์‹œ๊ฐ„ ์„ค์ •
  • Loading branch information
parkuiery authored Sep 13, 2024
2 parents 0cd4e9a + fb0ec5d commit 0774d53
Show file tree
Hide file tree
Showing 5 changed files with 57 additions and 30 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ fun Picker(
visibleItemsCount: Int = 3,
textModifier: Modifier = Modifier,
textStyle: TextStyle = LocalTextStyle.current,
color: Color = Color.Unspecified,
) {
val visibleItemsMiddle = visibleItemsCount / 2
val listScrollCount = Integer.MAX_VALUE
Expand All @@ -59,7 +60,7 @@ fun Picker(
val fadingEdgeGradient = remember {
Brush.verticalGradient(
0f to Color.Transparent,
0.5f to Color.Black,
0.5f to color,
1f to Color.Transparent,
)
}
Expand Down Expand Up @@ -90,6 +91,7 @@ fun Picker(
modifier = Modifier
.onSizeChanged { size -> itemHeightPixels.value = size.height }
.then(textModifier),
color = color,
)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -219,6 +219,7 @@ fun OutingApplicationScreen(
.topPadding(),
text = stringResource(R.string.outing_application_selected_companions),
style = DmsTheme.typography.caption,
color = DmsTheme.colorScheme.onSurface,
)
StudentList(
modifier = Modifier
Expand Down Expand Up @@ -300,18 +301,10 @@ fun OutingApplicationScreen(
.padding(padValues),
verticalArrangement = Arrangement.spacedBy(DefaultVerticalSpace),
) {
if (uiState.outingApplicationTime != null) {
val startTime = uiState.outingApplicationTime!!.startTime
val endTime = uiState.outingApplicationTime!!.endTime
FloatingNotice(
modifier = Modifier.horizontalPadding(),
text = stringResource(
id = R.string.outing_format_application_time,
startTime,
endTime,
),
)
}
FloatingNotice(
modifier = Modifier.horizontalPadding(),
text = stringResource(id = R.string.outing_format_application_time),
)
Row(
modifier = Modifier.fillMaxWidth(),
horizontalArrangement = Arrangement.spacedBy(DefaultHorizontalSpace),
Expand Down Expand Up @@ -352,6 +345,19 @@ fun OutingApplicationScreen(
.endPadding(),
text = { Text(text = stringResource(id = R.string.outing_start_time)) },
indicator = { OutingInputDefaults.Indicator() },
description = {
if (uiState.outingApplicationTime != null) {
Text(
text = stringResource(
id = R.string.outing_can_go_out_time,
uiState.outingApplicationTime!!.startTime,
uiState.outingApplicationTime!!.endTime,
),
style = DmsTheme.typography.caption,
color = DmsTheme.colorScheme.primary,
)
}
},
) {
val startTime = remember(uiState.selectedOutingStartTime) {
uiState.selectedOutingStartTime
Expand Down Expand Up @@ -612,6 +618,7 @@ private fun OutingInput(
modifier: Modifier = Modifier,
text: (@Composable () -> Unit)? = null,
indicator: (@Composable () -> Unit)? = null,
description: @Composable () -> Unit = { },
input: @Composable () -> Unit,
) {
Column(
Expand All @@ -627,6 +634,7 @@ private fun OutingInput(
}
}
input()
description()
}
}

Expand Down Expand Up @@ -660,6 +668,7 @@ private fun TimePickerSpinner(
startIndex = startTime.hour,
textStyle = DmsTheme.typography.body1,
textModifier = Modifier.padding(vertical = 10.dp),
color = DmsTheme.colorScheme.onSurface,
)
Text(
text = ":",
Expand All @@ -668,6 +677,7 @@ private fun TimePickerSpinner(
.weight(1f),
textAlign = TextAlign.Center,
style = DmsTheme.typography.body1,
color = DmsTheme.colorScheme.onSurface,
)
Picker(
modifier = Modifier.weight(1f),
Expand All @@ -677,12 +687,14 @@ private fun TimePickerSpinner(
startIndex = startTime.minute / 10,
textStyle = DmsTheme.typography.body1,
textModifier = Modifier.padding(vertical = 10.dp),
color = DmsTheme.colorScheme.onSurface,
)
Text(
modifier = Modifier
.weight(2f),
text = "~",
textAlign = TextAlign.Center,
color = DmsTheme.colorScheme.onSurface,
)
Picker(
modifier = Modifier.weight(1f),
Expand All @@ -692,13 +704,15 @@ private fun TimePickerSpinner(
startIndex = endTime.hour,
textStyle = DmsTheme.typography.body1,
textModifier = Modifier.padding(vertical = 10.dp),
color = DmsTheme.colorScheme.onSurface,
)
Text(
modifier = Modifier
.weight(1f),
text = ":",
fontSize = 30.sp,
textAlign = TextAlign.Center,
color = DmsTheme.colorScheme.onSurface,
)
Picker(
modifier = Modifier.weight(1f),
Expand All @@ -708,6 +722,7 @@ private fun TimePickerSpinner(
startIndex = endTime.minute / 10,
textStyle = DmsTheme.typography.body1,
textModifier = Modifier.padding(vertical = 10.dp),
color = DmsTheme.colorScheme.onSurface,
)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,12 +28,12 @@ import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextAlign
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.ramcosta.composedestinations.annotation.Destination
import team.aliens.dms.android.core.designsystem.AlertDialog
import team.aliens.dms.android.core.designsystem.ButtonDefaults
import team.aliens.dms.android.core.designsystem.ContainedButton
import team.aliens.dms.android.core.designsystem.DmsIcon
import team.aliens.dms.android.core.designsystem.DmsTheme
import team.aliens.dms.android.core.designsystem.DmsTopAppBar
import team.aliens.dms.android.core.designsystem.LocalToast
Expand All @@ -44,6 +44,7 @@ import team.aliens.dms.android.core.ui.DefaultHorizontalSpace
import team.aliens.dms.android.core.ui.DefaultVerticalSpace
import team.aliens.dms.android.core.ui.PaddingDefaults
import team.aliens.dms.android.core.ui.bottomPadding
import team.aliens.dms.android.core.ui.composable.FloatingNotice
import team.aliens.dms.android.core.ui.horizontalPadding
import team.aliens.dms.android.core.ui.startPadding
import team.aliens.dms.android.core.ui.topPadding
Expand Down Expand Up @@ -100,7 +101,7 @@ fun OutingStatusScreen(
navigationIcon = {
IconButton(onClick = navigator::navigateUp) {
Icon(
painter = painterResource(id = R.drawable.ic_baseline_arrow_back_24),
painter = painterResource(id = DmsIcon.Back),
contentDescription = stringResource(id = R.string.top_bar_back_button),
)
}
Expand All @@ -118,15 +119,12 @@ fun OutingStatusScreen(
modifier = Modifier.fillMaxSize(),
verticalArrangement = Arrangement.spacedBy(DefaultVerticalSpace),
) {
Text(
modifier = Modifier
.fillMaxWidth()
.startPadding()
.verticalPadding(),
text = stringResource(id = R.string.outing_recent_application),
color = DmsTheme.colorScheme.icon,
FloatingNotice(
modifier = Modifier.horizontalPadding(),
text = stringResource(id = R.string.outing_format_application_time),
)
uiState.currentAppliedOutingApplication?.let { outingApplication ->
Spacer(modifier = Modifier.height(PaddingDefaults.Large))
OutingInformationCard(
title = outingApplication.type,
date = outingApplication.date,
Expand All @@ -139,13 +137,15 @@ fun OutingStatusScreen(
reason = outingApplication.reason,
onCancelApplication = { onChangeShouldShowCancelOutingDialog(true) },
)
} ?: Text(
} ?: Box(
modifier = Modifier
.fillMaxWidth()
.topPadding(),
textAlign = TextAlign.Center,
text = stringResource(id = R.string.outing_failed_to_fetch_current_applied_outing_application),
)
.fillMaxSize(),
contentAlignment = Alignment.Center,
) {
if (!uiState.isApplicationState) {
Text(text = stringResource(id = R.string.outing_not_now_outing_application_time))
}
}
}
if (uiState.currentAppliedOutingApplication == null) {
ContainedButton(
Expand All @@ -154,6 +154,7 @@ fun OutingStatusScreen(
.bottomPadding()
.horizontalPadding(),
onClick = navigator::openOutingApplication,
enabled = uiState.isApplicationState,
) {
Text(text = stringResource(id = R.string.outing_do_application))
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ class OutingViewModel @Inject constructor(
fetchOutingTypes()
fetchStudents()
fetchOutingDate()
fetchApplicationState()
}

override fun processIntent(intent: OutingIntent) {
Expand Down Expand Up @@ -108,6 +109,11 @@ class OutingViewModel @Inject constructor(
}
}

private fun fetchApplicationState() {
val isApplicationState = now.hour >= 20 || now.hour <= 11
reduce(newState = stateFlow.value.copy(isApplicationState = isApplicationState))
}

private fun fetchOutingTypes() = viewModelScope.launch(Dispatchers.IO) {
runCatching {
outingRepository.fetchOutingTypes(null)
Expand Down Expand Up @@ -220,6 +226,7 @@ data class OutingUiState(
val students: List<Student>?,
val selectedStudents: List<Student>,
val applicationId: UUID?,
val isApplicationState: Boolean,
) : UiState() {
companion object {
fun initial(): OutingUiState {
Expand All @@ -237,6 +244,7 @@ data class OutingUiState(
students = null,
selectedStudents = emptyList(),
applicationId = null,
isApplicationState = false,
)
}
}
Expand Down
5 changes: 3 additions & 2 deletions feature/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -342,14 +342,14 @@
<!--outing-->
<string name="outing_application">์™ธ์ถœ ์‹ ์ฒญ</string>
<string name="outing_application_select_outing_time">์™ธ์ถœ ์‹œ๊ฐ„ ์„ ํƒ</string>
<string name="outing_format_application_time">์™ธ์ถœ ์‹ ์ฒญ ์‹œ๊ฐ„์€ %s ~ %s ์ž…๋‹ˆ๋‹ค</string>
<string name="outing_format_application_time">์™ธ์ถœ ์‹ ์ฒญ ์‹œ๊ฐ„์€ 20:00 ~ 11:00 ์ž…๋‹ˆ๋‹ค</string>
<string name="outing_recent_application">์‹ ์ฒญ ๋‚ด์—ญ</string>
<string name="outing_do_application">์™ธ์ถœ ์‹ ์ฒญํ•˜๊ธฐ</string>
<string name="outing_description">๊ธฐ์ˆ™์‚ฌ์—์„œ ์ƒํ™œํ•˜๋Š” ๋™์•ˆ ๋ฐ–์— ๋‹ค๋…€์˜ฌ ์ผ์ด ์žˆ๋‹ค๋ฉด ์™ธ์ถœ์„ ์‹ ์ฒญํ•ด ๋ณด์„ธ์š”.</string>
<string name="outing_cancel_application">์‹ ์ฒญ ์ทจ์†Œ</string>
<string name="outing_companion_names">๋™ํ–‰์ž</string>
<string name="outing_are_you_sure_you_cancel_application">์ž‘์„ฑํ•œ ์ •๋ณด๊ฐ€ ํŒŒ๊ธฐ๋ฉ๋‹ˆ๋‹ค. ๊ณ„์†ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?</string>
<string name="outing_failed_to_fetch_current_applied_outing_application">์™ธ์ถœ ์‹ ์ฒญ ์ •๋ณด๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค</string>
<string name="outing_not_now_outing_application_time">์ง€๊ธˆ์€ ์™ธ์ถœ ์‹ ์ฒญ ์‹œ๊ฐ„์ด ์•„๋‹™๋‹ˆ๋‹ค.</string>
<string name="outing_format_duration_h_m">%s ~ %s</string>
<string name="outing_format_time">%02d:%02d ~ %02d:%02d</string>
<string name="outing_error_there_is_no_outing_types">์™ธ์ถœ ์œ ํ˜•์ด ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค</string>
Expand All @@ -360,6 +360,7 @@
<string name="outing_date">์™ธ์ถœ ์ผ์ž</string>
<string name="format_date_yyyy_mm_dd_day_of_week">%04d.%02d.%02d (%s)</string>
<string name="outing_start_time">์™ธ์ถœ ์‹œ๊ฐ„</string>
<string name="outing_can_go_out_time">์™ธ์ถœ ๊ฐ€๋Šฅ ์‹œ๊ฐ„์€ %s ~ %s๊นŒ์ง€ ์ž…๋‹ˆ๋‹ค.</string>
<string name="outing_end_time">๋ณต๊ท€ ์‹œ๊ฐ„</string>
<string name="outing_hint_please_enter_description">์™ธ์ถœ ์‚ฌ์œ ๋ฅผ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”</string>
<string name="outing_format_select_companions">%d๋ช… ์„ ํƒ</string>
Expand Down

0 comments on commit 0774d53

Please sign in to comment.