Skip to content

Commit 0028aa2

Browse files
committed
chore(modals): remove ModalContainer overloads outside of ModalContent interface
overloading composable functions in interfaces is no longer supported by compiler Signed-off-by: Brandon McAnsh <git@bmcreations.dev>
1 parent 59c1149 commit 0028aa2

1 file changed

Lines changed: 88 additions & 91 deletions

File tree

  • app/src/main/java/com/getcode/navigation/screens

app/src/main/java/com/getcode/navigation/screens/Modals.kt

Lines changed: 88 additions & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -26,116 +26,113 @@ import com.getcode.navigation.core.CodeNavigator
2626
import com.getcode.navigation.core.LocalCodeNavigator
2727
import com.getcode.theme.CodeTheme
2828
import com.getcode.theme.sheetHeight
29-
import com.getcode.util.recomposeHighlighter
3029
import com.getcode.view.components.SheetTitle
3130
import kotlinx.coroutines.delay
3231
import 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
139136
internal sealed interface ModalRoot : ModalContent
140137

141138
data object MainRoot : Screen {

0 commit comments

Comments
 (0)