Fix broken variableInputElement

This commit is contained in:
pietervdvn 2022-06-09 02:55:14 +02:00
parent 2979abdfcd
commit 36ac99c9ec
2 changed files with 36 additions and 9 deletions

View file

@ -383,13 +383,13 @@ class MappedStore<TIn, T> extends Store<T> {
private static readonly pass: () => {}
constructor(upstream: Store<TIn>, f: (t: TIn) => T, extraStores: Store<any>[] = undefined,
upstreamListenerHandler: ListenerTracker<TIn>) {
constructor(upstream: Store<TIn>, f: (t: TIn) => T, extraStores: Store<any>[],
upstreamListenerHandler: ListenerTracker<TIn>, initialState: T) {
super();
this._upstream = upstream;
this._upstreamCallbackHandler = upstreamListenerHandler
this._f = f;
this._data = f(upstream.data)
this._data = initialState
this._upstreamPingCount = upstreamListenerHandler.pingCount
this._extraStores = extraStores;
this.registerCallbacksToUpstream()
@ -436,10 +436,11 @@ class MappedStore<TIn, T> extends Store<T> {
})
}
return new MappedStore(
this._upstream,
data => f(this._f(data)),
this,
f, // we could fuse the functions here (e.g. data => f(this._f(data), but this might result in _f being calculated multiple times, breaking things
stores,
this._upstreamCallbackHandler
this._callbacks,
f(this.data)
);
}
@ -669,7 +670,7 @@ export class UIEventSource<T> extends Store<T> {
*/
public map<J>(f: ((t: T) => J),
extraSources: Store<any>[] = []): Store<J> {
return new MappedStore(this, f, extraSources, this._callbacks);
return new MappedStore(this, f, extraSources, this._callbacks, f(this.data));
}
/**

30
test.ts
View file

@ -1,6 +1,11 @@
import {UIEventSource} from "./Logic/UIEventSource";
import TagRenderingQuestion from "./UI/Popup/TagRenderingQuestion";
import TagRenderingConfig from "./Models/ThemeConfig/TagRenderingConfig";
import {RadioButton} from "./UI/Input/RadioButton";
import {FixedInputElement} from "./UI/Input/FixedInputElement";
import {VariableUiElement} from "./UI/Base/VariableUIElement";
import ValidatedTextField from "./UI/Input/ValidatedTextField";
import VariableInputElement from "./UI/Input/VariableInputElement";
const config = new TagRenderingConfig({
question: "What is the name?",
@ -21,5 +26,26 @@ const tags = new UIEventSource<any>({
name: "current feature name"
})
new TagRenderingQuestion(
tags, config, undefined).AttachTo("maindiv")
/*new TagRenderingQuestion(
tags, config, undefined).AttachTo("maindiv")*/
const options = new UIEventSource<string[]>([])
const rb =
new VariableInputElement(
options.map(options => {
console.trace("Construction an input element for", options)
return new RadioButton(
[
...options.map(o => new FixedInputElement(o,o)),
new FixedInputElement<string>("abc", "abc"),
ValidatedTextField.ForType().ConstructInputElement()
])
}
)
)
rb.AttachTo("maindiv")
rb.GetValue().addCallbackAndRun(v => console.log("Current value is",v))
new VariableUiElement(rb.GetValue()).AttachTo("extradiv")
window.setTimeout(() => {options.setData(["xyz","foo","bar"])},10000)