Skip to content

Commit

Permalink
Converted ComposeScopeNavigator to ComposeContextNavigator and rename…
Browse files Browse the repository at this point in the history
…d related properties, functions, and generic types, to avoid confusion with NavigationScopes
  • Loading branch information
chRyNaN committed Feb 26, 2022
1 parent fc6bd5f commit b0c1b92
Show file tree
Hide file tree
Showing 12 changed files with 101 additions and 101 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ import androidx.compose.runtime.getValue

@Composable
@ExperimentalNavigationApi
internal actual fun <Scope, Key> InternalNavContainer(
navigator: BaseComposeNavigatorByContentViewModel<Scope, Key>
internal actual fun <Context, Key> InternalNavContainer(
navigator: BaseComposeNavigatorByContentViewModel<Context, Key>
) {
val contentKey by navigator.keyChanges.collectAsState(initial = navigator.initialKey)

Expand All @@ -29,8 +29,8 @@ internal actual fun <Scope, Key> InternalNavContainer(

@Composable
@ExperimentalNavigationApi
internal actual fun <Scope, Key, NavigationScope : ComposeNavigationKeyScope<Key>> InternalNavContainer(
navigator: BaseComposeNavigatorByKeyViewModel<Scope, Key, NavigationScope>,
internal actual fun <Context, Key, NavigationScope : ComposeNavigationKeyScope<Key>> InternalNavContainer(
navigator: BaseComposeNavigatorByKeyViewModel<Context, Key, NavigationScope>,
scope: NavigationScope
) {
val contentKey by navigator.keyChanges.collectAsState(initial = navigator.initialKey)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@ package com.chrynan.navigation.compose

/**
*
* @param [keyBackStackCount] The amount of keys in the back stack when first navigating to this [scope].
* @param [keyBackStackCount] The amount of keys in the back stack when first navigating to this [context].
*/
internal data class ComposeScopeNavigationEvent<Scope, Key>(
val scope: Scope,
internal data class ComposeContextNavigationEvent<Context, Key>(
val context: Context,
val keyBackStackCount: Int
)
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,11 @@ interface ComposeNavigationIntentStackNavigatorByKey<I : NavigationIntent> :
}

@ExperimentalNavigationApi
class ComposeNavigationIntentNavigatorByKeyViewModel<Scope, Intent : NavigationIntent> internal constructor(
initialScope: Scope,
initialKeys: (Scope) -> Intent,
class ComposeNavigationIntentNavigatorByKeyViewModel<Context, Intent : NavigationIntent> internal constructor(
initialScope: Context,
initialKeys: (Context) -> Intent,
override val content: @Composable ComposeNavigationIntentScope<Intent>.(key: Intent) -> Unit
) : BaseComposeNavigatorByKeyViewModel<Scope, Intent, ComposeNavigationIntentScope<Intent>>(
initialScope = initialScope,
) : BaseComposeNavigatorByKeyViewModel<Context, Intent, ComposeNavigationIntentScope<Intent>>(
initialContext = initialScope,
initialKeys = initialKeys
), ComposeNavigationIntentStackNavigatorByKey<Intent>
Original file line number Diff line number Diff line change
Expand Up @@ -83,15 +83,15 @@ interface ComposeStackNavigatorByKey<T> : ComposeStackNavigator<T>,
}

@ExperimentalNavigationApi
interface ComposeScopedNavigator<Scope, Key> : ComposeNavigator<Key> {
interface ComposeContextNavigator<Context, Key> : ComposeNavigator<Key> {

val initialScope: Scope
val initialContext: Context

val currentScope: Scope
val currentContext: Context

val scopeChanges: Flow<Scope>
val contextChanges: Flow<Context>

fun changeScope(to: Scope)
fun changeContext(to: Context)

companion object
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,59 +8,59 @@ import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.filterNotNull

@ExperimentalNavigationApi
abstract class BaseComposeNavigatorByContentViewModel<Scope, Key> : ViewModel(),
abstract class BaseComposeNavigatorByContentViewModel<Context, Key> : ViewModel(),
ComposeNavigator<Key>,
ComposeNavigatorByContent<Key>,
ComposeStackNavigatorByContent<Key>,
ComposeScopedNavigator<Scope, Key> {
ComposeContextNavigator<Context, Key> {

@Composable
internal abstract fun ComposeNavigationContentScope<Key>.content(key: Key)
}

@ExperimentalNavigationApi
class ComposeNavigatorByContentViewModel<Scope, Key> internal constructor(
override val initialScope: Scope,
private val initialKeysAndContent: (Scope) -> Pair<Key, @Composable ComposeNavigationContentScope<Key>.() -> Unit>
) : BaseComposeNavigatorByContentViewModel<Scope, Key>() {
class ComposeNavigatorByContentViewModel<Context, Key> internal constructor(
override val initialContext: Context,
private val initialKeysAndContent: (Context) -> Pair<Key, @Composable ComposeNavigationContentScope<Key>.() -> Unit>
) : BaseComposeNavigatorByContentViewModel<Context, Key>() {

override val keyChanges: Flow<Key>
get() = mutableKeyFlow.filterNotNull()

override val initialKey: Key
get() = initialKeysAndContent(initialScope).first
get() = initialKeysAndContent(initialContext).first

private val initialContent: @Composable ComposeNavigationContentScope<Key>.() -> Unit
get() = initialKeysAndContent(initialScope).second
get() = initialKeysAndContent(initialContext).second

override val currentKey: Key
get() = mutableKeyFlow.value

override var isInitialized: Boolean = false
internal set

override val currentScope: Scope
override val currentContext: Context
get() = mutableScopeFlow.value

override val scopeChanges: Flow<Scope>
override val contextChanges: Flow<Context>
get() = mutableScopeFlow.filterNotNull()

private val mutableKeyFlow = MutableStateFlow(value = initialKey)
private val mutableScopeFlow = MutableStateFlow(value = initialScope)
private val mutableScopeFlow = MutableStateFlow(value = initialContext)

private val contents = mutableMapOf<Key, (@Composable ComposeNavigationContentScope<Key>.() -> Unit)>(
initialKey to initialContent
)

private val scopedKeyStack = mutableMapOf(initialScope to mutableListOf(initialKey))
private val scopedKeyStack = mutableMapOf(initialContext to mutableListOf(initialKey))

@Composable
override fun goTo(
key: Key,
strategy: NavStackDuplicateContentStrategy,
content: @Composable ComposeNavigationContentScope<Key>.() -> Unit
) {
val currentScope = this.currentScope
val currentScope = this.currentContext
val currentKeyStack = scopedKeyStack[currentScope] ?: mutableListOf()

// If we are already displaying this key on the current scoped stack, then return.
Expand Down Expand Up @@ -97,7 +97,7 @@ class ComposeNavigatorByContentViewModel<Scope, Key> internal constructor(
val wentBack = canGoBack()

if (wentBack) {
val currentScope = this.currentScope
val currentScope = this.currentContext
val currentKeyStack = scopedKeyStack[currentScope] ?: mutableListOf()

val removedKey = currentKeyStack.removeLast()
Expand All @@ -114,7 +114,7 @@ class ComposeNavigatorByContentViewModel<Scope, Key> internal constructor(
}

override fun canGoBack(): Boolean {
val currentKeyStack = scopedKeyStack[currentScope] ?: mutableListOf()
val currentKeyStack = scopedKeyStack[currentContext] ?: mutableListOf()

return currentKeyStack.size > 1
}
Expand All @@ -124,8 +124,8 @@ class ComposeNavigatorByContentViewModel<Scope, Key> internal constructor(
contents[key]?.invoke(this)
}

override fun changeScope(to: Scope) {
if (to == currentScope) return
override fun changeContext(to: Context) {
if (to == currentContext) return

val keyStack = scopedKeyStack[to]

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,42 +8,42 @@ import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.filterNotNull

@ExperimentalNavigationApi
abstract class BaseComposeNavigatorByKeyViewModel<Scope, Key, NavigationScope : ComposeNavigationKeyScope<Key>>(
final override val initialScope: Scope,
private val initialKeys: (Scope) -> Key
abstract class BaseComposeNavigatorByKeyViewModel<Context, Key, NavigationScope : ComposeNavigationKeyScope<Key>>(
final override val initialContext: Context,
private val initialKeys: (Context) -> Key
) : ViewModel(),
ComposeNavigator<Key>,
ComposeNavigatorByKey<Key>,
ComposeStackNavigatorByKey<Key>,
ComposeScopedNavigator<Scope, Key> {
ComposeContextNavigator<Context, Key> {

internal abstract val content: @Composable NavigationScope.(key: Key) -> Unit

override val keyChanges: Flow<Key>
get() = mutableKeyFlow.filterNotNull()

final override val initialKey: Key
get() = initialKeys(initialScope)
get() = initialKeys(initialContext)

override val currentKey: Key
get() = mutableKeyFlow.value

override var isInitialized: Boolean = false
internal set

override val currentScope: Scope
override val currentContext: Context
get() = mutableScopeFlow.value

override val scopeChanges: Flow<Scope>
override val contextChanges: Flow<Context>
get() = mutableScopeFlow.filterNotNull()

private val mutableKeyFlow = MutableStateFlow(value = initialKey)
private val mutableScopeFlow = MutableStateFlow(value = initialScope)
private val mutableScopeFlow = MutableStateFlow(value = initialContext)

private val scopedKeyStack = mutableMapOf(initialScope to mutableListOf(initialKey))
private val scopedKeyStack = mutableMapOf(initialContext to mutableListOf(initialKey))

override fun goTo(key: Key, strategy: NavStackDuplicateContentStrategy) {
val currentScope = this.currentScope
val currentScope = this.currentContext
val currentKeyStack = scopedKeyStack[currentScope] ?: mutableListOf()

// If we are already displaying this key on the current scoped stack, then return.
Expand Down Expand Up @@ -73,7 +73,7 @@ abstract class BaseComposeNavigatorByKeyViewModel<Scope, Key, NavigationScope :
val wentBack = canGoBack()

if (wentBack) {
val currentScope = this.currentScope
val currentScope = this.currentContext
val currentKeyStack = scopedKeyStack[currentScope] ?: mutableListOf()
currentKeyStack.removeLast()
scopedKeyStack[currentScope] = currentKeyStack
Expand All @@ -84,13 +84,13 @@ abstract class BaseComposeNavigatorByKeyViewModel<Scope, Key, NavigationScope :
}

override fun canGoBack(): Boolean {
val currentKeyStack = scopedKeyStack[currentScope] ?: mutableListOf()
val currentKeyStack = scopedKeyStack[currentContext] ?: mutableListOf()

return currentKeyStack.size > 1
}

override fun changeScope(to: Scope) {
if (to == currentScope) return
override fun changeContext(to: Context) {
if (to == currentContext) return

val keyStack = scopedKeyStack[to]

Expand All @@ -109,11 +109,11 @@ abstract class BaseComposeNavigatorByKeyViewModel<Scope, Key, NavigationScope :
}

@ExperimentalNavigationApi
class ComposeNavigatorByKeyViewModel<Scope, Key> internal constructor(
initialScope: Scope,
initialKeys: (Scope) -> Key,
class ComposeNavigatorByKeyViewModel<Context, Key> internal constructor(
initialScope: Context,
initialKeys: (Context) -> Key,
override val content: @Composable ComposeNavigationKeyScope<Key>.(key: Key) -> Unit
) : BaseComposeNavigatorByKeyViewModel<Scope, Key, ComposeNavigationKeyScope<Key>>(
initialScope = initialScope,
) : BaseComposeNavigatorByKeyViewModel<Context, Key, ComposeNavigationKeyScope<Key>>(
initialContext = initialScope,
initialKeys = initialKeys
)
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,12 @@ import com.chrynan.navigation.NavigationIntent

@Composable
@ExperimentalNavigationApi
internal expect fun <Scope, Key> InternalNavContainer(navigator: BaseComposeNavigatorByContentViewModel<Scope, Key>)
internal expect fun <Context, Key> InternalNavContainer(navigator: BaseComposeNavigatorByContentViewModel<Context, Key>)

@Composable
@ExperimentalNavigationApi
internal expect fun <Scope, Key, NavigationScope : ComposeNavigationKeyScope<Key>> InternalNavContainer(
navigator: BaseComposeNavigatorByKeyViewModel<Scope, Key, NavigationScope>,
internal expect fun <Context, Key, NavigationScope : ComposeNavigationKeyScope<Key>> InternalNavContainer(
navigator: BaseComposeNavigatorByKeyViewModel<Context, Key, NavigationScope>,
scope: NavigationScope
)

Expand All @@ -37,7 +37,7 @@ internal expect fun <Scope, Key, NavigationScope : ComposeNavigationKeyScope<Key
*/
@Composable
@ExperimentalNavigationApi
fun <Scope, Key> NavContainer(navigator: ComposeNavigatorByContentViewModel<Scope, Key>) {
fun <Context, Key> NavContainer(navigator: ComposeNavigatorByContentViewModel<Context, Key>) {
InternalNavContainer(navigator = navigator)

navigator.isInitialized = true
Expand Down Expand Up @@ -70,7 +70,7 @@ fun <Scope, Key> NavContainer(navigator: ComposeNavigatorByContentViewModel<Scop
*/
@Composable
@ExperimentalNavigationApi
fun <Scope, Key> NavContainer(navigator: ComposeNavigatorByKeyViewModel<Scope, Key>) {
fun <Context, Key> NavContainer(navigator: ComposeNavigatorByKeyViewModel<Context, Key>) {
val scope = object : ComposeNavigationKeyScope<Key> {

override val navigator: ComposeStackNavigatorByKey<Key>
Expand Down Expand Up @@ -108,7 +108,7 @@ fun <Scope, Key> NavContainer(navigator: ComposeNavigatorByKeyViewModel<Scope, K
*/
@Composable
@ExperimentalNavigationApi
fun <Scope, Intent : NavigationIntent> NavContainer(navigator: ComposeNavigationIntentNavigatorByKeyViewModel<Scope, Intent>) {
fun <Context, Intent : NavigationIntent> NavContainer(navigator: ComposeNavigationIntentNavigatorByKeyViewModel<Context, Intent>) {
val scope = object : ComposeNavigationIntentScope<Intent> {

override val navigator: ComposeNavigationIntentStackNavigatorByKey<Intent>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ fun <Key> rememberNavigatorByContent(
initialContent: @Composable ComposeNavigationContentScope<Key>.() -> Unit
): ComposeNavigatorByContentViewModel<Nothing?, Key> = remember {
ComposeNavigatorByContentViewModel(
initialScope = null,
initialContext = null,
initialKeysAndContent = { initialKey to initialContent }
)
}
Expand Down Expand Up @@ -85,12 +85,12 @@ fun <Key> rememberNavigatorByContent(
*/
@ExperimentalNavigationApi
@Composable
fun <Scope, Key> rememberNavigatorByContent(
initialScope: Scope,
initialKeysAndContent: (Scope) -> Pair<Key, @Composable ComposeNavigationContentScope<Key>.() -> Unit>
): ComposeNavigatorByContentViewModel<Scope, Key> = remember {
fun <Context, Key> rememberNavigatorByContent(
initialContext: Context,
initialKeysAndContent: (Context) -> Pair<Key, @Composable ComposeNavigationContentScope<Key>.() -> Unit>
): ComposeNavigatorByContentViewModel<Context, Key> = remember {
ComposeNavigatorByContentViewModel(
initialScope = initialScope,
initialContext = initialContext,
initialKeysAndContent = initialKeysAndContent
)
}
Expand Down Expand Up @@ -189,13 +189,13 @@ fun <Key> rememberNavigatorByKey(
*/
@ExperimentalNavigationApi
@Composable
fun <Scope, Key> rememberNavigatorByKey(
initialScope: Scope,
initialKeys: (Scope) -> Key,
fun <Context, Key> rememberNavigatorByKey(
initialContext: Context,
initialKeys: (Context) -> Key,
content: @Composable ComposeNavigationKeyScope<Key>.(key: Key) -> Unit
): ComposeNavigatorByKeyViewModel<Scope, Key> = remember {
): ComposeNavigatorByKeyViewModel<Context, Key> = remember {
ComposeNavigatorByKeyViewModel(
initialScope = initialScope,
initialScope = initialContext,
initialKeys = initialKeys,
content = content
)
Expand Down Expand Up @@ -293,13 +293,13 @@ fun <Intent : NavigationIntent> rememberNavigatorByIntent(
*/
@ExperimentalNavigationApi
@Composable
fun <Scope, Intent : NavigationIntent> rememberNavigatorByIntent(
initialScope: Scope,
initialIntents: (Scope) -> Intent,
fun <Context, Intent : NavigationIntent> rememberNavigatorByIntent(
initialContext: Context,
initialIntents: (Context) -> Intent,
content: @Composable ComposeNavigationIntentScope<Intent>.(intent: Intent) -> Unit
): ComposeNavigationIntentNavigatorByKeyViewModel<Scope, Intent> = remember {
): ComposeNavigationIntentNavigatorByKeyViewModel<Context, Intent> = remember {
ComposeNavigationIntentNavigatorByKeyViewModel(
initialScope = initialScope,
initialScope = initialContext,
initialKeys = initialIntents,
content = content
)
Expand Down
Loading

0 comments on commit b0c1b92

Please sign in to comment.