diff options
author | Robert Jaros <rjaros@finn.pl> | 2020-05-20 17:12:56 +0200 |
---|---|---|
committer | Robert Jaros <rjaros@finn.pl> | 2020-05-20 17:12:56 +0200 |
commit | ef1abc3b975e1c77fc8663c5e5e95769fc934551 (patch) | |
tree | 343236378e2f24514635fb5e892043a054c86170 /src/main/kotlin/pl/treksoft/kvision/form/select | |
parent | 35628c364d9768a5589559b99cb698ebc2b56eba (diff) | |
download | kvision-ef1abc3b975e1c77fc8663c5e5e95769fc934551.tar.gz kvision-ef1abc3b975e1c77fc8663c5e5e95769fc934551.tar.bz2 kvision-ef1abc3b975e1c77fc8663c5e5e95769fc934551.zip |
Make all stateful components implement ObservableState interface
Diffstat (limited to 'src/main/kotlin/pl/treksoft/kvision/form/select')
-rw-r--r-- | src/main/kotlin/pl/treksoft/kvision/form/select/SimpleSelect.kt | 9 | ||||
-rw-r--r-- | src/main/kotlin/pl/treksoft/kvision/form/select/SimpleSelectInput.kt | 17 |
2 files changed, 23 insertions, 3 deletions
diff --git a/src/main/kotlin/pl/treksoft/kvision/form/select/SimpleSelect.kt b/src/main/kotlin/pl/treksoft/kvision/form/select/SimpleSelect.kt index e797e050..043e8a02 100644 --- a/src/main/kotlin/pl/treksoft/kvision/form/select/SimpleSelect.kt +++ b/src/main/kotlin/pl/treksoft/kvision/form/select/SimpleSelect.kt @@ -30,6 +30,7 @@ import pl.treksoft.kvision.form.FieldLabel import pl.treksoft.kvision.form.InvalidFeedback import pl.treksoft.kvision.form.StringFormControl import pl.treksoft.kvision.panel.SimplePanel +import pl.treksoft.kvision.state.ObservableState import pl.treksoft.kvision.utils.SnOn /** @@ -47,7 +48,7 @@ import pl.treksoft.kvision.utils.SnOn open class SimpleSelect( options: List<StringPair>? = null, value: String? = null, emptyOption: Boolean = false, name: String? = null, label: String? = null, rich: Boolean = false -) : SimplePanel(setOf("form-group")), StringFormControl { +) : SimplePanel(setOf("form-group")), StringFormControl, ObservableState<String?> { /** * A list of options (value to label pairs) for the select control. @@ -183,6 +184,12 @@ open class SimpleSelect( input.blur() } + override fun getState(): String? = input.getState() + + override fun subscribe(observer: (String?) -> Unit): () -> Unit { + return input.subscribe(observer) + } + companion object { internal var counter = 0 } diff --git a/src/main/kotlin/pl/treksoft/kvision/form/select/SimpleSelectInput.kt b/src/main/kotlin/pl/treksoft/kvision/form/select/SimpleSelectInput.kt index 63eb98b5..dd567cad 100644 --- a/src/main/kotlin/pl/treksoft/kvision/form/select/SimpleSelectInput.kt +++ b/src/main/kotlin/pl/treksoft/kvision/form/select/SimpleSelectInput.kt @@ -31,6 +31,7 @@ import pl.treksoft.kvision.form.ValidationStatus import pl.treksoft.kvision.html.TAG import pl.treksoft.kvision.html.Tag import pl.treksoft.kvision.panel.SimplePanel +import pl.treksoft.kvision.state.ObservableState import pl.treksoft.kvision.utils.set internal const val KVNULL = "#kvnull" @@ -47,7 +48,9 @@ internal const val KVNULL = "#kvnull" open class SimpleSelectInput( options: List<StringPair>? = null, value: String? = null, emptyOption: Boolean = false, classes: Set<String> = setOf() -) : SimplePanel(classes + "form-control"), FormInput { +) : SimplePanel(classes + "form-control"), FormInput, ObservableState<String?> { + + protected val observers = mutableListOf<(String?) -> Unit>() /** * A list of options (value to label pairs) for the select control. @@ -57,7 +60,7 @@ open class SimpleSelectInput( /** * Text input value. */ - var value by refreshOnUpdate(value) { refreshState() } + var value by refreshOnUpdate(value) { refreshState(); observers.forEach { ob -> ob(it) } } /** * The value of the selected child option. @@ -207,6 +210,16 @@ open class SimpleSelectInput( override fun blur() { getElementJQuery()?.blur() } + + override fun getState(): String? = value + + override fun subscribe(observer: (String?) -> Unit): () -> Unit { + observers += observer + observer(value) + return { + observers -= observer + } + } } /** |