Skip to content

Commit

Permalink
[feat]#232: 바텀시트가 뜨도록 추가해요
Browse files Browse the repository at this point in the history
  • Loading branch information
flash159483 committed Feb 1, 2025
1 parent 066be0b commit f42c9c1
Show file tree
Hide file tree
Showing 5 changed files with 59 additions and 3 deletions.
48 changes: 46 additions & 2 deletions app/src/main/kotlin/com/bff/wespot/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.NavigationBar
import androidx.compose.material3.Scaffold
import androidx.compose.material3.SheetValue
import androidx.compose.material3.Text
import androidx.compose.material3.rememberModalBottomSheetState
import androidx.compose.runtime.Composable
Expand Down Expand Up @@ -57,6 +58,7 @@ import androidx.navigation.compose.rememberNavController
import com.bff.wespot.R.string
import com.bff.wespot.analytic.AnalyticsHelper
import com.bff.wespot.analytic.LocalAnalyticsHelper
import com.bff.wespot.data.remote.extensions.toLocalDateFromDashPattern
import com.bff.wespot.designsystem.R
import com.bff.wespot.designsystem.component.button.WSButton
import com.bff.wespot.designsystem.component.button.WSButtonType
Expand All @@ -67,15 +69,16 @@ import com.bff.wespot.designsystem.theme.WeSpotThemeManager
import com.bff.wespot.entire.screen.destinations.SettingScreenDestination
import com.bff.wespot.model.common.RestrictionType
import com.bff.wespot.model.notification.NotificationType
import com.bff.wespot.model.serverDriven.OnBoardingCategory
import com.bff.wespot.navigation.Navigator
import com.bff.wespot.navigation.util.EXTRA_DATE
import com.bff.wespot.navigation.util.EXTRA_TARGET_ID
import com.bff.wespot.navigation.util.EXTRA_TYPE
import com.bff.wespot.navigation.util.EXTRA_USER_ID
import com.bff.wespot.notification.screen.NotificationNavigator
import com.bff.wespot.server.driven.onboarding.OnBoardingBottomSheet
import com.bff.wespot.state.MainAction
import com.bff.wespot.state.MainUiState
import com.bff.wespot.data.remote.extensions.toLocalDateFromDashPattern
import com.bff.wespot.navigation.util.EXTRA_DATE
import com.bff.wespot.ui.component.TopToast
import com.bff.wespot.ui.component.WSBottomSheet
import com.bff.wespot.ui.model.ToastState
Expand Down Expand Up @@ -316,6 +319,12 @@ private fun MainScreen(
)
}

OnBoardingSheet(
state = state,
navController = navController,
action = action,
)

LaunchedEffect(Unit) {
action(MainAction.OnMainScreenEntered)
}
Expand Down Expand Up @@ -351,6 +360,41 @@ private fun BottomNavigationTab(
}
}

@OptIn(ExperimentalMaterial3Api::class)
@Composable
private fun OnBoardingSheet(
state: MainUiState,
navController: NavController,
action: (MainAction) -> Unit,
) {
val current by navController.currentScreenAsState()
val category = when {
current == BottomBarDestinations.Vote.screen && state.showVoteOnBoarding -> {
OnBoardingCategory.VOTE
}
current == BottomBarDestinations.Message.screen && state.showMessageOnBoarding -> {
OnBoardingCategory.MESSAGE
}
else -> null
}

category?.let {
WSBottomSheet(
closeSheet = {},
sheetState = rememberModalBottomSheetState(
skipPartiallyExpanded = true,
confirmValueChange = { it != SheetValue.Hidden })
) {
OnBoardingBottomSheet(
category = it,
closeOnBoarding = {
action(MainAction.CloseOnBoarding(it))
}
)
}
}
}

@Stable
@Composable
private fun NavController.currentScreenAsState(): State<NavGraphSpec> {
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/kotlin/com/bff/wespot/state/MainAction.kt
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
package com.bff.wespot.state

import com.bff.wespot.MainScreenNavArgs
import com.bff.wespot.model.serverDriven.OnBoardingCategory

sealed class MainAction {
data object OnMainScreenEntered : MainAction()
data object OnNavigateByPushNotification : MainAction()
data class OnEnteredByPushNotification(val data: MainScreenNavArgs) : MainAction()
data class OnNotificationSet(val isEnableNotification: Boolean) : MainAction()
data class CloseOnBoarding(val category: OnBoardingCategory) : MainAction()
}
2 changes: 2 additions & 0 deletions app/src/main/kotlin/com/bff/wespot/state/MainUiState.kt
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,6 @@ data class MainUiState (
val userId: String = "",
val restriction: Restriction = Restriction.Empty,
val kakaoChannel: String,
val showVoteOnBoarding: Boolean = true,
val showMessageOnBoarding: Boolean = true
)
8 changes: 8 additions & 0 deletions app/src/main/kotlin/com/bff/wespot/viewmodel/MainViewModel.kt
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import com.bff.wespot.domain.repository.user.UserRepository
import com.bff.wespot.domain.usecase.CacheProfileUseCase
import com.bff.wespot.domain.util.DataStoreKey
import com.bff.wespot.domain.util.RemoteConfigKey
import com.bff.wespot.model.serverDriven.OnBoardingCategory
import com.bff.wespot.state.MainAction
import com.bff.wespot.state.MainSideEffect
import com.bff.wespot.state.MainUiState
Expand Down Expand Up @@ -62,6 +63,7 @@ class MainViewModel @Inject constructor(
trackPushNotificationClicked(action.data)
}
is MainAction.OnNotificationSet -> handleNotificationSet(action.isEnableNotification)
is MainAction.CloseOnBoarding -> handleOnBoarding(action.category)
}
}

Expand Down Expand Up @@ -108,4 +110,10 @@ class MainViewModel @Inject constructor(
)
}
}
private fun handleOnBoarding(category: OnBoardingCategory) = intent {
when (category) {
OnBoardingCategory.VOTE -> reduce { state.copy(showVoteOnBoarding = false) }
OnBoardingCategory.MESSAGE -> reduce { state.copy(showMessageOnBoarding = false) }
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ import kotlinx.coroutines.launch
fun OnBoardingBottomSheet(
viewModel: OnBoardingViewModel = hiltViewModel(),
category: OnBoardingCategory,
closeOnBoarding: () -> Unit
closeOnBoarding: () -> Unit,
) {
val contents by viewModel.contents.collectAsStateWithLifecycle()
val coroutineScope = rememberCoroutineScope()
Expand Down

0 comments on commit f42c9c1

Please sign in to comment.