@@ -26,116 +26,114 @@ import com.getcode.navigation.core.CodeNavigator
2626import com.getcode.navigation.core.LocalCodeNavigator
2727import com.getcode.theme.CodeTheme
2828import com.getcode.theme.sheetHeight
29- import com.getcode.util.recomposeHighlighter
29+ import com.getcode.util.keyboardAsState
3030import com.getcode.view.components.SheetTitle
3131import kotlinx.coroutines.delay
3232import kotlinx.coroutines.launch
33- import timber.log.Timber
3433
35- internal interface ModalContent {
3634
37- @Composable
38- fun Screen.ModalContainer (
39- closeButton : (Screen ? ) -> Boolean = { false },
40- screenContent : @Composable () -> Unit
41- ) {
42- ModalContainer (
43- navigator = LocalCodeNavigator .current,
44- displayLogo = false ,
45- backButton = { false },
46- onLogoClicked = {},
47- closeButton = closeButton,
48- screenContent = screenContent,
49- )
50- }
35+ @Composable
36+ internal fun Screen.ModalContainer (
37+ closeButton : (Screen ? ) -> Boolean = { false },
38+ screenContent : @Composable () -> Unit
39+ ) {
40+ ModalContainer (
41+ navigator = LocalCodeNavigator .current,
42+ displayLogo = false ,
43+ backButton = { false },
44+ onLogoClicked = {},
45+ closeButton = closeButton,
46+ screenContent = screenContent,
47+ )
48+ }
5149
52- @Composable
53- fun Screen.ModalContainer (
54- displayLogo : Boolean = false,
55- onLogoClicked : () -> Unit = { },
56- closeButton : (Screen ? ) -> Boolean = { false },
57- screenContent : @Composable () -> Unit
58- ) {
59- ModalContainer (
60- navigator = LocalCodeNavigator .current,
61- displayLogo = displayLogo,
62- backButton = { false },
63- onLogoClicked = onLogoClicked,
64- closeButton = closeButton,
65- screenContent = screenContent,
66- )
67- }
50+ @Composable
51+ internal fun Screen.ModalContainer (
52+ displayLogo : Boolean = false,
53+ onLogoClicked : () -> Unit = { },
54+ closeButton : (Screen ? ) -> Boolean = { false },
55+ screenContent : @Composable () -> Unit
56+ ) {
57+ ModalContainer (
58+ navigator = LocalCodeNavigator .current,
59+ displayLogo = displayLogo,
60+ backButton = { false },
61+ onLogoClicked = onLogoClicked,
62+ closeButton = closeButton,
63+ screenContent = screenContent,
64+ )
65+ }
6866
69- @OptIn(ExperimentalFoundationApi ::class )
70- @Composable
71- fun Screen.ModalContainer (
72- navigator : CodeNavigator = LocalCodeNavigator .current,
73- displayLogo : Boolean = false,
74- backButton : (Screen ? ) -> Boolean = { false },
75- onBackClicked : (() -> Unit )? = null,
76- closeButton : (Screen ? ) -> Boolean = { false },
77- onCloseClicked : (() -> Unit )? = null,
78- onLogoClicked : () -> Unit = { },
79- screenContent : @Composable () -> Unit
67+ @OptIn(ExperimentalFoundationApi ::class )
68+ @Composable
69+ internal fun Screen.ModalContainer (
70+ navigator : CodeNavigator = LocalCodeNavigator .current,
71+ displayLogo : Boolean = false,
72+ backButton : (Screen ? ) -> Boolean = { false },
73+ onBackClicked : (() -> Unit )? = null,
74+ closeButton : (Screen ? ) -> Boolean = { false },
75+ onCloseClicked : (() -> Unit )? = null,
76+ onLogoClicked : () -> Unit = { },
77+ screenContent : @Composable () -> Unit
78+ ) {
79+ Column (
80+ modifier = Modifier
81+ .fillMaxWidth()
82+ .fillMaxHeight(sheetHeight)
8083 ) {
81- Column (
82- modifier = Modifier
83- .fillMaxWidth()
84- .fillMaxHeight(sheetHeight)
85- ) {
86- val lastItem by remember(navigator.lastModalItem) {
87- derivedStateOf { navigator.lastModalItem }
88- }
84+ val lastItem by remember(navigator.lastModalItem) {
85+ derivedStateOf { navigator.lastModalItem }
86+ }
8987
90- val isBackEnabled by remember(backButton, lastItem) {
91- derivedStateOf { backButton(lastItem) }
92- }
88+ val isBackEnabled by remember(backButton, lastItem) {
89+ derivedStateOf { backButton(lastItem) }
90+ }
9391
94- val isCloseEnabled by remember(closeButton, lastItem) {
95- derivedStateOf { closeButton(lastItem) }
96- }
92+ val isCloseEnabled by remember(closeButton, lastItem) {
93+ derivedStateOf { closeButton(lastItem) }
94+ }
9795
98- val keyboardController = LocalSoftwareKeyboardController .current
99- val composeScope = rememberCoroutineScope()
96+ val keyboardController = LocalSoftwareKeyboardController .current
97+ val composeScope = rememberCoroutineScope()
10098
101- val hideSheet = {
102- composeScope.launch {
103- keyboardController?.hide()
104- delay(500 )
105- navigator.hide()
106- }
99+ val hideSheet = {
100+ composeScope.launch {
101+ keyboardController?.hide()
102+ delay(500 )
103+ navigator.hide()
107104 }
108- SheetTitle (
109- modifier = Modifier ,
110- title = {
111- val name = (lastItem as ? NamedScreen )?.name
112- val sheetName by remember(lastItem) {
113- derivedStateOf { name }
114- }
115- sheetName.takeIf { ! displayLogo && lastItem == this @ModalContainer }
116- },
117- displayLogo = displayLogo,
118- onLogoClicked = onLogoClicked,
119- // hide while transitioning to/from other destinations
120- backButton = isBackEnabled,
121- closeButton = isCloseEnabled,
122- onBackIconClicked = onBackClicked?.let { { it() } } ? : { navigator.pop() },
123- onCloseIconClicked = onCloseClicked?.let { { it() } } ? : { hideSheet() }
124- )
125- Box (
126- modifier = Modifier
127- .windowInsetsPadding(WindowInsets .navigationBars)
128- ) {
129- CompositionLocalProvider (
130- LocalOverscrollConfiguration provides null
131- ) {
132- screenContent()
105+ }
106+ SheetTitle (
107+ modifier = Modifier ,
108+ title = {
109+ val name = (lastItem as ? NamedScreen )?.name
110+ val sheetName by remember(lastItem) {
111+ derivedStateOf { name }
133112 }
113+ sheetName.takeIf { ! displayLogo && lastItem == this @ModalContainer }
114+ },
115+ displayLogo = displayLogo,
116+ onLogoClicked = onLogoClicked,
117+ // hide while transitioning to/from other destinations
118+ backButton = isBackEnabled,
119+ closeButton = isCloseEnabled,
120+ onBackIconClicked = onBackClicked?.let { { it() } } ? : { navigator.pop() },
121+ onCloseIconClicked = onCloseClicked?.let { { it() } } ? : { hideSheet() }
122+ )
123+ Box (
124+ modifier = Modifier
125+ .windowInsetsPadding(WindowInsets .navigationBars)
126+ ) {
127+ CompositionLocalProvider (
128+ LocalOverscrollConfiguration provides null
129+ ) {
130+ screenContent()
134131 }
135132 }
136133 }
137134}
138135
136+ internal interface ModalContent
139137internal sealed interface ModalRoot : ModalContent
140138
141139data object MainRoot : Screen {
@@ -147,6 +145,8 @@ data object MainRoot : Screen {
147145 // TODO: potentially add a loading state here
148146 // so app doesn't appear stuck in a dead state
149147 // while we wait for auth check to complete
150- Box (modifier = Modifier .fillMaxSize().background(CodeTheme .colors.background))
148+ Box (modifier = Modifier
149+ .fillMaxSize()
150+ .background(CodeTheme .colors.background))
151151 }
152152}
0 commit comments