From 441f3745695693f32e41ecf291bf642cc5679c88 Mon Sep 17 00:00:00 2001 From: Arkadii Ivanov Date: Mon, 29 Mar 2021 22:40:50 +0100 Subject: [PATCH] Update sample Counter --- .../com/arkivanov/counter/app/MainActivity.kt | 11 ++-- .../com/arkivanov/sample/counter/app/App.kt | 6 +- .../counter/ios-app/ios-app/ContentView.swift | 4 +- .../ios-app/ios-app/CounterInnerView.swift | 58 +++++++++---------- .../ios-app/ios-app/CounterRootView.swift | 37 ++++++------ .../counter/ios-app/ios-app/CounterView.swift | 16 ++--- .../ui/android/CounterInnerContainerView.kt | 18 +++--- .../ui/android/CounterRootContainerView.kt | 10 ++-- .../counter/shared/ui/android/CounterView.kt | 6 +- ...ntainerComposable.kt => CounterInnerUi.kt} | 26 ++++----- ...untainerComposable.kt => CounterRootUi.kt} | 12 ++-- .../{CounterComposable.kt => CounterUi.kt} | 12 ++-- .../sample/counter/shared/counter/Counter.kt | 8 +-- .../counter/shared/counter/CounterBuilder.kt | 7 --- .../{CounterImpl.kt => CounterComponent.kt} | 14 ++--- .../counter/shared/inner/CounterInner.kt | 22 +++++++ ...tainerImpl.kt => CounterInnerComponent.kt} | 26 ++++----- .../shared/inner/CounterInnerContainer.kt | 28 --------- .../inner/CounterInnerContainerBuilder.kt | 7 --- .../sample/counter/shared/root/CounterRoot.kt | 20 +++++++ ...ntainerImpl.kt => CounterRootComponent.kt} | 24 +++----- .../shared/root/CounterRootContainer.kt | 26 --------- .../root/CounterRootContainerBuilder.kt | 7 --- .../counter/shared/RenderableComponent.kt | 4 +- .../arkivanov/sample/counter/shared/Utils.kt | 2 +- .../sample/counter/shared/counter/CounterR.kt | 10 ++-- .../sample/counter/shared/inner/InnerR.kt | 26 ++++----- .../sample/counter/shared/root/RootR.kt | 16 ++--- 28 files changed, 206 insertions(+), 257 deletions(-) rename sample/counter/shared/src/androidMain/kotlin/com/arkivanov/sample/counter/shared/ui/compose/{CounterInnerContainerComposable.kt => CounterInnerUi.kt} (73%) rename sample/counter/shared/src/androidMain/kotlin/com/arkivanov/sample/counter/shared/ui/compose/{CounterRootCountainerComposable.kt => CounterRootUi.kt} (81%) rename sample/counter/shared/src/androidMain/kotlin/com/arkivanov/sample/counter/shared/ui/compose/{CounterComposable.kt => CounterUi.kt} (71%) delete mode 100644 sample/counter/shared/src/commonMain/kotlin/com/arkivanov/sample/counter/shared/counter/CounterBuilder.kt rename sample/counter/shared/src/commonMain/kotlin/com/arkivanov/sample/counter/shared/counter/{CounterImpl.kt => CounterComponent.kt} (83%) create mode 100644 sample/counter/shared/src/commonMain/kotlin/com/arkivanov/sample/counter/shared/inner/CounterInner.kt rename sample/counter/shared/src/commonMain/kotlin/com/arkivanov/sample/counter/shared/inner/{CounterInnerContainerImpl.kt => CounterInnerComponent.kt} (64%) delete mode 100644 sample/counter/shared/src/commonMain/kotlin/com/arkivanov/sample/counter/shared/inner/CounterInnerContainer.kt delete mode 100644 sample/counter/shared/src/commonMain/kotlin/com/arkivanov/sample/counter/shared/inner/CounterInnerContainerBuilder.kt create mode 100644 sample/counter/shared/src/commonMain/kotlin/com/arkivanov/sample/counter/shared/root/CounterRoot.kt rename sample/counter/shared/src/commonMain/kotlin/com/arkivanov/sample/counter/shared/root/{CounterRootContainerImpl.kt => CounterRootComponent.kt} (56%) delete mode 100644 sample/counter/shared/src/commonMain/kotlin/com/arkivanov/sample/counter/shared/root/CounterRootContainer.kt delete mode 100644 sample/counter/shared/src/commonMain/kotlin/com/arkivanov/sample/counter/shared/root/CounterRootContainerBuilder.kt diff --git a/sample/counter/app-android/src/main/java/com/arkivanov/counter/app/MainActivity.kt b/sample/counter/app-android/src/main/java/com/arkivanov/counter/app/MainActivity.kt index d31d07c6..8b94efdc 100644 --- a/sample/counter/app-android/src/main/java/com/arkivanov/counter/app/MainActivity.kt +++ b/sample/counter/app-android/src/main/java/com/arkivanov/counter/app/MainActivity.kt @@ -19,9 +19,9 @@ import com.arkivanov.decompose.extensions.compose.jetpack.rememberRootComponent import com.arkivanov.decompose.instancekeeper.InstanceKeeper import com.arkivanov.decompose.lifecycle.asDecomposeLifecycle import com.arkivanov.decompose.statekeeper.StateKeeper -import com.arkivanov.sample.counter.shared.root.CounterRootContainer +import com.arkivanov.sample.counter.shared.root.CounterRootComponent import com.arkivanov.sample.counter.shared.ui.android.CounterRootView -import com.arkivanov.sample.counter.shared.ui.compose.invoke +import com.arkivanov.sample.counter.shared.ui.compose.CounterRootUi class MainActivity : AppCompatActivity() { @@ -41,7 +41,8 @@ class MainActivity : AppCompatActivity() { ComposeAppTheme { Surface(color = MaterialTheme.colors.background) { Box(modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.Center) { - rememberRootComponent(::CounterRootContainer).model() + val component = rememberRootComponent(::CounterRootComponent) + CounterRootUi(component) } } } @@ -62,7 +63,7 @@ class MainActivity : AppCompatActivity() { backPressedDispatcher = BackPressedDispatcher(onBackPressedDispatcher) ) - val root = CounterRootContainer(componentContext) + val root = CounterRootComponent(componentContext) val viewContext = DefaultViewContext( @@ -72,7 +73,7 @@ class MainActivity : AppCompatActivity() { viewContext.apply { child(parent) { - CounterRootView(root.model) + CounterRootView(root) } } } diff --git a/sample/counter/app-js/src/main/kotlin/com/arkivanov/sample/counter/app/App.kt b/sample/counter/app-js/src/main/kotlin/com/arkivanov/sample/counter/app/App.kt index 0cac72db..999ca907 100644 --- a/sample/counter/app-js/src/main/kotlin/com/arkivanov/sample/counter/app/App.kt +++ b/sample/counter/app-js/src/main/kotlin/com/arkivanov/sample/counter/app/App.kt @@ -5,7 +5,7 @@ import com.arkivanov.decompose.lifecycle.LifecycleRegistry import com.arkivanov.decompose.lifecycle.destroy import com.arkivanov.decompose.lifecycle.resume import com.arkivanov.sample.counter.shared.renderableChild -import com.arkivanov.sample.counter.shared.root.CounterRootContainer +import com.arkivanov.sample.counter.shared.root.CounterRootComponent import com.arkivanov.sample.counter.shared.root.RootR import com.ccfraser.muirwik.components.mContainer import com.ccfraser.muirwik.components.mCssBaseline @@ -19,7 +19,7 @@ class App : RComponent() { private val lifecycle = LifecycleRegistry() private val ctx = DefaultComponentContext(lifecycle = lifecycle) - private val root = CounterRootContainer(ctx) + private val root = CounterRootComponent(ctx) override fun componentDidMount() { lifecycle.resume() @@ -33,7 +33,7 @@ class App : RComponent() { mCssBaseline() mContainer(maxWidth = Breakpoint.xs) { - renderableChild(RootR::class, root.model) + renderableChild(RootR::class, root) } } } diff --git a/sample/counter/ios-app/ios-app/ContentView.swift b/sample/counter/ios-app/ios-app/ContentView.swift index a3012ad3..2365db90 100644 --- a/sample/counter/ios-app/ios-app/ContentView.swift +++ b/sample/counter/ios-app/ios-app/ContentView.swift @@ -11,10 +11,10 @@ import Counter struct ContentView: View { @State - private var componentHolder = ComponentHolder(factory: CounterRootContainerBuilderKt.CounterRootContainer) + private var componentHolder = ComponentHolder(factory: CounterRootComponent.init) var body: some View { - CounterRootView(componentHolder.component.model) + CounterRootView(componentHolder.component) .onAppear { LifecycleRegistryExtKt.resume(self.componentHolder.lifecycle) } .onDisappear { LifecycleRegistryExtKt.stop(self.componentHolder.lifecycle) } } diff --git a/sample/counter/ios-app/ios-app/CounterInnerView.swift b/sample/counter/ios-app/ios-app/CounterInnerView.swift index f0ad3183..131cec99 100644 --- a/sample/counter/ios-app/ios-app/CounterInnerView.swift +++ b/sample/counter/ios-app/ios-app/CounterInnerView.swift @@ -10,38 +10,36 @@ import SwiftUI import Counter struct CounterInnerView: View { - private let events: CounterInnerContainerEvents - private let counter: CounterModel + private let counterInner: CounterInner @ObservedObject - private var leftChild: ObservableValue> + private var leftRouterState: ObservableValue> @ObservedObject - private var rightChild: ObservableValue> + private var rightRouterState: ObservableValue> - init(_ model: CounterInnerContainerModel) { - self.events = model - self.counter = model.counter - self.leftChild = ObservableValue(model.leftChild) - self.rightChild = ObservableValue(model.rightChild) + init(_ counterInner: CounterInner) { + self.counterInner = counterInner + self.leftRouterState = ObservableValue(counterInner.leftRouterState) + self.rightRouterState = ObservableValue(counterInner.rightRouterState) } var body: some View { - let activeLeftChild = self.leftChild.value.activeChild.instance - let activeRightChild = self.rightChild.value.activeChild.instance - + let activeLeftChild = self.leftRouterState.value.activeChild.instance + let activeRightChild = self.rightRouterState.value.activeChild.instance + return VStack(spacing: 8) { - CounterView(self.counter) + CounterView(self.counterInner.counter) HStack(spacing: 8) { - ChildView(child: activeLeftChild, next: self.events.onNextLeftChild, prev: self.events.onPrevLeftChild) - ChildView(child: activeRightChild, next: self.events.onNextRightChild, prev: self.events.onPrevRightChild) + ChildView(child: activeLeftChild, next: self.counterInner.onNextLeftChild, prev: self.counterInner.onPrevLeftChild) + ChildView(child: activeRightChild, next: self.counterInner.onNextRightChild, prev: self.counterInner.onPrevRightChild) } } } private func ChildView( - child: CounterInnerContainerChild, + child: CounterInnerChild, next: @escaping () -> Void, prev: @escaping () -> Void ) -> some View { @@ -58,26 +56,24 @@ struct CounterInnerView: View { struct CounterInnerView_Previews: PreviewProvider { static var previews: some View { - CounterInnerView(Model()) + CounterInnerView(CounterInnerPreview()) } - class Model : CounterInnerContainerModel { - let counter: CounterModel = CounterView_Previews.Model() + class CounterInnerPreview : CounterInner { + let counter: Counter = CounterView_Previews.CounterPreview() - let leftChild: Value> = - simpleRouterState( - CounterInnerContainerChild( - counter: CounterView_Previews.Model(), - isBackEnabled: true - ) + let leftRouterState: Value> = simpleRouterState( + CounterInnerChild( + counter: CounterView_Previews.CounterPreview(), + isBackEnabled: true + ) ) - let rightChild: Value> = - simpleRouterState( - CounterInnerContainerChild( - counter: CounterView_Previews.Model(), - isBackEnabled: false - ) + let rightRouterState: Value> = simpleRouterState( + CounterInnerChild( + counter: CounterView_Previews.CounterPreview(), + isBackEnabled: false + ) ) init() { diff --git a/sample/counter/ios-app/ios-app/CounterRootView.swift b/sample/counter/ios-app/ios-app/CounterRootView.swift index 3886f55e..a9d73c08 100644 --- a/sample/counter/ios-app/ios-app/CounterRootView.swift +++ b/sample/counter/ios-app/ios-app/CounterRootView.swift @@ -10,28 +10,26 @@ import SwiftUI import Counter struct CounterRootView: View { - private let events: CounterRootContainerEvents - private let counter: CounterModel + private let counterRoot: CounterRoot @ObservedObject - private var child: ObservableValue> + private var routerState: ObservableValue> - init(_ model: CounterRootContainerModel) { - self.events = model - self.counter = model.counter - self.child = ObservableValue(model.child) + init(_ counterRoot: CounterRoot) { + self.counterRoot = counterRoot + self.routerState = ObservableValue(counterRoot.routerState) } var body: some View { - let activeChild = self.child.value.activeChild.instance + let activeChild = self.routerState.value.activeChild.instance return VStack(spacing: 8) { - CounterView(self.counter) + CounterView(self.counterRoot.counter) - Button(action: self.events.onNextChild, label: { Text("Next Child") }) + Button(action: self.counterRoot.onNextChild, label: { Text("Next Child") }) - Button(action: self.events.onPrevChild, label: { Text("Prev Child") }) + Button(action: self.counterRoot.onPrevChild, label: { Text("Prev Child") }) .disabled(!activeChild.isBackEnabled) CounterInnerView(activeChild.inner) @@ -41,18 +39,17 @@ struct CounterRootView: View { struct CounterRootView_Previews: PreviewProvider { static var previews: some View { - CounterRootView(Model()) + CounterRootView(CoutnerRootPreview()) } - class Model : CounterRootContainerModel { - let counter: CounterModel = CounterView_Previews.Model() + class CoutnerRootPreview : CounterRoot { + let counter: Counter = CounterView_Previews.CounterPreview() - let child: Value> = - simpleRouterState( - CounterRootContainerChild( - inner: CounterInnerView_Previews.Model(), - isBackEnabled: true - ) + let routerState: Value> = simpleRouterState( + CounterRootChild( + inner: CounterInnerView_Previews.CounterInnerPreview(), + isBackEnabled: true + ) ) func onNextChild() { diff --git a/sample/counter/ios-app/ios-app/CounterView.swift b/sample/counter/ios-app/ios-app/CounterView.swift index 6a030bf5..4dbfa7e1 100644 --- a/sample/counter/ios-app/ios-app/CounterView.swift +++ b/sample/counter/ios-app/ios-app/CounterView.swift @@ -11,14 +11,14 @@ import Counter struct CounterView: View { @ObservedObject - private var data: ObservableValue + private var model: ObservableValue - init(_ model: CounterModel) { - self.data = ObservableValue(model.data) + init(_ counter: Counter) { + self.model = ObservableValue(counter.model) } var body: some View { - Text(data.value.text) + Text(model.value.text) .padding() .border(Color.black, width: 2) } @@ -26,12 +26,12 @@ struct CounterView: View { struct CounterView_Previews: PreviewProvider { static var previews: some View { - CounterView(Model()) + CounterView(CounterPreview()) } - class Model : CounterModel { - let data: Value = mutableValue( - CounterData(text: "Counter0: 100") + class CounterPreview : Counter { + let model: Value = mutableValue( + CounterModel(text: "Counter0: 100") ) } } diff --git a/sample/counter/shared/src/androidMain/kotlin/com/arkivanov/sample/counter/shared/ui/android/CounterInnerContainerView.kt b/sample/counter/shared/src/androidMain/kotlin/com/arkivanov/sample/counter/shared/ui/android/CounterInnerContainerView.kt index 16539353..6d49e9fa 100644 --- a/sample/counter/shared/src/androidMain/kotlin/com/arkivanov/sample/counter/shared/ui/android/CounterInnerContainerView.kt +++ b/sample/counter/shared/src/androidMain/kotlin/com/arkivanov/sample/counter/shared/ui/android/CounterInnerContainerView.kt @@ -7,11 +7,11 @@ import com.arkivanov.decompose.extensions.android.ViewContext import com.arkivanov.decompose.extensions.android.child import com.arkivanov.decompose.extensions.android.layoutInflater import com.arkivanov.sample.counter.shared.R -import com.arkivanov.sample.counter.shared.inner.CounterInnerContainer.Model +import com.arkivanov.sample.counter.shared.inner.CounterInner @ExperimentalDecomposeApi @Suppress("FunctionName") // Factory function -fun ViewContext.CounterInnerView(model: Model): View { +fun ViewContext.CounterInnerView(counterInner: CounterInner): View { val root = layoutInflater.inflate(R.layout.counter_inner, parent, false) val leftNextButton: View = root.findViewById(R.id.button_left_next) val leftPrevButton: View = root.findViewById(R.id.button_left_prev) @@ -20,22 +20,22 @@ fun ViewContext.CounterInnerView(model: Model): View { val rightPrevButton: View = root.findViewById(R.id.button_right_prev) val rightRouter: RouterView = root.findViewById(R.id.router_right) - leftNextButton.setOnClickListener { model.onNextLeftChild() } - leftPrevButton.setOnClickListener { model.onPrevLeftChild() } - rightNextButton.setOnClickListener { model.onNextRightChild() } - rightPrevButton.setOnClickListener { model.onPrevRightChild() } + leftNextButton.setOnClickListener { counterInner.onNextLeftChild() } + leftPrevButton.setOnClickListener { counterInner.onPrevLeftChild() } + rightNextButton.setOnClickListener { counterInner.onNextRightChild() } + rightPrevButton.setOnClickListener { counterInner.onPrevRightChild() } child(root.findViewById(R.id.container_counter)) { - CounterView(model.counter) + CounterView(counterInner.counter) } - leftRouter.children(model.leftChild, lifecycle) { parent, child, _ -> + leftRouter.children(counterInner.leftRouterState, lifecycle) { parent, child, _ -> parent.removeAllViews() parent.addView(CounterView(child.counter)) leftPrevButton.isEnabled = child.isBackEnabled } - rightRouter.children(model.rightChild, lifecycle) { parent, child, _ -> + rightRouter.children(counterInner.rightRouterState, lifecycle) { parent, child, _ -> parent.removeAllViews() parent.addView(CounterView(child.counter)) rightPrevButton.isEnabled = child.isBackEnabled diff --git a/sample/counter/shared/src/androidMain/kotlin/com/arkivanov/sample/counter/shared/ui/android/CounterRootContainerView.kt b/sample/counter/shared/src/androidMain/kotlin/com/arkivanov/sample/counter/shared/ui/android/CounterRootContainerView.kt index 17c7e0b7..c8dd3888 100644 --- a/sample/counter/shared/src/androidMain/kotlin/com/arkivanov/sample/counter/shared/ui/android/CounterRootContainerView.kt +++ b/sample/counter/shared/src/androidMain/kotlin/com/arkivanov/sample/counter/shared/ui/android/CounterRootContainerView.kt @@ -7,22 +7,22 @@ import com.arkivanov.decompose.extensions.android.ViewContext import com.arkivanov.decompose.extensions.android.child import com.arkivanov.decompose.extensions.android.layoutInflater import com.arkivanov.sample.counter.shared.R -import com.arkivanov.sample.counter.shared.root.CounterRootContainer.Model +import com.arkivanov.sample.counter.shared.root.CounterRoot @ExperimentalDecomposeApi @Suppress("FunctionName") // Factory function -fun ViewContext.CounterRootView(model: Model): View { +fun ViewContext.CounterRootView(counterRoot: CounterRoot): View { val root = layoutInflater.inflate(R.layout.counter_root, parent, false) val nextButton: View = root.findViewById(R.id.button_next) val router: RouterView = root.findViewById(R.id.router) - nextButton.setOnClickListener { model.onNextChild() } + nextButton.setOnClickListener { counterRoot.onNextChild() } child(root.findViewById(R.id.container_counter)) { - CounterView(model.counter) + CounterView(counterRoot.counter) } - router.children(model.child, lifecycle) { parent, child, _ -> + router.children(counterRoot.routerState, lifecycle) { parent, child, _ -> parent.removeAllViews() parent.addView(CounterInnerView(child.inner)) } diff --git a/sample/counter/shared/src/androidMain/kotlin/com/arkivanov/sample/counter/shared/ui/android/CounterView.kt b/sample/counter/shared/src/androidMain/kotlin/com/arkivanov/sample/counter/shared/ui/android/CounterView.kt index e03c0273..dbd028b8 100644 --- a/sample/counter/shared/src/androidMain/kotlin/com/arkivanov/sample/counter/shared/ui/android/CounterView.kt +++ b/sample/counter/shared/src/androidMain/kotlin/com/arkivanov/sample/counter/shared/ui/android/CounterView.kt @@ -7,15 +7,15 @@ import com.arkivanov.decompose.extensions.android.ViewContext import com.arkivanov.decompose.extensions.android.layoutInflater import com.arkivanov.decompose.value.observe import com.arkivanov.sample.counter.shared.R -import com.arkivanov.sample.counter.shared.counter.Counter.Model +import com.arkivanov.sample.counter.shared.counter.Counter @ExperimentalDecomposeApi @Suppress("FunctionName") // Factory function -fun ViewContext.CounterView(model: Model): View { +fun ViewContext.CounterView(counter: Counter): View { val root = layoutInflater.inflate(R.layout.counter, parent, false) val counterText: TextView = root.findViewById(R.id.text_count) - model.data.observe(lifecycle) { data -> + counter.model.observe(lifecycle) { data -> counterText.text = data.text } diff --git a/sample/counter/shared/src/androidMain/kotlin/com/arkivanov/sample/counter/shared/ui/compose/CounterInnerContainerComposable.kt b/sample/counter/shared/src/androidMain/kotlin/com/arkivanov/sample/counter/shared/ui/compose/CounterInnerUi.kt similarity index 73% rename from sample/counter/shared/src/androidMain/kotlin/com/arkivanov/sample/counter/shared/ui/compose/CounterInnerContainerComposable.kt rename to sample/counter/shared/src/androidMain/kotlin/com/arkivanov/sample/counter/shared/ui/compose/CounterInnerUi.kt index 4c6a2280..717eb6c7 100644 --- a/sample/counter/shared/src/androidMain/kotlin/com/arkivanov/sample/counter/shared/ui/compose/CounterInnerContainerComposable.kt +++ b/sample/counter/shared/src/androidMain/kotlin/com/arkivanov/sample/counter/shared/ui/compose/CounterInnerUi.kt @@ -22,50 +22,50 @@ import com.arkivanov.decompose.ExperimentalDecomposeApi import com.arkivanov.decompose.extensions.compose.jetpack.Children import com.arkivanov.decompose.extensions.compose.jetpack.animation.child.slide import com.arkivanov.decompose.extensions.compose.jetpack.asState -import com.arkivanov.sample.counter.shared.inner.CounterInnerContainer +import com.arkivanov.sample.counter.shared.inner.CounterInner @OptIn(ExperimentalDecomposeApi::class) @Composable -operator fun CounterInnerContainer.Model.invoke() { +fun CounterInnerUi(counterInner: CounterInner) { Box(modifier = Modifier.border(BorderStroke(width = 1.dp, color = Color.Black))) { Column( verticalArrangement = Arrangement.Center, horizontalAlignment = Alignment.CenterHorizontally, modifier = Modifier.padding(16.dp) ) { - counter() + CounterUi(counterInner.counter) Spacer(modifier = Modifier.height(16.dp)) Row { Column(modifier = Modifier.clipToBounds()) { - val activeChild = leftChild.asState().value.activeChild.instance + val activeChild = counterInner.leftRouterState.asState().value.activeChild.instance ChildButtons( isBackEnabled = activeChild.isBackEnabled, - onNext = ::onNextLeftChild, - onPrev = ::onPrevLeftChild + onNext = counterInner::onNextLeftChild, + onPrev = counterInner::onPrevLeftChild ) - Children(routerState = leftChild, animation = slide()) { - it.instance.counter() + Children(routerState = counterInner.leftRouterState, animation = slide()) { + CounterUi(it.instance.counter) } } Spacer(modifier = Modifier.width(16.dp)) Column(modifier = Modifier.clipToBounds()) { - val activeChild = rightChild.asState().value.activeChild.instance + val activeChild = counterInner.rightRouterState.asState().value.activeChild.instance ChildButtons( isBackEnabled = activeChild.isBackEnabled, - onNext = ::onNextRightChild, - onPrev = ::onPrevRightChild + onNext = counterInner::onNextRightChild, + onPrev = counterInner::onPrevRightChild ) - Children(routerState = rightChild, animation = slide()) { - it.instance.counter() + Children(routerState = counterInner.rightRouterState, animation = slide()) { + CounterUi(it.instance.counter) } } } diff --git a/sample/counter/shared/src/androidMain/kotlin/com/arkivanov/sample/counter/shared/ui/compose/CounterRootCountainerComposable.kt b/sample/counter/shared/src/androidMain/kotlin/com/arkivanov/sample/counter/shared/ui/compose/CounterRootUi.kt similarity index 81% rename from sample/counter/shared/src/androidMain/kotlin/com/arkivanov/sample/counter/shared/ui/compose/CounterRootCountainerComposable.kt rename to sample/counter/shared/src/androidMain/kotlin/com/arkivanov/sample/counter/shared/ui/compose/CounterRootUi.kt index aeb1824a..e3837d71 100644 --- a/sample/counter/shared/src/androidMain/kotlin/com/arkivanov/sample/counter/shared/ui/compose/CounterRootCountainerComposable.kt +++ b/sample/counter/shared/src/androidMain/kotlin/com/arkivanov/sample/counter/shared/ui/compose/CounterRootUi.kt @@ -19,29 +19,29 @@ import androidx.compose.ui.unit.dp import com.arkivanov.decompose.ExperimentalDecomposeApi import com.arkivanov.decompose.extensions.compose.jetpack.Children import com.arkivanov.decompose.extensions.compose.jetpack.animation.child.slide -import com.arkivanov.sample.counter.shared.root.CounterRootContainer +import com.arkivanov.sample.counter.shared.root.CounterRoot @OptIn(ExperimentalDecomposeApi::class) @Composable -operator fun CounterRootContainer.Model.invoke() { +fun CounterRootUi(counterRoot: CounterRoot) { Box(modifier = Modifier.border(BorderStroke(width = 1.dp, color = Color.Black))) { Column( verticalArrangement = Arrangement.Center, horizontalAlignment = Alignment.CenterHorizontally, modifier = Modifier.clipToBounds().padding(16.dp) ) { - counter() + CounterUi(counterRoot.counter) Spacer(modifier = Modifier.height(16.dp)) - Button(onClick = ::onNextChild) { + Button(onClick = counterRoot::onNextChild) { Text(text = "Next Child") } Spacer(modifier = Modifier.height(16.dp)) - Children(routerState = child, animation = slide()) { - it.instance.inner() + Children(routerState = counterRoot.routerState, animation = slide()) { + CounterInnerUi(it.instance.inner) } } } diff --git a/sample/counter/shared/src/androidMain/kotlin/com/arkivanov/sample/counter/shared/ui/compose/CounterComposable.kt b/sample/counter/shared/src/androidMain/kotlin/com/arkivanov/sample/counter/shared/ui/compose/CounterUi.kt similarity index 71% rename from sample/counter/shared/src/androidMain/kotlin/com/arkivanov/sample/counter/shared/ui/compose/CounterComposable.kt rename to sample/counter/shared/src/androidMain/kotlin/com/arkivanov/sample/counter/shared/ui/compose/CounterUi.kt index b197500a..303ea1b9 100644 --- a/sample/counter/shared/src/androidMain/kotlin/com/arkivanov/sample/counter/shared/ui/compose/CounterComposable.kt +++ b/sample/counter/shared/src/androidMain/kotlin/com/arkivanov/sample/counter/shared/ui/compose/CounterUi.kt @@ -14,10 +14,14 @@ import com.arkivanov.decompose.extensions.compose.jetpack.asState import com.arkivanov.sample.counter.shared.counter.Counter @Composable -operator fun Counter.Model.invoke() { - val data by data.asState() +fun CounterUi(counter: Counter) { + val model by counter.model.asState() - Box(modifier = Modifier.border(BorderStroke(width = 1.dp, color = Color.Black)).padding(16.dp)) { - Text(text = data.text) + Box( + modifier = Modifier + .border(BorderStroke(width = 1.dp, color = Color.Black)) + .padding(16.dp) + ) { + Text(text = model.text) } } diff --git a/sample/counter/shared/src/commonMain/kotlin/com/arkivanov/sample/counter/shared/counter/Counter.kt b/sample/counter/shared/src/commonMain/kotlin/com/arkivanov/sample/counter/shared/counter/Counter.kt index 737cef0a..bd8faa0f 100644 --- a/sample/counter/shared/src/commonMain/kotlin/com/arkivanov/sample/counter/shared/counter/Counter.kt +++ b/sample/counter/shared/src/commonMain/kotlin/com/arkivanov/sample/counter/shared/counter/Counter.kt @@ -4,13 +4,9 @@ import com.arkivanov.decompose.value.Value interface Counter { - val model: Model + val model: Value - interface Model { - val data: Value - } - - class Data( + class Model( val text: String ) } diff --git a/sample/counter/shared/src/commonMain/kotlin/com/arkivanov/sample/counter/shared/counter/CounterBuilder.kt b/sample/counter/shared/src/commonMain/kotlin/com/arkivanov/sample/counter/shared/counter/CounterBuilder.kt deleted file mode 100644 index 0c7c2fe1..00000000 --- a/sample/counter/shared/src/commonMain/kotlin/com/arkivanov/sample/counter/shared/counter/CounterBuilder.kt +++ /dev/null @@ -1,7 +0,0 @@ -package com.arkivanov.sample.counter.shared.counter - -import com.arkivanov.decompose.ComponentContext - -@Suppress("FunctionName") -fun Counter(componentContext: ComponentContext, index: Int): Counter = - CounterImpl(componentContext, index = index) diff --git a/sample/counter/shared/src/commonMain/kotlin/com/arkivanov/sample/counter/shared/counter/CounterImpl.kt b/sample/counter/shared/src/commonMain/kotlin/com/arkivanov/sample/counter/shared/counter/CounterComponent.kt similarity index 83% rename from sample/counter/shared/src/commonMain/kotlin/com/arkivanov/sample/counter/shared/counter/CounterImpl.kt rename to sample/counter/shared/src/commonMain/kotlin/com/arkivanov/sample/counter/shared/counter/CounterComponent.kt index 4c9f8b9b..053cedc1 100644 --- a/sample/counter/shared/src/commonMain/kotlin/com/arkivanov/sample/counter/shared/counter/CounterImpl.kt +++ b/sample/counter/shared/src/commonMain/kotlin/com/arkivanov/sample/counter/shared/counter/CounterComponent.kt @@ -10,7 +10,6 @@ import com.arkivanov.decompose.value.MutableValue import com.arkivanov.decompose.value.Value import com.arkivanov.decompose.value.operator.map import com.arkivanov.decompose.value.reduce -import com.arkivanov.sample.counter.shared.counter.Counter.Data import com.arkivanov.sample.counter.shared.counter.Counter.Model import com.badoo.reaktive.disposable.scope.DisposableScope import com.badoo.reaktive.maybe.maybeTimer @@ -18,7 +17,7 @@ import com.badoo.reaktive.scheduler.mainScheduler import com.badoo.reaktive.single.repeatWhen import com.badoo.reaktive.single.singleOf -internal class CounterImpl( +class CounterComponent( componentContext: ComponentContext, index: Int ) : Counter, ComponentContext by componentContext { @@ -28,17 +27,16 @@ internal class CounterImpl( Handler(stateKeeper.consume(KEY_STATE) ?: State(index = index)) } - override val model: Model = - object : Model { - override val data: Value = handler.state.map { it.toData() } - } + override val model: Value = handler.state.map { it.toModel() } init { stateKeeper.register(KEY_STATE) { handler.state.value } } - private fun State.toData(): Data = - Data(text = "Counter${index}: ${count.toString().padStart(length = 3, padChar = '0')}") + private fun State.toModel(): Model = + Model( + text = "Counter${index}: ${count.toString().padStart(length = 3, padChar = '0')}" + ) private companion object { private const val KEY_STATE = "STATE" diff --git a/sample/counter/shared/src/commonMain/kotlin/com/arkivanov/sample/counter/shared/inner/CounterInner.kt b/sample/counter/shared/src/commonMain/kotlin/com/arkivanov/sample/counter/shared/inner/CounterInner.kt new file mode 100644 index 00000000..82a27815 --- /dev/null +++ b/sample/counter/shared/src/commonMain/kotlin/com/arkivanov/sample/counter/shared/inner/CounterInner.kt @@ -0,0 +1,22 @@ +package com.arkivanov.sample.counter.shared.inner + +import com.arkivanov.decompose.RouterState +import com.arkivanov.decompose.value.Value +import com.arkivanov.sample.counter.shared.counter.Counter + +interface CounterInner { + + val counter: Counter + val leftRouterState: Value> + val rightRouterState: Value> + + fun onNextLeftChild() + fun onPrevLeftChild() + fun onNextRightChild() + fun onPrevRightChild() + + class Child( + val counter: Counter, + val isBackEnabled: Boolean + ) +} diff --git a/sample/counter/shared/src/commonMain/kotlin/com/arkivanov/sample/counter/shared/inner/CounterInnerContainerImpl.kt b/sample/counter/shared/src/commonMain/kotlin/com/arkivanov/sample/counter/shared/inner/CounterInnerComponent.kt similarity index 64% rename from sample/counter/shared/src/commonMain/kotlin/com/arkivanov/sample/counter/shared/inner/CounterInnerContainerImpl.kt rename to sample/counter/shared/src/commonMain/kotlin/com/arkivanov/sample/counter/shared/inner/CounterInnerComponent.kt index ca0830bc..04112823 100644 --- a/sample/counter/shared/src/commonMain/kotlin/com/arkivanov/sample/counter/shared/inner/CounterInnerContainerImpl.kt +++ b/sample/counter/shared/src/commonMain/kotlin/com/arkivanov/sample/counter/shared/inner/CounterInnerComponent.kt @@ -11,16 +11,16 @@ import com.arkivanov.decompose.statekeeper.Parcelable import com.arkivanov.decompose.statekeeper.Parcelize import com.arkivanov.decompose.value.Value import com.arkivanov.sample.counter.shared.counter.Counter -import com.arkivanov.sample.counter.shared.inner.CounterInnerContainer.Child -import com.arkivanov.sample.counter.shared.inner.CounterInnerContainer.Events -import com.arkivanov.sample.counter.shared.inner.CounterInnerContainer.Model +import com.arkivanov.sample.counter.shared.counter.CounterComponent +import com.arkivanov.sample.counter.shared.inner.CounterInner.Child -internal class CounterInnerContainerImpl( +internal class CounterInnerComponent( componentContext: ComponentContext, index: Int -) : CounterInnerContainer, Events, ComponentContext by componentContext { +) : CounterInner, ComponentContext by componentContext { - private val counter = Counter(childContext(key = "counter"), index = index) + + override val counter: Counter = CounterComponent(childContext(key = "counter"), index = index) private val leftRouter: Router = router( @@ -29,6 +29,8 @@ internal class CounterInnerContainerImpl( childFactory = ::resolveChild ) + override val leftRouterState: Value> = leftRouter.state + private val rightRouter: Router = router( initialConfiguration = ChildConfiguration(index = 0, isBackEnabled = false), @@ -36,16 +38,11 @@ internal class CounterInnerContainerImpl( childFactory = ::resolveChild ) - override val model: Model = - object : Model, Events by this { - override val counter: Counter.Model = this@CounterInnerContainerImpl.counter.model - override val leftChild: Value> = leftRouter.state - override val rightChild: Value> = rightRouter.state - } + override val rightRouterState: Value> = rightRouter.state private fun resolveChild(configuration: ChildConfiguration, componentContext: ComponentContext): Child = Child( - counter = Counter(componentContext, index = configuration.index).model, + counter = CounterComponent(componentContext, index = configuration.index), isBackEnabled = configuration.isBackEnabled ) @@ -66,8 +63,7 @@ internal class CounterInnerContainerImpl( } private fun Router.pushNextChild() { - val index = state.value.backStack.size + 1 - push(ChildConfiguration(index = index, isBackEnabled = index >= 0)) + push(ChildConfiguration(index = state.value.backStack.size + 1, isBackEnabled = true)) } @Parcelize diff --git a/sample/counter/shared/src/commonMain/kotlin/com/arkivanov/sample/counter/shared/inner/CounterInnerContainer.kt b/sample/counter/shared/src/commonMain/kotlin/com/arkivanov/sample/counter/shared/inner/CounterInnerContainer.kt deleted file mode 100644 index 58e8cd76..00000000 --- a/sample/counter/shared/src/commonMain/kotlin/com/arkivanov/sample/counter/shared/inner/CounterInnerContainer.kt +++ /dev/null @@ -1,28 +0,0 @@ -package com.arkivanov.sample.counter.shared.inner - -import com.arkivanov.decompose.RouterState -import com.arkivanov.decompose.value.Value -import com.arkivanov.sample.counter.shared.counter.Counter - -interface CounterInnerContainer { - - val model: Model - - interface Model : Events { - val counter: Counter.Model - val leftChild: Value> - val rightChild: Value> - } - - class Child( - val counter: Counter.Model, - val isBackEnabled: Boolean - ) - - interface Events { - fun onNextLeftChild() - fun onPrevLeftChild() - fun onNextRightChild() - fun onPrevRightChild() - } -} diff --git a/sample/counter/shared/src/commonMain/kotlin/com/arkivanov/sample/counter/shared/inner/CounterInnerContainerBuilder.kt b/sample/counter/shared/src/commonMain/kotlin/com/arkivanov/sample/counter/shared/inner/CounterInnerContainerBuilder.kt deleted file mode 100644 index 251ae1f3..00000000 --- a/sample/counter/shared/src/commonMain/kotlin/com/arkivanov/sample/counter/shared/inner/CounterInnerContainerBuilder.kt +++ /dev/null @@ -1,7 +0,0 @@ -package com.arkivanov.sample.counter.shared.inner - -import com.arkivanov.decompose.ComponentContext - -@Suppress("FunctionName") -fun CounterInnerContainer(componentContext: ComponentContext, index: Int): CounterInnerContainer = - CounterInnerContainerImpl(componentContext, index = index) diff --git a/sample/counter/shared/src/commonMain/kotlin/com/arkivanov/sample/counter/shared/root/CounterRoot.kt b/sample/counter/shared/src/commonMain/kotlin/com/arkivanov/sample/counter/shared/root/CounterRoot.kt new file mode 100644 index 00000000..bc3065a7 --- /dev/null +++ b/sample/counter/shared/src/commonMain/kotlin/com/arkivanov/sample/counter/shared/root/CounterRoot.kt @@ -0,0 +1,20 @@ +package com.arkivanov.sample.counter.shared.root + +import com.arkivanov.decompose.RouterState +import com.arkivanov.decompose.value.Value +import com.arkivanov.sample.counter.shared.counter.Counter +import com.arkivanov.sample.counter.shared.inner.CounterInner + +interface CounterRoot { + + val counter: Counter + val routerState: Value> + + fun onNextChild() + fun onPrevChild() + + class Child( + val inner: CounterInner, + val isBackEnabled: Boolean + ) +} diff --git a/sample/counter/shared/src/commonMain/kotlin/com/arkivanov/sample/counter/shared/root/CounterRootContainerImpl.kt b/sample/counter/shared/src/commonMain/kotlin/com/arkivanov/sample/counter/shared/root/CounterRootComponent.kt similarity index 56% rename from sample/counter/shared/src/commonMain/kotlin/com/arkivanov/sample/counter/shared/root/CounterRootContainerImpl.kt rename to sample/counter/shared/src/commonMain/kotlin/com/arkivanov/sample/counter/shared/root/CounterRootComponent.kt index 82fb5d13..28e04a3d 100644 --- a/sample/counter/shared/src/commonMain/kotlin/com/arkivanov/sample/counter/shared/root/CounterRootContainerImpl.kt +++ b/sample/counter/shared/src/commonMain/kotlin/com/arkivanov/sample/counter/shared/root/CounterRootComponent.kt @@ -11,16 +11,15 @@ import com.arkivanov.decompose.statekeeper.Parcelable import com.arkivanov.decompose.statekeeper.Parcelize import com.arkivanov.decompose.value.Value import com.arkivanov.sample.counter.shared.counter.Counter -import com.arkivanov.sample.counter.shared.inner.CounterInnerContainer -import com.arkivanov.sample.counter.shared.root.CounterRootContainer.Child -import com.arkivanov.sample.counter.shared.root.CounterRootContainer.Events -import com.arkivanov.sample.counter.shared.root.CounterRootContainer.Model +import com.arkivanov.sample.counter.shared.counter.CounterComponent +import com.arkivanov.sample.counter.shared.inner.CounterInnerComponent +import com.arkivanov.sample.counter.shared.root.CounterRoot.Child -internal class CounterRootContainerImpl( +class CounterRootComponent( componentContext: ComponentContext -) : CounterRootContainer, Events, ComponentContext by componentContext { +) : CounterRoot, ComponentContext by componentContext { - private val counter = Counter(childContext(key = "counter"), index = 0) + override val counter: Counter = CounterComponent(childContext(key = "counter"), index = 0) private val router: Router = router( @@ -29,21 +28,16 @@ internal class CounterRootContainerImpl( childFactory = ::resolveChild ) - override val model: Model = - object : Model, Events by this { - override val counter: Counter.Model = this@CounterRootContainerImpl.counter.model - override val child: Value> = router.state - } + override val routerState: Value> = router.state private fun resolveChild(configuration: ChildConfiguration, componentContext: ComponentContext): Child = Child( - inner = CounterInnerContainer(componentContext, index = configuration.index).model, + inner = CounterInnerComponent(componentContext, index = configuration.index), isBackEnabled = configuration.isBackEnabled ) override fun onNextChild() { - val index = router.state.value.backStack.size + 1 - router.push(ChildConfiguration(index = index, isBackEnabled = index >= 1)) + router.push(ChildConfiguration(index = router.state.value.backStack.size + 1, isBackEnabled = true)) } override fun onPrevChild() { diff --git a/sample/counter/shared/src/commonMain/kotlin/com/arkivanov/sample/counter/shared/root/CounterRootContainer.kt b/sample/counter/shared/src/commonMain/kotlin/com/arkivanov/sample/counter/shared/root/CounterRootContainer.kt deleted file mode 100644 index e0b9dbc7..00000000 --- a/sample/counter/shared/src/commonMain/kotlin/com/arkivanov/sample/counter/shared/root/CounterRootContainer.kt +++ /dev/null @@ -1,26 +0,0 @@ -package com.arkivanov.sample.counter.shared.root - -import com.arkivanov.decompose.RouterState -import com.arkivanov.decompose.value.Value -import com.arkivanov.sample.counter.shared.counter.Counter -import com.arkivanov.sample.counter.shared.inner.CounterInnerContainer - -interface CounterRootContainer { - - val model: Model - - interface Model : Events { - val counter: Counter.Model - val child: Value> - } - - class Child( - val inner: CounterInnerContainer.Model, - val isBackEnabled: Boolean - ) - - interface Events { - fun onNextChild() - fun onPrevChild() - } -} diff --git a/sample/counter/shared/src/commonMain/kotlin/com/arkivanov/sample/counter/shared/root/CounterRootContainerBuilder.kt b/sample/counter/shared/src/commonMain/kotlin/com/arkivanov/sample/counter/shared/root/CounterRootContainerBuilder.kt deleted file mode 100644 index 5e52b802..00000000 --- a/sample/counter/shared/src/commonMain/kotlin/com/arkivanov/sample/counter/shared/root/CounterRootContainerBuilder.kt +++ /dev/null @@ -1,7 +0,0 @@ -package com.arkivanov.sample.counter.shared.root - -import com.arkivanov.decompose.ComponentContext - -@Suppress("FunctionName") -fun CounterRootContainer(componentContext: ComponentContext): CounterRootContainer = - CounterRootContainerImpl(componentContext) diff --git a/sample/counter/shared/src/jsMain/kotlin/com/arkivanov/sample/counter/shared/RenderableComponent.kt b/sample/counter/shared/src/jsMain/kotlin/com/arkivanov/sample/counter/shared/RenderableComponent.kt index cdbe6dee..2619c0e6 100644 --- a/sample/counter/shared/src/jsMain/kotlin/com/arkivanov/sample/counter/shared/RenderableComponent.kt +++ b/sample/counter/shared/src/jsMain/kotlin/com/arkivanov/sample/counter/shared/RenderableComponent.kt @@ -10,7 +10,7 @@ import react.setState abstract class RenderableComponent(props: Props, initialState: S) : RComponent, S>(props) { - protected val model: T get() = props.model + protected val component: T get() = props.component private val subscriptions = ArrayList>() init { @@ -38,7 +38,7 @@ abstract class RenderableComponent(props: Props, initial } interface Props : RProps { - var model: T + var component: T } protected class Subscription( diff --git a/sample/counter/shared/src/jsMain/kotlin/com/arkivanov/sample/counter/shared/Utils.kt b/sample/counter/shared/src/jsMain/kotlin/com/arkivanov/sample/counter/shared/Utils.kt index d9584e15..f7660ecc 100644 --- a/sample/counter/shared/src/jsMain/kotlin/com/arkivanov/sample/counter/shared/Utils.kt +++ b/sample/counter/shared/src/jsMain/kotlin/com/arkivanov/sample/counter/shared/Utils.kt @@ -6,6 +6,6 @@ import kotlin.reflect.KClass fun > RBuilder.renderableChild(clazz: KClass, model: M) { child(clazz) { key = model.uniqueId().toString() - attrs.model = model + attrs.component = model } } diff --git a/sample/counter/shared/src/jsMain/kotlin/com/arkivanov/sample/counter/shared/counter/CounterR.kt b/sample/counter/shared/src/jsMain/kotlin/com/arkivanov/sample/counter/shared/counter/CounterR.kt index 46962634..e3dc6868 100644 --- a/sample/counter/shared/src/jsMain/kotlin/com/arkivanov/sample/counter/shared/counter/CounterR.kt +++ b/sample/counter/shared/src/jsMain/kotlin/com/arkivanov/sample/counter/shared/counter/CounterR.kt @@ -8,22 +8,22 @@ import com.ccfraser.muirwik.components.mTypography import react.RBuilder import react.RState -class CounterR(props: Props) : RenderableComponent( +class CounterR(props: Props) : RenderableComponent( props = props, - initialState = State(data = props.model.data.value) + initialState = State(model = props.component.model.value) ) { init { - model.data.bindToState { data = it } + component.model.bindToState { model = it } } override fun RBuilder.render() { mPaper(variant = MPaperVariant.outlined) { - mTypography(state.data.text, align = MTypographyAlign.center) + mTypography(state.model.text, align = MTypographyAlign.center) } } class State( - var data: Counter.Data + var model: Counter.Model ) : RState } diff --git a/sample/counter/shared/src/jsMain/kotlin/com/arkivanov/sample/counter/shared/inner/InnerR.kt b/sample/counter/shared/src/jsMain/kotlin/com/arkivanov/sample/counter/shared/inner/InnerR.kt index b5dd92d6..0ce21ac4 100644 --- a/sample/counter/shared/src/jsMain/kotlin/com/arkivanov/sample/counter/shared/inner/InnerR.kt +++ b/sample/counter/shared/src/jsMain/kotlin/com/arkivanov/sample/counter/shared/inner/InnerR.kt @@ -18,22 +18,22 @@ import react.RState import react.dom.br import styled.styledDiv -class InnerR(props: Props) : RenderableComponent( +class InnerR(props: Props) : RenderableComponent( props = props, initialState = State( - leftRouterState = props.model.leftChild.value, - rightRouterState = props.model.rightChild.value + leftRouterState = props.component.leftRouterState.value, + rightRouterState = props.component.rightRouterState.value ) ) { init { - model.leftChild.bindToState { leftRouterState = it } - model.rightChild.bindToState { rightRouterState = it } + component.leftRouterState.bindToState { leftRouterState = it } + component.rightRouterState.bindToState { rightRouterState = it } } override fun RBuilder.render() { mPaper(variant = MPaperVariant.outlined) { - renderableChild(CounterR::class, this@InnerR.model.counter) + renderableChild(CounterR::class, this@InnerR.component.counter) br {} @@ -41,13 +41,13 @@ class InnerR(props: Props) : RenderableComponent) : RenderableComponent Unit, onPrev: () -> Unit ) { @@ -89,7 +89,7 @@ class InnerR(props: Props) : RenderableComponent, - var rightRouterState: RouterState<*, CounterInnerContainer.Child> + var leftRouterState: RouterState<*, CounterInner.Child>, + var rightRouterState: RouterState<*, CounterInner.Child> ) : RState } diff --git a/sample/counter/shared/src/jsMain/kotlin/com/arkivanov/sample/counter/shared/root/RootR.kt b/sample/counter/shared/src/jsMain/kotlin/com/arkivanov/sample/counter/shared/root/RootR.kt index c8a0ffd6..fb4fe038 100644 --- a/sample/counter/shared/src/jsMain/kotlin/com/arkivanov/sample/counter/shared/root/RootR.kt +++ b/sample/counter/shared/src/jsMain/kotlin/com/arkivanov/sample/counter/shared/root/RootR.kt @@ -21,18 +21,18 @@ import react.RState import react.dom.br import styled.styledDiv -class RootR(props: Props) : RenderableComponent( +class RootR(props: Props) : RenderableComponent( props = props, - initialState = State(routerState = props.model.child.value) + initialState = State(routerState = props.component.routerState.value) ) { init { - model.child.bindToState { routerState = it } + component.routerState.bindToState { routerState = it } } override fun RBuilder.render() { mPaper(variant = MPaperVariant.outlined) { - renderableChild(CounterR::class, this@RootR.model.counter) + renderableChild(CounterR::class, this@RootR.component.counter) br {} @@ -42,7 +42,7 @@ class RootR(props: Props) : RenderableComponent) : RenderableComponent) : RenderableComponent) : RenderableComponent, + var routerState: RouterState<*, CounterRoot.Child>, ) : RState }