MapComplete/src/UI/SpecialVisualization.ts

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

129 lines
5 KiB
TypeScript
Raw Normal View History

2023-09-27 22:21:35 +02:00
import { Store, UIEventSource } from "../Logic/UIEventSource"
import BaseUIElement from "./BaseUIElement"
import LayoutConfig from "../Models/ThemeConfig/LayoutConfig"
import { FeatureSource, IndexedFeatureSource, WritableFeatureSource } from "../Logic/FeatureSource/FeatureSource"
2023-09-27 22:21:35 +02:00
import { OsmConnection } from "../Logic/Osm/OsmConnection"
import { Changes } from "../Logic/Osm/Changes"
import { ExportableMap, MapProperties } from "../Models/MapProperties"
import LayerState from "../Logic/State/LayerState"
2024-05-08 21:46:33 +02:00
import { Feature, Geometry, Point, Polygon } from "geojson"
2023-09-27 22:21:35 +02:00
import FullNodeDatabaseSource from "../Logic/FeatureSource/TiledFeatureSource/FullNodeDatabaseSource"
import { MangroveIdentity } from "../Logic/Web/MangroveReviews"
import { GeoIndexedStoreForLayer } from "../Logic/FeatureSource/Actors/GeoIndexedStore"
import LayerConfig from "../Models/ThemeConfig/LayerConfig"
import FeatureSwitchState from "../Logic/State/FeatureSwitchState"
import { MenuState } from "../Models/MenuState"
import OsmObjectDownloader from "../Logic/Osm/OsmObjectDownloader"
import { ImageUploadManager } from "../Logic/ImageProviders/ImageUploadManager"
2023-11-22 19:39:19 +01:00
import FavouritesFeatureSource from "../Logic/FeatureSource/Sources/FavouritesFeatureSource"
import { ProvidedImage } from "../Logic/ImageProviders/ImageProvider"
import GeoLocationHandler from "../Logic/Actors/GeoLocationHandler"
import { SummaryTileSourceRewriter } from "../Logic/FeatureSource/TiledFeatureSource/SummaryTileSource"
import LayoutSource from "../Logic/FeatureSource/Sources/LayoutSource"
import { Map as MlMap } from "maplibre-gl"
import ShowDataLayer from "./Map/ShowDataLayer"
2024-07-19 11:37:20 +02:00
import { CombinedFetcher } from "../Logic/Web/NearbyImagesSearch"
2024-08-30 02:18:29 +02:00
import SearchState from "../Logic/State/SearchState"
import UserRelatedState, { OptionallySyncedHistory } from "../Logic/State/UserRelatedState"
import GeocodeResult from "./Search/GeocodeResult.svelte"
import FeaturePropertiesStore from "../Logic/FeatureSource/Actors/FeaturePropertiesStore"
2023-03-28 05:13:48 +02:00
/**
* The state needed to render a special Visualisation.
*/
export interface SpecialVisualizationState {
2023-09-27 22:21:35 +02:00
readonly guistate: MenuState
readonly layout: LayoutConfig
readonly featureSwitches: FeatureSwitchState
readonly layerState: LayerState
readonly featureProperties: FeaturePropertiesStore
2023-09-27 22:21:35 +02:00
readonly indexedFeatures: IndexedFeatureSource & LayoutSource
2023-09-27 22:21:35 +02:00
/**
* Some features will create a new element that should be displayed.
* These can be injected by appending them to this featuresource (and pinging it)
*/
readonly newFeatures: WritableFeatureSource
readonly historicalUserLocations: WritableFeatureSource<Feature<Point>>
readonly osmConnection: OsmConnection
readonly featureSwitchUserbadge: Store<boolean>
readonly featureSwitchIsTesting: Store<boolean>
readonly changes: Changes
readonly osmObjectDownloader: OsmObjectDownloader
/**
* State of the main map
*/
readonly mapProperties: MapProperties & ExportableMap
readonly selectedElement: UIEventSource<Feature>
2024-05-08 21:46:33 +02:00
readonly currentView: FeatureSource<Feature<Polygon>>
2023-11-22 19:39:19 +01:00
readonly favourites: FavouritesFeatureSource
2023-09-27 22:21:35 +02:00
/**
* If data is currently being fetched from external sources
*/
readonly dataIsLoading: Store<boolean>
/**
* Only needed for 'ReplaceGeometryAction'
*/
readonly fullNodeDatabase?: FullNodeDatabaseSource
readonly perLayer: ReadonlyMap<string, GeoIndexedStoreForLayer>
readonly userRelatedState: UserRelatedState
2023-09-27 22:21:35 +02:00
readonly imageUploadManager: ImageUploadManager
readonly previewedImage: UIEventSource<ProvidedImage>
2024-07-19 11:37:20 +02:00
readonly nearbyImageSearcher: CombinedFetcher
readonly geolocation: GeoLocationHandler
readonly geocodedImages : UIEventSource<Feature[]>
2024-08-30 02:18:29 +02:00
readonly searchState: SearchState
2024-08-21 14:06:42 +02:00
2024-08-23 02:16:24 +02:00
getMatchingLayer(properties: Record<string, string>);
showCurrentLocationOn(map: Store<MlMap>): ShowDataLayer
2024-08-23 02:16:24 +02:00
reportError(message: string): Promise<void>
2023-03-28 05:13:48 +02:00
}
export interface SpecialVisualization {
2023-09-27 22:21:35 +02:00
readonly funcName: string
readonly docs: string | BaseUIElement
readonly example?: string
2024-01-14 22:24:35 +01:00
readonly needsUrls?: string[] | ((args: string[]) => string | string[])
2023-09-27 22:21:35 +02:00
/**
* Indicates that this special visualisation will make requests to the 'alLNodesDatabase' and that it thus should be included
*/
readonly needsNodeDatabase?: boolean
readonly args: {
name: string
defaultValue?: string
doc: string
required?: false | boolean
}[]
readonly getLayerDependencies?: (argument: string[]) => string[]
structuredExamples?(): { feature: Feature<Geometry, Record<string, string>>; args: string[] }[]
constr(
state: SpecialVisualizationState,
tagSource: UIEventSource<Record<string, string>>,
argument: string[],
feature: Feature,
layer: LayerConfig
): BaseUIElement
}
2023-03-29 17:21:20 +02:00
export type RenderingSpecification =
2023-09-27 22:21:35 +02:00
| string
| {
2024-08-23 02:16:24 +02:00
func: SpecialVisualization
args: string[]
style: string
}