@@ -26,116 +26,113 @@ 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
3029import com.getcode.view.components.SheetTitle
3130import kotlinx.coroutines.delay
3231import kotlinx.coroutines.launch
33- import timber.log.Timber
3432
35- internal interface ModalContent {
3633
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- }
34+ @Composable
35+ internal fun Screen.ModalContainer (
36+ closeButton : (Screen ? ) -> Boolean = { false },
37+ screenContent : @Composable () -> Unit
38+ ) {
39+ ModalContainer (
40+ navigator = LocalCodeNavigator .current,
41+ displayLogo = false ,
42+ backButton = { false },
43+ onLogoClicked = {},
44+ closeButton = closeButton,
45+ screenContent = screenContent,
46+ )
47+ }
5148
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- }
49+ @Composable
50+ internal fun Screen.ModalContainer (
51+ displayLogo : Boolean = false,
52+ onLogoClicked : () -> Unit = { },
53+ closeButton : (Screen ? ) -> Boolean = { false },
54+ screenContent : @Composable () -> Unit
55+ ) {
56+ ModalContainer (
57+ navigator = LocalCodeNavigator .current,
58+ displayLogo = displayLogo,
59+ backButton = { false },
60+ onLogoClicked = onLogoClicked,
61+ closeButton = closeButton,
62+ screenContent = screenContent,
63+ )
64+ }
6865
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
66+ @OptIn(ExperimentalFoundationApi ::class )
67+ @Composable
68+ internal fun Screen.ModalContainer (
69+ navigator : CodeNavigator = LocalCodeNavigator .current,
70+ displayLogo : Boolean = false,
71+ backButton : (Screen ? ) -> Boolean = { false },
72+ onBackClicked : (() -> Unit )? = null,
73+ closeButton : (Screen ? ) -> Boolean = { false },
74+ onCloseClicked : (() -> Unit )? = null,
75+ onLogoClicked : () -> Unit = { },
76+ screenContent : @Composable () -> Unit
77+ ) {
78+ Column (
79+ modifier = Modifier
80+ .fillMaxWidth()
81+ .fillMaxHeight(sheetHeight)
8082 ) {
81- Column (
82- modifier = Modifier
83- .fillMaxWidth()
84- .fillMaxHeight(sheetHeight)
85- ) {
86- val lastItem by remember(navigator.lastModalItem) {
87- derivedStateOf { navigator.lastModalItem }
88- }
83+ val lastItem by remember(navigator.lastModalItem) {
84+ derivedStateOf { navigator.lastModalItem }
85+ }
8986
90- val isBackEnabled by remember(backButton, lastItem) {
91- derivedStateOf { backButton(lastItem) }
92- }
87+ val isBackEnabled by remember(backButton, lastItem) {
88+ derivedStateOf { backButton(lastItem) }
89+ }
9390
94- val isCloseEnabled by remember(closeButton, lastItem) {
95- derivedStateOf { closeButton(lastItem) }
96- }
91+ val isCloseEnabled by remember(closeButton, lastItem) {
92+ derivedStateOf { closeButton(lastItem) }
93+ }
9794
98- val keyboardController = LocalSoftwareKeyboardController .current
99- val composeScope = rememberCoroutineScope()
95+ val keyboardController = LocalSoftwareKeyboardController .current
96+ val composeScope = rememberCoroutineScope()
10097
101- val hideSheet = {
102- composeScope.launch {
103- keyboardController?.hide()
104- delay(500 )
105- navigator.hide()
106- }
98+ val hideSheet = {
99+ composeScope.launch {
100+ keyboardController?.hide()
101+ delay(500 )
102+ navigator.hide()
107103 }
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()
104+ }
105+ SheetTitle (
106+ modifier = Modifier ,
107+ title = {
108+ val name = (lastItem as ? NamedScreen )?.name
109+ val sheetName by remember(lastItem) {
110+ derivedStateOf { name }
133111 }
112+ sheetName.takeIf { ! displayLogo && lastItem == this @ModalContainer }
113+ },
114+ displayLogo = displayLogo,
115+ onLogoClicked = onLogoClicked,
116+ // hide while transitioning to/from other destinations
117+ backButton = isBackEnabled,
118+ closeButton = isCloseEnabled,
119+ onBackIconClicked = onBackClicked?.let { { it() } } ? : { navigator.pop() },
120+ onCloseIconClicked = onCloseClicked?.let { { it() } } ? : { hideSheet() }
121+ )
122+ Box (
123+ modifier = Modifier
124+ .windowInsetsPadding(WindowInsets .navigationBars)
125+ ) {
126+ CompositionLocalProvider (
127+ LocalOverscrollConfiguration provides null
128+ ) {
129+ screenContent()
134130 }
135131 }
136132 }
137133}
138134
135+ internal interface ModalContent
139136internal sealed interface ModalRoot : ModalContent
140137
141138data object MainRoot : Screen {
0 commit comments