Skip to content

Commit 480b22d

Browse files
authored
Merge pull request #4 from mkraynov/wp/issue-2/0
Got rid of .asDynamic()() function invocation
2 parents c1ec560 + 879e959 commit 480b22d

File tree

5 files changed

+32
-43
lines changed

5 files changed

+32
-43
lines changed

src/components/App.kt

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -63,14 +63,6 @@ class App(props: AppProps) : RComponent<AppProps, AppState>(props) {
6363
setState { editing = null }
6464
}
6565

66-
fun onDestroy(todo: TodoModel) {
67-
props.model.destroy(todo)
68-
}
69-
70-
fun onChangeSelection(now: NowShowing) {
71-
setState { nowShowing = now }
72-
}
73-
7466
override fun RBuilder.render() {
7567
div {
7668
header("header") {
@@ -86,7 +78,8 @@ class App(props: AppProps) : RComponent<AppProps, AppState>(props) {
8678
autoFocus = true
8779
onChangeFunction = { onChange(it) }
8880
onKeyDownFunction = {
89-
if (it.asDynamic().keyCode == ENTER_KEYCODE) {
81+
val keyCode: Int = it.asDynamic().keyCode
82+
if (keyCode == ENTER_KEYCODE) {
9083
onKeyDown(it)
9184
}
9285
}
@@ -114,8 +107,8 @@ class App(props: AppProps) : RComponent<AppProps, AppState>(props) {
114107
todo = todo,
115108
editing = obj.editing,
116109
onCancel = { setState { editing = null } },
117-
onDestroy = { todo: TodoModel -> onDestroy(todo) },
118-
onEdit = { setState { editing = todo.id } },
110+
onDestroy = { todo: TodoModel -> props.model.destroy(todo) },
111+
onEdit = { todo: TodoModel -> setState { editing = todo.id } },
119112
onSave = { todo: TodoModel, text: String -> onSave(todo, text) },
120113
onToggle = { todo: TodoModel -> props.model.toggle(todo.id) }
121114
)
@@ -127,7 +120,7 @@ class App(props: AppProps) : RComponent<AppProps, AppState>(props) {
127120
footer(completedCount = props.model.getCompletedCount(),
128121
count = getTodos().size,
129122
nowShowing = state.nowShowing,
130-
onChangeSelection = { now: NowShowing -> onChangeSelection(now) },
123+
onChangeSelection = { now: NowShowing -> setState { nowShowing = now } },
131124
onClearCompleted = { props.model.clearCompleted() }
132125
)
133126
}

src/components/Footer.kt

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ interface FooterProps: RProps {
1414
var completedCount: Int
1515
var count: Int
1616
var nowShowing: NowShowing
17-
var onChangeSelection: Function<Any>
18-
var onClearCompleted: Function<Any>
17+
var onChangeSelection: (nowShowing: NowShowing) -> Unit
18+
var onClearCompleted: () -> Unit
1919
}
2020

2121
class Footer(props: FooterProps) : RComponent<FooterProps, RState>() {
@@ -33,7 +33,7 @@ class Footer(props: FooterProps) : RComponent<FooterProps, RState>() {
3333
a(href = "#/",
3434
classes = classNames(object { val selected = (props.nowShowing == NowShowing.ALL_TODOS) })) {
3535
attrs {
36-
onClickFunction = { props.onChangeSelection.asDynamic()(NowShowing.ALL_TODOS) }
36+
onClickFunction = { props.onChangeSelection(NowShowing.ALL_TODOS) }
3737
}
3838
+"All"
3939
}
@@ -45,7 +45,7 @@ class Footer(props: FooterProps) : RComponent<FooterProps, RState>() {
4545
a(href="#/active",
4646
classes = classNames(object { val selected = (props.nowShowing == NowShowing.ACTIVE_TODOS) })) {
4747
attrs {
48-
onClickFunction = { props.onChangeSelection.asDynamic()(NowShowing.ACTIVE_TODOS) }
48+
onClickFunction = { props.onChangeSelection(NowShowing.ACTIVE_TODOS) }
4949
}
5050
+"Active"
5151
}
@@ -57,7 +57,7 @@ class Footer(props: FooterProps) : RComponent<FooterProps, RState>() {
5757
a(href="#/completed",
5858
classes = classNames(object { val selected = (props.nowShowing == NowShowing.COMPLETED_TODOS) })) {
5959
attrs {
60-
onClickFunction = { props.onChangeSelection.asDynamic()(NowShowing.COMPLETED_TODOS) }
60+
onClickFunction = { props.onChangeSelection(NowShowing.COMPLETED_TODOS) }
6161
}
6262
+"Completed"
6363
}
@@ -67,7 +67,7 @@ class Footer(props: FooterProps) : RComponent<FooterProps, RState>() {
6767
button(classes = "clear-completed") {
6868
attrs {
6969
onClickFunction = {
70-
props.onClearCompleted.asDynamic()()
70+
props.onClearCompleted()
7171
}
7272
}
7373
+"Clear completed"
@@ -80,8 +80,8 @@ class Footer(props: FooterProps) : RComponent<FooterProps, RState>() {
8080
fun RBuilder.footer(completedCount: Int,
8181
count: Int,
8282
nowShowing: NowShowing,
83-
onChangeSelection: Function<Any>,
84-
onClearCompleted: Function<Any>
83+
onChangeSelection: (nowShowing: NowShowing) -> Unit,
84+
onClearCompleted: () -> Unit
8585
) = child(Footer::class) {
8686
attrs.completedCount = completedCount
8787
attrs.count = count

src/components/TodoItem.kt

Lines changed: 16 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@ package components
22

33
import index.ENTER_KEYCODE
44
import index.ESCAPE_KEYCODE
5-
import index.classNames
6-
import kotlinext.js.Object
75
import kotlinx.html.InputType
86
import kotlinx.html.js.*
97
import model.TodoModel
@@ -13,17 +11,16 @@ import react.dom.button
1311
import react.dom.div
1412
import react.dom.input
1513
import react.dom.label
16-
import kotlin.js.Json
1714

1815
interface TodoItemProps : RProps {
1916
var editing: Boolean
2017
var todo: TodoModel
2118

22-
var onCancel: Function<Any>
23-
var onDestroy: Function<Any>
24-
var onEdit: Function<Any>
25-
var onSave: Function<Any>
26-
var onToggle: Function<Any>
19+
var onCancel: () -> Unit
20+
var onDestroy: (todo: TodoModel) -> Unit
21+
var onEdit: (todo: TodoModel) -> Unit
22+
var onSave: (todo: TodoModel, value: String) -> Unit
23+
var onToggle: (todo: TodoModel) -> Unit
2724
}
2825

2926
interface TodoItemState : RState {
@@ -34,10 +31,10 @@ class TodoItem(props: TodoItemProps) : RComponent<TodoItemProps, TodoItemState>(
3431
fun handleSubmit() {
3532
val value = state.editText.trim()
3633
if (value != EMPTY_STRING) {
37-
props.onSave.asDynamic()(props.todo, value)
34+
props.onSave(props.todo, value)
3835
setState { editText = value }
3936
} else {
40-
props.onDestroy.asDynamic()(props.todo)
37+
props.onDestroy(props.todo)
4138
}
4239
}
4340

@@ -48,22 +45,22 @@ class TodoItem(props: TodoItemProps) : RComponent<TodoItemProps, TodoItemState>(
4845
attrs {
4946
checked = props.todo.completed
5047
onChangeFunction = {
51-
props.onToggle.asDynamic()(props.todo)
48+
props.onToggle(props.todo)
5249
}
5350
}
5451
}
5552
label {
5653
+props.todo.title
5754
attrs {
5855
onDoubleClickFunction = {
59-
props.onEdit.asDynamic()();
56+
props.onEdit(props.todo);
6057
setState { editText = props.todo.title }
6158
}
6259
}
6360
}
6461
button(classes = "destroy") {
6562
attrs {
66-
onClickFunction = { props.onDestroy.asDynamic()(props.todo) }
63+
onClickFunction = { props.onDestroy(props.todo) }
6764
}
6865
}
6966
}
@@ -81,7 +78,7 @@ class TodoItem(props: TodoItemProps) : RComponent<TodoItemProps, TodoItemState>(
8178
val keyCode: Int = it.asDynamic().keyCode
8279
if (keyCode == ESCAPE_KEYCODE) {
8380
setState { editText = props.todo.title }
84-
props.onCancel.asDynamic()()
81+
props.onCancel()
8582
} else if (keyCode == ENTER_KEYCODE) {
8683
handleSubmit()
8784
}
@@ -94,11 +91,11 @@ class TodoItem(props: TodoItemProps) : RComponent<TodoItemProps, TodoItemState>(
9491

9592
fun RBuilder.todoItem(editing: Boolean,
9693
todo: TodoModel,
97-
onCancel: Function<Any>,
98-
onDestroy: Function<Any>,
99-
onEdit: Function<Any>,
100-
onSave: Function<Any>,
101-
onToggle: Function<Any>
94+
onCancel: () -> Unit,
95+
onDestroy: (todo: TodoModel) -> Unit,
96+
onEdit: (todo: TodoModel) -> Unit,
97+
onSave: (todo: TodoModel, value: String) -> Unit,
98+
onToggle: (todo: TodoModel) -> Unit
10299
) = child(TodoItem::class) {
103100
attrs.editing = editing
104101
attrs.todo = todo

src/index/index.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package index
22

33
import components.app
4-
import kotlinext.js.Object
54
import kotlinext.js.invoke
65
import kotlinext.js.require
76
import model.TodosModel

src/model/TodosModel.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,14 @@ import utils.uuid
55
class TodosModel {
66
var todos: List<TodoModel> = emptyList()
77

8-
var onChanges: List<Function<Any>> = emptyList()
8+
var onChanges: List<() -> Unit> = emptyList()
99

10-
fun subscribe(onChange: Function<Any>) {
10+
fun subscribe(onChange: () -> Unit) {
1111
onChanges = onChanges.plus(onChange)
1212
}
1313

1414
fun inform() {
15-
onChanges.forEach { it.asDynamic()() }
15+
onChanges.forEach { it() }
1616
}
1717

1818
fun addTodo(title: String) {

0 commit comments

Comments
 (0)