Skip to content

Commit f51f632

Browse files
authored
[MERGE] #324 -> develop
[FIX/#324] ๋ฐ”ํ…€๋ฐ”, ๋‹ฌ๋ ฅ / 3์ฐจ ์Šคํ”„๋ฆฐํŠธ QA ๋ฐ˜์˜
2 parents 1ca3117 + 7c249c3 commit f51f632

5 files changed

Lines changed: 121 additions & 65 deletions

File tree

โ€Žfeature/calendar/src/main/java/com/terning/feature/calendar/calendar/CalendarRoute.ktโ€Ž

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import androidx.compose.foundation.pager.PagerState
1414
import androidx.compose.foundation.pager.rememberPagerState
1515
import androidx.compose.material3.HorizontalDivider
1616
import androidx.compose.runtime.Composable
17+
import androidx.compose.runtime.DisposableEffect
1718
import androidx.compose.runtime.LaunchedEffect
1819
import androidx.compose.runtime.getValue
1920
import androidx.compose.runtime.rememberCoroutineScope
@@ -47,6 +48,7 @@ fun CalendarRoute(
4748
val uiState by viewModel.uiState.collectAsStateWithLifecycle()
4849
val amplitudeTracker = LocalTracker.current
4950

51+
5052
CalendarScreen(
5153
uiState = uiState,
5254
navigateToAnnouncement = navigateToAnnouncement,
@@ -65,6 +67,12 @@ fun CalendarRoute(
6567
},
6668
modifier = modifier,
6769
)
70+
71+
DisposableEffect(true) {
72+
onDispose {
73+
viewModel.resetUiState()
74+
}
75+
}
6876
}
6977

7078
@Composable
@@ -90,6 +98,10 @@ private fun CalendarScreen(
9098
pageCount = { uiState.calendarModel.pageCount }
9199
)
92100

101+
LaunchedEffect(true) {
102+
pagerState.scrollToPage(uiState.calendarModel.initialPage)
103+
}
104+
93105
LaunchedEffect(key1 = pagerState, key2 = uiState.selectedDate) {
94106
snapshotFlow { pagerState.currentPage }
95107
.collect { current ->
@@ -115,7 +127,7 @@ private fun CalendarScreen(
115127
date = uiState.calendarModel.getYearMonthByPage(pagerState.settledPage),
116128
isListExpanded = uiState.isListEnabled,
117129
onListButtonClicked = {
118-
if(!calendarListTransition.isRunning)
130+
if (!calendarListTransition.isRunning)
119131
onClickListButton()
120132
},
121133
onMonthNavigationButtonClicked = { direction ->

โ€Žfeature/calendar/src/main/java/com/terning/feature/calendar/calendar/CalendarViewModel.ktโ€Ž

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,14 @@ class CalendarViewModel @Inject constructor() : ViewModel() {
2727
}
2828
}
2929

30+
fun resetUiState() = _uiState.update { currentState ->
31+
currentState.copy(
32+
selectedDate = DayModel(),
33+
isListEnabled = false,
34+
isWeekEnabled = false
35+
)
36+
}
37+
3038
fun updateSelectedDate(value: DayModel) = _uiState.update { currentState ->
3139
currentState.copy(
3240
selectedDate = value

โ€Žfeature/main/src/main/java/com/terning/feature/main/MainScreen.ktโ€Ž

Lines changed: 1 addition & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,11 @@ package com.terning.feature.main
33
import android.app.Activity
44
import android.content.Intent
55
import androidx.activity.compose.BackHandler
6-
import androidx.compose.animation.AnimatedVisibility
76
import androidx.compose.animation.EnterTransition
87
import androidx.compose.animation.ExitTransition
9-
import androidx.compose.animation.fadeIn
10-
import androidx.compose.animation.fadeOut
11-
import androidx.compose.animation.slideIn
12-
import androidx.compose.animation.slideOut
138
import androidx.compose.foundation.layout.Column
149
import androidx.compose.foundation.layout.fillMaxSize
1510
import androidx.compose.foundation.layout.padding
16-
import androidx.compose.material3.Icon
17-
import androidx.compose.material3.NavigationBar
18-
import androidx.compose.material3.NavigationBarItem
19-
import androidx.compose.material3.NavigationBarItemDefaults
2011
import androidx.compose.material3.Scaffold
2112
import androidx.compose.material3.SnackbarDuration
2213
import androidx.compose.material3.SnackbarHost
@@ -30,20 +21,13 @@ import androidx.compose.runtime.rememberCoroutineScope
3021
import androidx.compose.runtime.setValue
3122
import androidx.compose.ui.Modifier
3223
import androidx.compose.ui.platform.LocalContext
33-
import androidx.compose.ui.res.painterResource
34-
import androidx.compose.ui.res.stringResource
35-
import androidx.compose.ui.unit.IntOffset
3624
import androidx.compose.ui.unit.dp
37-
import androidx.compose.ui.unit.sp
3825
import androidx.navigation.NavOptions
3926
import androidx.navigation.compose.NavHost
4027
import androidx.navigation.navOptions
4128
import com.terning.core.analytics.EventType
4229
import com.terning.core.designsystem.component.snackbar.TerningBasicSnackBar
43-
import com.terning.core.designsystem.theme.Grey300
44-
import com.terning.core.designsystem.theme.TerningMain
4530
import com.terning.core.designsystem.theme.White
46-
import com.terning.core.designsystem.util.NoRippleInteractionSource
4731
import com.terning.feature.calendar.calendar.navigation.calendarNavGraph
4832
import com.terning.feature.calendar.calendar.navigation.navigateCalendar
4933
import com.terning.feature.filtering.filteringone.navigation.filteringOneNavGraph
@@ -57,6 +41,7 @@ import com.terning.feature.home.navigation.homeNavGraph
5741
import com.terning.feature.home.navigation.navigateHome
5842
import com.terning.feature.intern.navigation.internNavGraph
5943
import com.terning.feature.intern.navigation.navigateIntern
44+
import com.terning.feature.main.component.MainBottomBar
6045
import com.terning.feature.mypage.mypage.navigation.myPageNavGraph
6146
import com.terning.feature.mypage.profileedit.navigation.profileEditNavGraph
6247
import com.terning.feature.onboarding.signin.navigation.navigateSignIn
@@ -68,7 +53,6 @@ import com.terning.feature.onboarding.splash.navigation.splashNavGraph
6853
import com.terning.feature.search.search.navigation.searchNavGraph
6954
import com.terning.feature.search.searchprocess.navigation.navigateSearchProcess
7055
import com.terning.feature.search.searchprocess.navigation.searchProcessNavGraph
71-
import kotlinx.collections.immutable.ImmutableList
7256
import kotlinx.collections.immutable.toImmutableList
7357
import kotlinx.coroutines.launch
7458

@@ -277,49 +261,3 @@ fun MainScreen(
277261
}
278262
}
279263
}
280-
281-
@Composable
282-
private fun MainBottomBar(
283-
isVisible: Boolean,
284-
tabs: ImmutableList<MainTab>,
285-
currentTab: MainTab?,
286-
onTabSelected: (MainTab) -> Unit,
287-
) {
288-
AnimatedVisibility(
289-
visible = isVisible,
290-
enter = fadeIn() + slideIn { IntOffset(0, 0) },
291-
exit = fadeOut() + slideOut { IntOffset(0, 0) }
292-
) {
293-
NavigationBar(containerColor = White) {
294-
tabs.forEach { itemType ->
295-
NavigationBarItem(
296-
interactionSource = NoRippleInteractionSource,
297-
selected = currentTab == itemType,
298-
onClick = {
299-
onTabSelected(itemType)
300-
},
301-
icon = {
302-
Icon(
303-
painter = painterResource(id = (itemType.icon)),
304-
contentDescription = stringResource(id = itemType.contentDescription)
305-
)
306-
},
307-
label = {
308-
Text(
309-
stringResource(id = itemType.contentDescription),
310-
fontSize = 9.sp
311-
)
312-
},
313-
colors = NavigationBarItemDefaults
314-
.colors(
315-
selectedIconColor = TerningMain,
316-
selectedTextColor = TerningMain,
317-
unselectedIconColor = Grey300,
318-
unselectedTextColor = Grey300,
319-
indicatorColor = White
320-
)
321-
)
322-
}
323-
}
324-
}
325-
}
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
package com.terning.feature.main.component
2+
3+
import androidx.compose.animation.AnimatedVisibility
4+
import androidx.compose.animation.fadeIn
5+
import androidx.compose.animation.fadeOut
6+
import androidx.compose.animation.slideIn
7+
import androidx.compose.animation.slideOut
8+
import androidx.compose.foundation.layout.Column
9+
import androidx.compose.foundation.layout.Spacer
10+
import androidx.compose.foundation.layout.height
11+
import androidx.compose.material3.Icon
12+
import androidx.compose.material3.NavigationBar
13+
import androidx.compose.material3.NavigationBarItem
14+
import androidx.compose.material3.NavigationBarItemDefaults
15+
import androidx.compose.material3.Text
16+
import androidx.compose.runtime.Composable
17+
import androidx.compose.ui.Modifier
18+
import androidx.compose.ui.res.painterResource
19+
import androidx.compose.ui.res.stringResource
20+
import androidx.compose.ui.tooling.preview.Preview
21+
import androidx.compose.ui.unit.IntOffset
22+
import androidx.compose.ui.unit.dp
23+
import androidx.compose.ui.unit.sp
24+
import com.terning.core.designsystem.extension.customShadow
25+
import com.terning.core.designsystem.theme.Grey300
26+
import com.terning.core.designsystem.theme.TerningMain
27+
import com.terning.core.designsystem.theme.TerningPointTheme
28+
import com.terning.core.designsystem.theme.White
29+
import com.terning.core.designsystem.util.NoRippleInteractionSource
30+
import com.terning.feature.main.MainTab
31+
import kotlinx.collections.immutable.ImmutableList
32+
import kotlinx.collections.immutable.toImmutableList
33+
34+
@Composable
35+
internal fun MainBottomBar(
36+
isVisible: Boolean,
37+
tabs: ImmutableList<MainTab>,
38+
currentTab: MainTab?,
39+
onTabSelected: (MainTab) -> Unit,
40+
modifier: Modifier = Modifier,
41+
) {
42+
AnimatedVisibility(
43+
visible = isVisible,
44+
enter = fadeIn() + slideIn { IntOffset(0, 0) },
45+
exit = fadeOut() + slideOut { IntOffset(0, 0) }
46+
) {
47+
NavigationBar(
48+
containerColor = White,
49+
modifier = modifier.customShadow(
50+
shadowWidth = 2.dp,
51+
),
52+
) {
53+
tabs.forEach { itemType ->
54+
NavigationBarItem(
55+
interactionSource = NoRippleInteractionSource,
56+
selected = currentTab == itemType,
57+
onClick = { onTabSelected(itemType) },
58+
icon = {
59+
Icon(
60+
painter = painterResource(id = (itemType.icon)),
61+
contentDescription = stringResource(id = itemType.contentDescription)
62+
)
63+
},
64+
label = {
65+
Text(
66+
stringResource(id = itemType.contentDescription),
67+
fontSize = 9.sp
68+
)
69+
},
70+
colors = NavigationBarItemDefaults
71+
.colors(
72+
selectedIconColor = TerningMain,
73+
selectedTextColor = TerningMain,
74+
unselectedIconColor = Grey300,
75+
unselectedTextColor = Grey300,
76+
indicatorColor = White
77+
)
78+
)
79+
}
80+
}
81+
}
82+
}
83+
84+
@Preview(showBackground = true)
85+
@Composable
86+
private fun MainBottomBarPreview() {
87+
TerningPointTheme {
88+
Column {
89+
Spacer(Modifier.height(20.dp))
90+
MainBottomBar(
91+
isVisible = true,
92+
tabs = MainTab.entries.toImmutableList(),
93+
currentTab = MainTab.HOME,
94+
onTabSelected = {}
95+
)
96+
}
97+
}
98+
}

โ€Žfeature/main/src/main/res/values/strings.xmlโ€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,6 @@
66
<string name="bottom_nav_home">ํ™ˆ</string>
77
<string name="bottom_nav_calendar">์บ˜๋ฆฐ๋”</string>
88
<string name="bottom_nav_search">ํƒ์ƒ‰</string>
9-
<string name="bottom_nav_my_page">๋งˆ์ดํŽ˜์ด์ง€</string>
9+
<string name="bottom_nav_my_page">๋งˆ์ด</string>
1010

1111
</resources>

0 commit comments

Comments
ย (0)