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/range | |
| 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/range')
| -rw-r--r-- | src/main/kotlin/pl/treksoft/kvision/form/range/Range.kt | 9 | ||||
| -rw-r--r-- | src/main/kotlin/pl/treksoft/kvision/form/range/RangeInput.kt | 17 |
2 files changed, 23 insertions, 3 deletions
diff --git a/src/main/kotlin/pl/treksoft/kvision/form/range/Range.kt b/src/main/kotlin/pl/treksoft/kvision/form/range/Range.kt index dc8e57a0..d5acae8b 100644 --- a/src/main/kotlin/pl/treksoft/kvision/form/range/Range.kt +++ b/src/main/kotlin/pl/treksoft/kvision/form/range/Range.kt @@ -29,6 +29,7 @@ import pl.treksoft.kvision.form.FormHorizontalRatio import pl.treksoft.kvision.form.InvalidFeedback import pl.treksoft.kvision.form.NumberFormControl import pl.treksoft.kvision.panel.SimplePanel +import pl.treksoft.kvision.state.ObservableState import pl.treksoft.kvision.utils.SnOn /** @@ -46,7 +47,7 @@ import pl.treksoft.kvision.utils.SnOn open class Range( value: Number? = null, name: String? = null, min: Number = 0, max: Number = 100, step: Number = DEFAULT_STEP, label: String? = null, rich: Boolean = false -) : SimplePanel(setOf("form-group")), NumberFormControl { +) : SimplePanel(setOf("form-group")), NumberFormControl, ObservableState<Number?> { /** * Range input value. @@ -212,6 +213,12 @@ open class Range( invalidFeedback.addCssClass("col-sm-${horizontalRatio.fields}") } + override fun getState(): Number? = input.getState() + + override fun subscribe(observer: (Number?) -> Unit): () -> Unit { + return input.subscribe(observer) + } + companion object { internal var counter = 0 } diff --git a/src/main/kotlin/pl/treksoft/kvision/form/range/RangeInput.kt b/src/main/kotlin/pl/treksoft/kvision/form/range/RangeInput.kt index 4649c654..6112022d 100644 --- a/src/main/kotlin/pl/treksoft/kvision/form/range/RangeInput.kt +++ b/src/main/kotlin/pl/treksoft/kvision/form/range/RangeInput.kt @@ -30,6 +30,7 @@ import pl.treksoft.kvision.core.Widget import pl.treksoft.kvision.form.FormInput import pl.treksoft.kvision.form.InputSize import pl.treksoft.kvision.form.ValidationStatus +import pl.treksoft.kvision.state.ObservableState import pl.treksoft.kvision.utils.set internal const val DEFAULT_STEP = 1 @@ -47,12 +48,14 @@ internal const val DEFAULT_STEP = 1 open class RangeInput( value: Number? = null, min: Number = 0, max: Number = 100, step: Number = DEFAULT_STEP, classes: Set<String> = setOf() -) : Widget(classes + "form-control-range"), FormInput { +) : Widget(classes + "form-control-range"), FormInput, ObservableState<Number?> { + + protected val observers = mutableListOf<(Number?) -> Unit>() /** * Range input value. */ - var value by refreshOnUpdate(value ?: (min as Number?)) { refreshState() } + var value by refreshOnUpdate(value ?: (min as Number?)) { refreshState(); observers.forEach { ob -> ob(it) } } /** * The value attribute of the generated HTML input element. @@ -223,6 +226,16 @@ open class RangeInput( override fun blur() { getElementJQuery()?.blur() } + + override fun getState(): Number? = value + + override fun subscribe(observer: (Number?) -> Unit): () -> Unit { + observers += observer + observer(value) + return { + observers -= observer + } + } } /** |
