forked from MapComplete/MapComplete
		
	Fix broken variableInputElement
This commit is contained in:
		
							parent
							
								
									2979abdfcd
								
							
						
					
					
						commit
						36ac99c9ec
					
				
					 2 changed files with 36 additions and 9 deletions
				
			
		|  | @ -383,13 +383,13 @@ class MappedStore<TIn, T> extends Store<T> { | ||||||
|     private static readonly pass: () => {} |     private static readonly pass: () => {} | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|     constructor(upstream: Store<TIn>, f: (t: TIn) => T, extraStores: Store<any>[] = undefined,  |     constructor(upstream: Store<TIn>, f: (t: TIn) => T, extraStores: Store<any>[],  | ||||||
|                 upstreamListenerHandler: ListenerTracker<TIn>) { |                 upstreamListenerHandler: ListenerTracker<TIn>, initialState: T) { | ||||||
|         super(); |         super(); | ||||||
|         this._upstream = upstream; |         this._upstream = upstream; | ||||||
|         this._upstreamCallbackHandler = upstreamListenerHandler |         this._upstreamCallbackHandler = upstreamListenerHandler | ||||||
|         this._f = f; |         this._f = f; | ||||||
|         this._data = f(upstream.data) |         this._data = initialState | ||||||
|         this._upstreamPingCount = upstreamListenerHandler.pingCount |         this._upstreamPingCount = upstreamListenerHandler.pingCount | ||||||
|         this._extraStores = extraStores; |         this._extraStores = extraStores; | ||||||
|         this.registerCallbacksToUpstream() |         this.registerCallbacksToUpstream() | ||||||
|  | @ -436,10 +436,11 @@ class MappedStore<TIn, T> extends Store<T> { | ||||||
|             }) |             }) | ||||||
|         } |         } | ||||||
|         return new MappedStore( |         return new MappedStore( | ||||||
|             this._upstream, |             this, | ||||||
|             data => f(this._f(data)), |             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, |             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), |     public map<J>(f: ((t: T) => J), | ||||||
|                   extraSources: Store<any>[] = []): Store<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
									
										
									
									
									
								
							
							
						
						
									
										30
									
								
								test.ts
									
										
									
									
									
								
							|  | @ -1,6 +1,11 @@ | ||||||
| import {UIEventSource} from "./Logic/UIEventSource"; | import {UIEventSource} from "./Logic/UIEventSource"; | ||||||
| import TagRenderingQuestion from "./UI/Popup/TagRenderingQuestion"; | import TagRenderingQuestion from "./UI/Popup/TagRenderingQuestion"; | ||||||
| import TagRenderingConfig from "./Models/ThemeConfig/TagRenderingConfig"; | 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({ | const config = new TagRenderingConfig({ | ||||||
|     question: "What is the name?", |     question: "What is the name?", | ||||||
|  | @ -21,5 +26,26 @@ const tags = new UIEventSource<any>({ | ||||||
|     name: "current feature name" |     name: "current feature name" | ||||||
| }) | }) | ||||||
| 
 | 
 | ||||||
| new TagRenderingQuestion( | /*new TagRenderingQuestion( | ||||||
|     tags, config, undefined).AttachTo("maindiv") |     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) | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue