import { InputElement } from "./InputElement" import { Store, UIEventSource } from "../../Logic/UIEventSource" /** * @deprecated */ export default class InputElementMap<T, X> extends InputElement<X> { private readonly _inputElement: InputElement<T> private isSame: (x0: X, x1: X) => boolean private readonly fromX: (x: X) => T private readonly toX: (t: T) => X private readonly _value: UIEventSource<X> constructor( inputElement: InputElement<T>, isSame: (x0: X, x1: X) => boolean, toX: (t: T) => X, fromX: (x: X) => T, extraSources: Store<any>[] = [] ) { super() this.isSame = isSame this.fromX = fromX this.toX = toX this._inputElement = inputElement const self = this this._value = inputElement.GetValue().sync( (t) => { const newX = toX(t) const currentX = self.GetValue()?.data if (isSame(currentX, newX)) { return currentX } return newX }, extraSources, (x) => { return fromX(x) } ) } GetValue(): UIEventSource<X> { return this._value } IsValid(x: X): boolean { if (x === undefined) { return false } const t = this.fromX(x) if (t === undefined) { return false } return this._inputElement.IsValid(t) } protected InnerConstructElement(): HTMLElement { return this._inputElement.ConstructElement() } }