MapComplete/src/Logic/FeatureSource/Sources/IfVisibleFeatureSource.ts

39 lines
1 KiB
TypeScript
Raw Normal View History

import { FeatureSource } from "../FeatureSource"
import { Feature } from "geojson"
import { Store, UIEventSource } from "../../UIEventSource"
export class IfVisibleFeatureSource<T extends Feature> implements FeatureSource<T> {
private readonly _features: UIEventSource<T[]> = new UIEventSource<T[]>([])
public readonly features: Store<T[]> = this._features
constructor(upstream: FeatureSource<T>, visible: Store<boolean>) {
let dirty = false
upstream.features.addCallbackAndRun(features => {
if (!visible.data) {
console.log(">>> not writing data as not visible")
dirty = true
return
}
this._features.set(features)
dirty = false
})
visible.addCallbackAndRun(isVisible => {
if (isVisible && dirty) {
this._features.set(upstream.features.data)
dirty = false
}
if (!visible) {
this._features.set([])
}
})
}
}