Skip to content

Commit a0c46f2

Browse files
authored
Merge pull request #272 from maxtox3/bugfix/state_as_external_interface
changed all state classes to external interfaces
2 parents f8c5d15 + 044fe68 commit a0c46f2

File tree

5 files changed

+32
-28
lines changed

5 files changed

+32
-28
lines changed

sample/todo-app-js/src/main/kotlin/details/TodoDetailsComponent.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,8 @@ class TodoDetailsComponent(props: TodoDetailsParentProps) :
4242
private lateinit var controller: TodoDetailsController
4343

4444
init {
45-
state = TodoDetailsParentState(TodoDetailsView.Model("", false))
45+
state = js("{}") as TodoDetailsParentState
46+
state.model = TodoDetailsView.Model("", false)
4647
}
4748

4849
override fun componentDidMount() {
@@ -146,9 +147,9 @@ class TodoDetailsComponent(props: TodoDetailsParentProps) :
146147

147148
}
148149

149-
class TodoDetailsParentState(
150+
external interface TodoDetailsParentState : RState {
150151
var model: TodoDetailsView.Model
151-
) : RState
152+
}
152153

153154
external interface TodoDetailsParentProps : RProps {
154155
var dependencies: TodoDetailsComponent.Dependencies

sample/todo-app-js/src/main/kotlin/list/TodoListComponent.kt

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,9 @@ class TodoListParentComponent(props: TodoListParentProps) : RComponent<TodoListP
4343
private lateinit var controller: TodoListController
4444

4545
init {
46-
state = TodoListParentState(TodoListView.Model(listOf()), TodoAddView.Model(""))
46+
state = js("{}") as TodoListParentState
47+
state.listModel = TodoListView.Model(listOf())
48+
state.addModel = TodoAddView.Model("")
4749
}
4850

4951
override fun componentDidMount() {
@@ -127,10 +129,10 @@ external interface TodoListParentProps : RProps {
127129
var dependencies: TodoListParentComponent.Dependencies
128130
}
129131

130-
class TodoListParentState(
131-
var listModel: TodoListView.Model,
132+
external interface TodoListParentState : RState {
133+
var listModel: TodoListView.Model
132134
var addModel: TodoAddView.Model
133-
) : RState
135+
}
134136

135137
fun RBuilder.todoContainer(dependencies: TodoListParentComponent.Dependencies): ReactElement =
136138
child(TodoListParentComponent::class) {

sample/todo-app-js/src/main/kotlin/root/App.kt

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,9 @@ abstract class App : RComponent<AppProps, AppState>() {
5757
private val detailsOutput: (TodoDetailsController.Output) -> Unit = ::detailsOutput
5858

5959
init {
60-
state = AppState(todoId = "", showDebugDrawer = false)
60+
state = js("{}") as AppState
61+
state.todoId = ""
62+
state.showDebugDrawer = false
6163
}
6264

6365
override fun RBuilder.render() {
@@ -84,7 +86,7 @@ abstract class App : RComponent<AppProps, AppState>() {
8486
}
8587
)
8688
}
87-
if (DEBUG && state.showDebugDrawer) {
89+
if (DEBUG && state.showDebugDrawer == true) {
8890
timeTravel(onClose = ::closeDebug)
8991
}
9092
}
@@ -187,10 +189,10 @@ abstract class App : RComponent<AppProps, AppState>() {
187189
}
188190
}
189191

190-
class AppState(
191-
var todoId: String,
192-
var showDebugDrawer: Boolean
193-
) : RState
192+
external interface AppState : RState {
193+
var todoId: String
194+
var showDebugDrawer: Boolean?
195+
}
194196

195197
external interface AppProps : RProps {
196198
var dependecies: App.Dependencies

sample/todo-app-js/src/main/kotlin/timetravel/TimeTravelComponent.kt

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,12 @@ class TimeTravelComponent(prps: TimeTravelComponentProps) :
2626
private var disposable: Disposable? = null
2727

2828
init {
29-
state = TimeTravelComponentState(
30-
events = listOf(),
31-
mode = TimeTravelState.Mode.IDLE,
32-
selectedEventIndex = -1,
33-
dialogOpen = false,
34-
currentEvent = null
35-
)
29+
state = js("{}") as TimeTravelComponentState
30+
state.events = listOf()
31+
state.mode = TimeTravelState.Mode.IDLE
32+
state.selectedEventIndex = -1
33+
state.dialogOpen = false
34+
state.currentEvent = null
3635
}
3736

3837
override fun componentDidMount() {
@@ -74,7 +73,7 @@ class TimeTravelComponent(prps: TimeTravelComponentProps) :
7473
}
7574
state.currentEvent?.let { event ->
7675
infoDialog(
77-
open = state.dialogOpen,
76+
open = state.dialogOpen == true,
7877
event = event,
7978
onClose = { hideDialog() }
8079
)
@@ -114,13 +113,13 @@ external interface TimeTravelComponentProps : RProps {
114113
var onClose: () -> Unit
115114
}
116115

117-
class TimeTravelComponentState(
118-
var events: List<TimeTravelEvent>,
119-
var mode: TimeTravelState.Mode,
120-
var selectedEventIndex: Int,
121-
var dialogOpen: Boolean,
116+
external interface TimeTravelComponentState : RState {
117+
var events: List<TimeTravelEvent>
118+
var mode: TimeTravelState.Mode
119+
var selectedEventIndex: Int
120+
var dialogOpen: Boolean?
122121
var currentEvent: TimeTravelEvent?
123-
) : RState
122+
}
124123

125124
fun RBuilder.timeTravel(onClose: () -> Unit): ReactElement =
126125
child(TimeTravelComponent::class) {

sample/todo-app-js/src/main/kotlin/timetravel/TimeTravelEventsView.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ external interface TimeTravelEventsProps : RProps {
7777
var onItemClick: (TimeTravelEvent) -> Unit
7878
}
7979

80-
class TimeTravelEventsState : RState
80+
external interface TimeTravelEventsState : RState
8181

8282
fun RBuilder.timeTravelEventsView(
8383
events: List<TimeTravelEvent>,

0 commit comments

Comments
 (0)