Skip to content

Commit

Permalink
[chore] #20 중복 코드들 제거
Browse files Browse the repository at this point in the history
  • Loading branch information
kamja0510 committed Jan 15, 2025
1 parent ac19bf0 commit 0d5c0aa
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 27 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -29,28 +29,28 @@ fun BbangZipDatePicker(
modifier = Modifier.fillMaxWidth(),
) {
val years = DateConstant.YEARS_LIST
val yearPickerState = rememberPickerState()
val yearPickerState = remember { mutableStateOf("") }
val startYear = currentDate.year.toInt() - DateConstant.YEAR_OF_TODAY

val months = DateConstant.MONTHS_LIST
val monthsPickerState = rememberPickerState()
val monthsPickerState = remember { mutableStateOf("") }
val startMonth = currentDate.month.toInt() - 1

val days =
remember(yearPickerState.selectedItem, monthsPickerState.selectedItem) {
remember(yearPickerState.value, monthsPickerState.value) {
derivedStateOf {
val year = yearPickerState.selectedItem.filter { it.isDigit() }.toIntOrNull() ?: DateConstant.YEAR_OF_TODAY
val month = monthsPickerState.selectedItem.filter { it.isDigit() }.toIntOrNull() ?: 1
val year = yearPickerState.value.filter { it.isDigit() }.toIntOrNull() ?: DateConstant.YEAR_OF_TODAY
val month = monthsPickerState.value.filter { it.isDigit() }.toIntOrNull() ?: 1
(1..getDaysInMonth(year, month)).map { it.toString() + "" }
}
}
val daysPickerState = rememberPickerState()
val daysPickerState = remember { mutableStateOf("") }
val startDay = currentDate.day.toInt() - 1

LaunchedEffect(yearPickerState.selectedItem, monthsPickerState.selectedItem, daysPickerState.selectedItem) {
val year = yearPickerState.selectedItem.filter { it.isDigit() }
val month = monthsPickerState.selectedItem.filter { it.isDigit() }
val day = daysPickerState.selectedItem.filter { it.isDigit() }
LaunchedEffect(yearPickerState.value, monthsPickerState.value, daysPickerState.value) {
val year = yearPickerState.value.filter { it.isDigit() }
val month = monthsPickerState.value.filter { it.isDigit() }
val day = daysPickerState.value.filter { it.isDigit() }
onConfirm(
Date(
year = year,
Expand All @@ -64,30 +64,24 @@ fun BbangZipDatePicker(
Picker(
state = yearPickerState,
items = years,
modifier = Modifier.weight(1.2f),
modifier = Modifier.weight(5f),
startIndex = startYear,
visibleItemsCount = 5,
textModifier = Modifier.padding(8.dp),
isCircular = false,
)

Picker(
state = monthsPickerState,
items = months,
modifier = Modifier.weight(0.3f),
modifier = Modifier.weight(3f),
startIndex = startMonth,
visibleItemsCount = 5,
textModifier = Modifier.padding(8.dp),
isCircular = false,
)

Picker(
state = daysPickerState,
items = days.value,
modifier = Modifier.weight(3f),
startIndex = startDay,
visibleItemsCount = 5,
modifier = Modifier.weight(0.8f),
textModifier = Modifier.padding(8.dp),
isCircular = false,
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,11 @@ import androidx.compose.foundation.lazy.rememberLazyListState
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.MutableState
import androidx.compose.runtime.derivedStateOf
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableIntStateOf
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.snapshotFlow
import androidx.compose.ui.Alignment
Expand All @@ -44,10 +46,10 @@ import timber.log.Timber
@Composable
fun Picker(
items: List<String>,
state: PickerState = rememberPickerState(),
state: MutableState<String>,
modifier: Modifier = Modifier,
startIndex: Int = 0,
visibleItemsCount: Int = 3,
visibleItemsCount: Int = 5,
textModifier: Modifier = Modifier,
isCircular: Boolean = true, // 무한 스크롤 여부
) {
Expand Down Expand Up @@ -99,7 +101,7 @@ fun Picker(
getItem(index + visibleItemsMiddle)
} // item 방출
.distinctUntilChanged() // 실제 변경될 때만 flow가 값을 방출
.collect { item -> state.selectedItem = item } // 수집 받으면 selectedItem 변경
.collect { item -> state.value = item } // 수집 받으면 selectedItem 변경
}

Box(modifier = modifier) {
Expand All @@ -122,6 +124,7 @@ fun Picker(
modifier =
Modifier
.onSizeChanged { size -> itemHeightPixels.intValue = size.height }
.padding(8.dp)
.then(textModifier),
)
}
Expand Down Expand Up @@ -159,9 +162,9 @@ fun PickerPreview() {
modifier = Modifier.fillMaxSize(),
) {
val values = remember { (1..99).map { it.toString() } }
val valuesPickerState = rememberPickerState()
val valuesPickerState = remember { mutableStateOf("") }
val units = remember { listOf("seconds", "minutes", "hours") }
val unitsPickerState = rememberPickerState()
val unitsPickerState = remember { mutableStateOf("") }

Text(text = "Example Picker", modifier = Modifier.padding(top = 16.dp))
Row(modifier = Modifier.fillMaxWidth()) {
Expand All @@ -170,7 +173,6 @@ fun PickerPreview() {
items = values,
visibleItemsCount = 5,
modifier = Modifier.weight(0.3f),
textModifier = Modifier.padding(8.dp),
isCircular = false,
)

Expand All @@ -179,13 +181,12 @@ fun PickerPreview() {
items = units,
visibleItemsCount = 5,
modifier = Modifier.weight(0.7f),
textModifier = Modifier.padding(8.dp),
isCircular = true,
)
}

Text(
text = "Interval: ${valuesPickerState.selectedItem} ${unitsPickerState.selectedItem}",
text = "Interval: ${valuesPickerState.value} ${unitsPickerState.value}",
modifier = Modifier.padding(vertical = 16.dp),
)
}
Expand Down

0 comments on commit 0d5c0aa

Please sign in to comment.