facilmap/frontend/src/map/leaflet-map/events.ts

31 wiersze
1.5 KiB
TypeScript

import { EventHandler, EventName, FindOnMapResult, SearchResult } from "facilmap-types";
import Vue from "vue";
import { SelectedItem } from "../../utils/selection";
export interface MapContextEvents {
"fm-import-file": []
"fm-open-selection": [selection: SelectedItem[]],
"fm-search-box-show-tab": [id: string, expand?: boolean];
"fm-route-set-queries": [queries: string[]];
"fm-route-set-from": [query: string, searchSuggestions?: SearchResult[], mapSuggestions?: FindOnMapResult[], selectedSuggestion?: SearchResult | FindOnMapResult];
"fm-route-add-via": [query: string, searchSuggestions?: SearchResult[], mapSuggestions?: FindOnMapResult[], selectedSuggestion?: SearchResult | FindOnMapResult];
"fm-route-set-to": [query: string, searchSuggestions?: SearchResult[], mapSuggestions?: FindOnMapResult[], selectedSuggestion?: SearchResult | FindOnMapResult];
}
export interface EventBus {
$on<E extends EventName<MapContextEvents>>(event: E, callback: EventHandler<MapContextEvents, E>): void;
$once<E extends EventName<MapContextEvents>>(event: E, callback: EventHandler<MapContextEvents, E>): void;
$off<E extends EventName<MapContextEvents>>(event: E, callback: EventHandler<MapContextEvents, E>): void;
$emit<E extends EventName<MapContextEvents>>(event: E, ...args: MapContextEvents[E]): void;
}
export function createEventBus(): EventBus {
const bus = new Vue();
return {
$on: (...args) => { bus.$on(...args); },
$once: (...args) => { bus.$once(...args); },
$off: (...args) => { bus.$off(...args); },
$emit: (...args) => { bus.$emit(...args); },
};
}