Skip to content

Commit 4c05dd9

Browse files
committed
[NDGL-86] design: NDGLBottomSheet 자연스럽게 내려가도록 변경
1 parent 0c13451 commit 4c05dd9

5 files changed

Lines changed: 39 additions & 9 deletions

File tree

core/ui/src/main/java/com/yapp/ndgl/core/ui/designsystem/NDGLBottomSheet.kt

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
@file:OptIn(ExperimentalMaterial3Api::class)
2+
13
package com.yapp.ndgl.core.ui.designsystem
24

35
import androidx.compose.foundation.clickable
@@ -14,9 +16,11 @@ import androidx.compose.material3.BottomSheetDefaults
1416
import androidx.compose.material3.ExperimentalMaterial3Api
1517
import androidx.compose.material3.Icon
1618
import androidx.compose.material3.ModalBottomSheet
19+
import androidx.compose.material3.SheetState
1720
import androidx.compose.material3.Text
1821
import androidx.compose.material3.rememberModalBottomSheetState
1922
import androidx.compose.runtime.Composable
23+
import androidx.compose.runtime.rememberCoroutineScope
2024
import androidx.compose.ui.Modifier
2125
import androidx.compose.ui.draw.clip
2226
import androidx.compose.ui.graphics.vector.ImageVector
@@ -25,17 +29,24 @@ import androidx.compose.ui.tooling.preview.Preview
2529
import androidx.compose.ui.unit.dp
2630
import com.yapp.ndgl.core.ui.R
2731
import com.yapp.ndgl.core.ui.theme.NDGLTheme
32+
import kotlinx.coroutines.launch
2833

29-
@OptIn(ExperimentalMaterial3Api::class)
3034
@Composable
3135
fun NDGLBottomSheet(
3236
modifier: Modifier = Modifier,
3337
onDismissRequest: () -> Unit,
38+
sheetState: SheetState = rememberModalBottomSheetState(skipPartiallyExpanded = true),
3439
showDragHandle: Boolean = true,
3540
title: String? = null,
3641
content: @Composable ColumnScope.() -> Unit,
3742
) {
38-
val sheetState = rememberModalBottomSheetState(skipPartiallyExpanded = true)
43+
val coroutineScope = rememberCoroutineScope()
44+
val hideSheet: () -> Unit = {
45+
coroutineScope.launch {
46+
sheetState.hide()
47+
onDismissRequest()
48+
}
49+
}
3950

4051
ModalBottomSheet(
4152
modifier = modifier,
@@ -55,7 +66,11 @@ fun NDGLBottomSheet(
5566
.fillMaxWidth()
5667
.padding(vertical = 18.dp, horizontal = 24.dp),
5768
) {
58-
Text(title, color = NDGLTheme.colors.black400, style = NDGLTheme.typography.bodyLgMedium)
69+
Text(
70+
title,
71+
color = NDGLTheme.colors.black400,
72+
style = NDGLTheme.typography.bodyLgMedium,
73+
)
5974
Spacer(Modifier.weight(1f))
6075
Icon(
6176
imageVector = ImageVector.vectorResource(R.drawable.ic_24_close),
@@ -64,9 +79,7 @@ fun NDGLBottomSheet(
6479
modifier = Modifier
6580
.size(24.dp)
6681
.clip(shape = CircleShape)
67-
.clickable {
68-
onDismissRequest()
69-
},
82+
.clickable { hideSheet() },
7083
)
7184
}
7285
}
@@ -99,6 +112,7 @@ private fun NDGLBottomSheetWithHandlePreview() {
99112
}
100113
}
101114

115+
@OptIn(ExperimentalMaterial3Api::class)
102116
@Preview(showBackground = true)
103117
@Composable
104118
private fun NDGLBottomSheetWithoutHandlePreview() {

feature/travel/src/main/java/com/yapp/ndgl/feature/travel/traveldetail/TravelDetailScreen.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
@file:OptIn(ExperimentalMaterial3Api::class)
2+
13
package com.yapp.ndgl.feature.travel.traveldetail
24

35
import androidx.activity.compose.BackHandler
@@ -21,6 +23,7 @@ import androidx.compose.foundation.lazy.itemsIndexed
2123
import androidx.compose.foundation.lazy.rememberLazyListState
2224
import androidx.compose.foundation.shape.RoundedCornerShape
2325
import androidx.compose.foundation.text.KeyboardOptions
26+
import androidx.compose.material3.ExperimentalMaterial3Api
2427
import androidx.compose.material3.Icon
2528
import androidx.compose.material3.Text
2629
import androidx.compose.runtime.Composable

feature/travel/src/main/java/com/yapp/ndgl/feature/travel/traveldetail/TravelDetailViewModel.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -411,7 +411,7 @@ class TravelDetailViewModel @AssistedInject constructor(
411411
dayItinerary
412412
}
413413
}
414-
copy(itineraries = updatedItineraries)
414+
copy(itineraries = updatedItineraries, selectedPlace = null, showTransportBottomSheet = false)
415415
}
416416
}
417417

feature/travel/src/main/java/com/yapp/ndgl/feature/travel/traveldetail/component/PlaceBottomSheet.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
@file:OptIn(ExperimentalMaterial3Api::class)
2+
13
package com.yapp.ndgl.feature.travel.traveldetail.component
24

35
import androidx.compose.foundation.background
@@ -16,6 +18,7 @@ import androidx.compose.foundation.layout.size
1618
import androidx.compose.foundation.layout.width
1719
import androidx.compose.foundation.shape.CircleShape
1820
import androidx.compose.foundation.shape.RoundedCornerShape
21+
import androidx.compose.material3.ExperimentalMaterial3Api
1922
import androidx.compose.material3.Icon
2023
import androidx.compose.material3.Text
2124
import androidx.compose.runtime.Composable

feature/travel/src/main/java/com/yapp/ndgl/feature/travel/traveldetail/component/TransportBottomSheet.kt

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,15 @@ import androidx.compose.foundation.layout.size
1414
import androidx.compose.foundation.layout.width
1515
import androidx.compose.foundation.lazy.LazyColumn
1616
import androidx.compose.foundation.lazy.itemsIndexed
17+
import androidx.compose.material3.ExperimentalMaterial3Api
1718
import androidx.compose.material3.Icon
1819
import androidx.compose.material3.Text
20+
import androidx.compose.material3.rememberModalBottomSheetState
1921
import androidx.compose.runtime.Composable
2022
import androidx.compose.runtime.getValue
2123
import androidx.compose.runtime.mutableStateOf
2224
import androidx.compose.runtime.remember
25+
import androidx.compose.runtime.rememberCoroutineScope
2326
import androidx.compose.runtime.setValue
2427
import androidx.compose.ui.Alignment
2528
import androidx.compose.ui.Modifier
@@ -43,8 +46,10 @@ import com.yapp.ndgl.core.util.formatDistance
4346
import com.yapp.ndgl.core.util.formatString
4447
import com.yapp.ndgl.feature.travel.traveldetail.TransportSegment
4548
import com.yapp.ndgl.feature.travel.traveldetail.TransportType
49+
import kotlinx.coroutines.launch
4650
import kotlin.time.Duration.Companion.minutes
4751

52+
@OptIn(ExperimentalMaterial3Api::class)
4853
@Composable
4954
internal fun TransportBottomSheet(
5055
initialTransport: TransportSegment,
@@ -53,6 +58,8 @@ internal fun TransportBottomSheet(
5358
onConfirm: (TransportSegment) -> Unit,
5459
) {
5560
var selectedTransport by remember { mutableStateOf(initialTransport) }
61+
val sheetState = rememberModalBottomSheetState(skipPartiallyExpanded = true)
62+
val coroutineScope = rememberCoroutineScope()
5663
val itemHeight = 56.dp
5764
val nestedScrollConnection = remember {
5865
object : NestedScrollConnection {
@@ -68,6 +75,7 @@ internal fun TransportBottomSheet(
6875

6976
NDGLBottomSheet(
7077
onDismissRequest = onDismissRequest,
78+
sheetState = sheetState,
7179
showDragHandle = false,
7280
title = stringResource(R.string.transport_bottom_sheet_title),
7381
) {
@@ -138,8 +146,10 @@ internal fun TransportBottomSheet(
138146
status = NDGLCTAButtonAttr.Status.ACTIVE,
139147
label = stringResource(R.string.transport_bottom_sheet_button),
140148
onClick = {
141-
onConfirm(selectedTransport)
142-
onDismissRequest()
149+
coroutineScope.launch {
150+
onConfirm(selectedTransport)
151+
sheetState.hide()
152+
}
143153
},
144154
)
145155
}

0 commit comments

Comments
 (0)