43 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			43 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import { InputElement } from "./InputElement"
 | 
						|
import { UIEventSource } from "../../Logic/UIEventSource"
 | 
						|
import BaseUIElement from "../BaseUIElement"
 | 
						|
import { Translation } from "../i18n/Translation"
 | 
						|
import { SubstitutedTranslation } from "../SubstitutedTranslation"
 | 
						|
import FeaturePipelineState from "../../Logic/State/FeaturePipelineState"
 | 
						|
 | 
						|
export default class InputElementWrapper<T> extends InputElement<T> {
 | 
						|
    private readonly _inputElement: InputElement<T>
 | 
						|
    private readonly _renderElement: BaseUIElement
 | 
						|
 | 
						|
    constructor(
 | 
						|
        inputElement: InputElement<T>,
 | 
						|
        translation: Translation,
 | 
						|
        key: string,
 | 
						|
        tags: UIEventSource<any>,
 | 
						|
        state: FeaturePipelineState
 | 
						|
    ) {
 | 
						|
        super()
 | 
						|
        this._inputElement = inputElement
 | 
						|
        const mapping = new Map<string, BaseUIElement>()
 | 
						|
 | 
						|
        mapping.set(key, inputElement)
 | 
						|
 | 
						|
        // Bit of a hack: the SubstitutedTranslation expects a special rendering, but those are formatted '{key()}' instead of '{key}', so we substitute it first
 | 
						|
        translation = translation.OnEveryLanguage((txt) =>
 | 
						|
            txt.replace("{" + key + "}", "{" + key + "()}")
 | 
						|
        )
 | 
						|
        this._renderElement = new SubstitutedTranslation(translation, tags, state, mapping)
 | 
						|
    }
 | 
						|
 | 
						|
    GetValue(): UIEventSource<T> {
 | 
						|
        return this._inputElement.GetValue()
 | 
						|
    }
 | 
						|
 | 
						|
    IsValid(t: T): boolean {
 | 
						|
        return this._inputElement.IsValid(t)
 | 
						|
    }
 | 
						|
 | 
						|
    protected InnerConstructElement(): HTMLElement {
 | 
						|
        return this._renderElement.ConstructElement()
 | 
						|
    }
 | 
						|
}
 |