mobility-toolbox-js 3.0.0-beta.9 → 3.0.1-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/api/HttpAPI.d.ts +5 -16
  2. package/api/HttpAPI.js +0 -11
  3. package/api/RealtimeAPI.d.ts +221 -176
  4. package/api/RealtimeAPI.js +317 -258
  5. package/api/RoutingAPI.d.ts +21 -11
  6. package/api/RoutingAPI.js +17 -7
  7. package/api/StopsAPI.d.ts +20 -14
  8. package/api/StopsAPI.js +17 -11
  9. package/api/WebSocketAPI.d.ts +60 -66
  10. package/api/WebSocketAPI.js +164 -164
  11. package/api/index.js +1 -1
  12. package/api/typedefs.d.ts +0 -102
  13. package/api/typedefs.js +27 -42
  14. package/common/controls/StopFinderControlCommon.d.ts +12 -12
  15. package/common/controls/StopFinderControlCommon.js +31 -31
  16. package/common/index.d.ts +1 -1
  17. package/common/index.js +1 -1
  18. package/common/mixins/RealtimeLayerMixin.d.ts +157 -163
  19. package/common/mixins/RealtimeLayerMixin.js +401 -393
  20. package/common/styles/realtimeDefaultStyle.js +6 -6
  21. package/common/styles/realtimeHeadingStyle.js +5 -5
  22. package/common/typedefs.d.ts +13 -6
  23. package/common/typedefs.js +7 -1
  24. package/common/utils/compareDepartures.d.ts +2 -2
  25. package/common/utils/compareDepartures.js +2 -2
  26. package/common/utils/debounceWebsocketMessages.d.ts +1 -1
  27. package/common/utils/getMapGlCopyrights.d.ts +1 -1
  28. package/common/utils/getMapGlCopyrights.js +3 -3
  29. package/common/utils/getRealtimeModeSuffix.d.ts +1 -0
  30. package/common/utils/getRealtimeModeSuffix.js +1 -0
  31. package/common/utils/getVehiclePosition.d.ts +5 -4
  32. package/common/utils/getVehiclePosition.js +9 -3
  33. package/common/utils/renderTrajectories.d.ts +1 -1
  34. package/common/utils/renderTrajectories.js +6 -6
  35. package/common/utils/sortAndFilterDepartures.d.ts +1 -1
  36. package/common/utils/sortAndFilterDepartures.js +1 -1
  37. package/common/utils/sortByDelay.d.ts +2 -2
  38. package/common/utils/sortByDelay.js +5 -1
  39. package/maplibre/layers/Layer.d.ts +1 -1
  40. package/maplibre/layers/Layer.js +1 -1
  41. package/maplibre/layers/RealtimeLayer.d.ts +87 -66
  42. package/maplibre/layers/RealtimeLayer.js +30 -6
  43. package/maplibre/utils/getSourceCoordinates.js +5 -5
  44. package/mbt.js +20988 -13287
  45. package/mbt.js.map +4 -4
  46. package/mbt.min.js +61 -58
  47. package/mbt.min.js.map +4 -4
  48. package/ol/controls/RoutingControl.d.ts +82 -89
  49. package/ol/controls/RoutingControl.js +217 -219
  50. package/ol/controls/StopFinderControl.d.ts +3 -3
  51. package/ol/controls/StopFinderControl.js +2 -2
  52. package/ol/index.d.ts +1 -0
  53. package/ol/index.js +1 -0
  54. package/ol/layers/Layer.d.ts +101 -0
  55. package/ol/layers/Layer.js +25 -0
  56. package/ol/layers/MaplibreLayer.d.ts +121 -24
  57. package/ol/layers/MaplibreLayer.js +98 -27
  58. package/ol/layers/MaplibreStyleLayer.d.ts +93 -91
  59. package/ol/layers/MaplibreStyleLayer.js +281 -257
  60. package/ol/layers/RealtimeLayer.d.ts +119 -121
  61. package/ol/layers/RealtimeLayer.js +143 -134
  62. package/ol/layers/VectorLayer.d.ts +18 -0
  63. package/ol/layers/VectorLayer.js +32 -0
  64. package/ol/layers/index.d.ts +2 -0
  65. package/ol/layers/index.js +3 -0
  66. package/ol/mixins/MobilityLayerMixin.d.ts +32 -34
  67. package/ol/mixins/PropertiesLayerMixin.d.ts +60 -51
  68. package/ol/mixins/PropertiesLayerMixin.js +114 -79
  69. package/ol/mixins/index.d.ts +1 -0
  70. package/ol/mixins/index.js +2 -0
  71. package/ol/renderers/MaplibreLayerRenderer.d.ts +0 -20
  72. package/ol/renderers/MaplibreLayerRenderer.js +142 -114
  73. package/ol/renderers/MaplibreStyleLayerRenderer.d.ts +6 -6
  74. package/ol/renderers/MaplibreStyleLayerRenderer.js +20 -23
  75. package/ol/renderers/RealtimeLayerRenderer.d.ts +6 -6
  76. package/ol/renderers/RealtimeLayerRenderer.js +56 -51
  77. package/ol/utils/getFeatureInfoAtCoordinate.d.ts +1 -1
  78. package/ol/utils/getFeatureInfoAtCoordinate.js +11 -17
  79. package/package.json +31 -31
  80. package/setupTests.js +3 -4
  81. package/types/common.d.ts +55 -48
  82. package/types/index.d.ts +1 -1
  83. package/types/realtime.d.ts +91 -93
  84. package/types/routing.d.ts +60 -60
  85. package/types/stops.d.ts +62 -62
  86. package/ol/layers/MapGlLayer.d.ts +0 -144
  87. package/ol/layers/MapGlLayer.js +0 -144
@@ -0,0 +1,101 @@
1
+ import OLLayer from 'ol/layer/Layer';
2
+ import { MobilityLayerOptions } from '../mixins/MobilityLayerMixin';
3
+ declare const Layer_base: {
4
+ new (...args: any[]): {
5
+ olEventsKeys: import("ol/events").EventsKey[];
6
+ options?: import("../mixins/PropertiesLayerMixin").PropertiesLayerMixinOptions;
7
+ attachToMap(map: import("ol").Map): void;
8
+ detachFromMap(): void;
9
+ flat(): any[];
10
+ onChildrenChange(oldValue: OLLayer[]): void;
11
+ setMapInternal: ((map: import("ol").Map) => void) & ((map: import("ol").default | null) => void);
12
+ children: OLLayer<import("ol/source").Source, import("ol/renderer/Layer").default<any>>[];
13
+ get copyrights(): string;
14
+ set copyrights(newCopyrights: string | string[]);
15
+ disabled: boolean;
16
+ readonly group: string;
17
+ readonly hitTolerance: number;
18
+ readonly key: string;
19
+ readonly map: import("ol").Map;
20
+ readonly name: string;
21
+ olLayer: OLLayer;
22
+ parent: OLLayer<import("ol/source").Source, import("ol/renderer/Layer").default<any>>;
23
+ visible: boolean;
24
+ on: import("ol/layer/Layer").LayerOnSignature<import("ol/events").EventsKey>;
25
+ once: import("ol/layer/Layer").LayerOnSignature<import("ol/events").EventsKey>;
26
+ un: import("ol/layer/Layer").LayerOnSignature<void>;
27
+ render: (frameState: import("ol/Map").FrameState | null, target: HTMLElement) => HTMLElement | null;
28
+ getSource: () => import("ol/source").Source | null;
29
+ getRenderSource: () => import("ol/source").Source | null;
30
+ getFeatures: (pixel: import("ol/pixel").Pixel) => Promise<Array<import("ol/Feature").FeatureLike>>;
31
+ getData: (pixel: import("ol/pixel").Pixel) => Uint8ClampedArray | Uint8Array | Float32Array | DataView | null;
32
+ isVisible: (view?: import("ol").View | import("ol/View").ViewStateLayerStateExtent | undefined) => boolean;
33
+ getAttributions: (view?: import("ol").View | import("ol/View").ViewStateLayerStateExtent | undefined) => Array<string>;
34
+ unrender: () => void;
35
+ getDeclutter: () => string;
36
+ renderDeclutter: (frameState: import("ol/Map").FrameState, layerState: import("ol/layer/Layer").State) => void;
37
+ renderDeferred: (frameState: import("ol/Map").FrameState) => void;
38
+ getMapInternal: () => import("ol").default | null;
39
+ setMap: (map: import("ol").default | null) => void;
40
+ setSource: (source: import("ol/source").Source | null) => void;
41
+ getRenderer: () => import("ol/renderer/Layer").default<any> | null;
42
+ hasRenderer: () => boolean;
43
+ getBackground: () => import("ol/layer/Base").BackgroundColor | false;
44
+ getClassName: () => string;
45
+ getLayerState: (managed?: boolean | undefined) => import("ol/layer/Layer").State;
46
+ getLayersArray: (array?: import("ol/layer/Layer").default<import("ol/source").default, import("ol/renderer/Layer").default<any>>[] | undefined) => Array<import("ol/layer/Layer").default>;
47
+ getLayerStatesArray: (states?: import("ol/layer/Layer").State[] | undefined) => Array<import("ol/layer/Layer").State>;
48
+ getExtent: () => import("ol/extent").Extent | undefined;
49
+ getMaxResolution: () => number;
50
+ getMinResolution: () => number;
51
+ getMinZoom: () => number;
52
+ getMaxZoom: () => number;
53
+ getOpacity: () => number;
54
+ getSourceState: () => import("ol/source/Source").State;
55
+ getVisible: () => boolean;
56
+ getZIndex: () => number | undefined;
57
+ setBackground: (background?: import("ol/layer/Base").BackgroundColor | undefined) => void;
58
+ setExtent: (extent: import("ol/extent").Extent | undefined) => void;
59
+ setMaxResolution: (maxResolution: number) => void;
60
+ setMinResolution: (minResolution: number) => void;
61
+ setMaxZoom: (maxZoom: number) => void;
62
+ setMinZoom: (minZoom: number) => void;
63
+ setOpacity: (opacity: number) => void;
64
+ setVisible: (visible: boolean) => void;
65
+ setZIndex: (zindex: number) => void;
66
+ get: (key: string) => any;
67
+ getKeys: () => Array<string>;
68
+ getProperties: () => {
69
+ [x: string]: any;
70
+ };
71
+ getPropertiesInternal: () => {
72
+ [x: string]: any;
73
+ } | null;
74
+ hasProperties: () => boolean;
75
+ notify: (key: string, oldValue: any) => void;
76
+ addChangeListener: (key: string, listener: import("ol/events").Listener) => void;
77
+ removeChangeListener: (key: string, listener: import("ol/events").Listener) => void;
78
+ set: (key: string, value: any, silent?: boolean | undefined) => void;
79
+ setProperties: (values: {
80
+ [x: string]: any;
81
+ }, silent?: boolean | undefined) => void;
82
+ unset: (key: string, silent?: boolean | undefined) => void;
83
+ changed: () => void;
84
+ getRevision: () => number;
85
+ addEventListener: (type: string, listener: import("ol/events").Listener) => void;
86
+ dispatchEvent: (event: import("ol/events/Event").default | string) => boolean | undefined;
87
+ getListeners: (type: string) => Array<import("ol/events").Listener> | undefined;
88
+ hasListener: (type?: string | undefined) => boolean;
89
+ removeEventListener: (type: string, listener: import("ol/events").Listener) => void;
90
+ dispose: () => void;
91
+ };
92
+ } & typeof OLLayer;
93
+ /**
94
+ * An OpenLayers layer here only for backward compatibility v2.
95
+ * @deprecated Use an OpenLayers Layer instead.
96
+ */
97
+ declare class Layer extends Layer_base {
98
+ constructor(options: MobilityLayerOptions);
99
+ clone(newOptions: MobilityLayerOptions): Layer;
100
+ }
101
+ export default Layer;
@@ -0,0 +1,25 @@
1
+ import debounce from 'lodash.debounce';
2
+ import OLLayer from 'ol/layer/Layer';
3
+ import MobilityLayerMixin from '../mixins/MobilityLayerMixin';
4
+ let deprecated = () => { };
5
+ if (typeof window !== 'undefined' &&
6
+ new URLSearchParams(window.location.search).get('deprecated')) {
7
+ deprecated = debounce((message) => {
8
+ // eslint-disable-next-line no-console
9
+ console.warn(message);
10
+ }, 1000);
11
+ }
12
+ /**
13
+ * An OpenLayers layer here only for backward compatibility v2.
14
+ * @deprecated Use an OpenLayers Layer instead.
15
+ */
16
+ class Layer extends MobilityLayerMixin(OLLayer) {
17
+ constructor(options) {
18
+ super(options);
19
+ deprecated('Layer is deprecated. Use an OpenLayers Layer instead.');
20
+ }
21
+ clone(newOptions) {
22
+ return new Layer(Object.assign(Object.assign({}, (this.options || {})), (newOptions || {})));
23
+ }
24
+ }
25
+ export default Layer;
@@ -1,11 +1,106 @@
1
- import { Map, MapOptions } from 'maplibre-gl';
2
- import MapGlLayer, { MapGlLayerOptions } from './MapGlLayer';
3
- import MaplibreLayerRenderer from '../renderers/MaplibreLayerRenderer';
4
- export type MaplibreLayerOptions = MapGlLayerOptions & {
5
- mapOptions?: MapOptions;
6
- };
1
+ import { MapLibreLayer } from '@geoblocks/ol-maplibre-layer';
2
+ import OlMap from 'ol/Map';
3
+ import { MobilityLayerOptions } from '../mixins/MobilityLayerMixin';
4
+ import type { MapLibreLayerOptions, MapLibreOptions } from '@geoblocks/ol-maplibre-layer/lib/types/MapLibreLayer';
5
+ export type MaplibreLayerOptions = {
6
+ apiKey?: string;
7
+ apiKeyName?: string;
8
+ mapLibreOptions?: MapLibreOptions;
9
+ style?: maplibregl.StyleSpecification | null | string;
10
+ url?: string;
11
+ } & MapLibreLayerOptions & MobilityLayerOptions;
12
+ declare const MaplibreLayer_base: {
13
+ new (...args: any[]): {
14
+ olEventsKeys: import("ol/events").EventsKey[];
15
+ options?: import("../mixins/PropertiesLayerMixin").PropertiesLayerMixinOptions;
16
+ attachToMap(map: OlMap): void;
17
+ detachFromMap(): void;
18
+ flat(): any[];
19
+ onChildrenChange(oldValue: import("ol/layer").Layer[]): void;
20
+ setMapInternal: ((map: OlMap) => void) & ((map: import("ol/Map").default | null) => void);
21
+ children: import("ol/layer").Layer<import("ol/source").Source, import("ol/renderer/Layer").default<any>>[];
22
+ get copyrights(): string;
23
+ set copyrights(newCopyrights: string | string[]);
24
+ disabled: boolean;
25
+ readonly group: string;
26
+ readonly hitTolerance: number;
27
+ readonly key: string;
28
+ readonly map: OlMap;
29
+ readonly name: string;
30
+ olLayer: import("ol/layer").Layer;
31
+ parent: import("ol/layer").Layer<import("ol/source").Source, import("ol/renderer/Layer").default<any>>;
32
+ visible: boolean;
33
+ on: import("ol/layer/Layer").LayerOnSignature<import("ol/events").EventsKey>;
34
+ once: import("ol/layer/Layer").LayerOnSignature<import("ol/events").EventsKey>;
35
+ un: import("ol/layer/Layer").LayerOnSignature<void>;
36
+ render: (frameState: import("ol/Map").FrameState | null, target: HTMLElement) => HTMLElement | null;
37
+ getSource: () => import("ol/source").Source | null;
38
+ getRenderSource: () => import("ol/source").Source | null;
39
+ getFeatures: (pixel: import("ol/pixel").Pixel) => Promise<Array<import("ol/Feature").FeatureLike>>;
40
+ getData: (pixel: import("ol/pixel").Pixel) => Uint8ClampedArray | Uint8Array | Float32Array | DataView | null;
41
+ isVisible: (view?: import("ol").View | import("ol/View").ViewStateLayerStateExtent | undefined) => boolean;
42
+ getAttributions: (view?: import("ol").View | import("ol/View").ViewStateLayerStateExtent | undefined) => Array<string>;
43
+ unrender: () => void;
44
+ getDeclutter: () => string;
45
+ renderDeclutter: (frameState: import("ol/Map").FrameState, layerState: import("ol/layer/Layer").State) => void;
46
+ renderDeferred: (frameState: import("ol/Map").FrameState) => void;
47
+ getMapInternal: () => import("ol/Map").default | null;
48
+ setMap: (map: import("ol/Map").default | null) => void;
49
+ setSource: (source: import("ol/source").Source | null) => void;
50
+ getRenderer: () => import("ol/renderer/Layer").default<any> | null;
51
+ hasRenderer: () => boolean;
52
+ getBackground: () => import("ol/layer/Base").BackgroundColor | false;
53
+ getClassName: () => string;
54
+ getLayerState: (managed?: boolean | undefined) => import("ol/layer/Layer").State;
55
+ getLayersArray: (array?: import("ol/layer").default<import("ol/source").default, import("ol/renderer/Layer").default<any>>[] | undefined) => Array<import("ol/layer").default>;
56
+ getLayerStatesArray: (states?: import("ol/layer/Layer").State[] | undefined) => Array<import("ol/layer/Layer").State>;
57
+ getExtent: () => import("ol/extent").Extent | undefined;
58
+ getMaxResolution: () => number;
59
+ getMinResolution: () => number;
60
+ getMinZoom: () => number;
61
+ getMaxZoom: () => number;
62
+ getOpacity: () => number;
63
+ getSourceState: () => import("ol/source/Source").State;
64
+ getVisible: () => boolean;
65
+ getZIndex: () => number | undefined;
66
+ setBackground: (background?: import("ol/layer/Base").BackgroundColor | undefined) => void;
67
+ setExtent: (extent: import("ol/extent").Extent | undefined) => void;
68
+ setMaxResolution: (maxResolution: number) => void;
69
+ setMinResolution: (minResolution: number) => void;
70
+ setMaxZoom: (maxZoom: number) => void;
71
+ setMinZoom: (minZoom: number) => void;
72
+ setOpacity: (opacity: number) => void;
73
+ setVisible: (visible: boolean) => void;
74
+ setZIndex: (zindex: number) => void;
75
+ get: (key: string) => any;
76
+ getKeys: () => Array<string>;
77
+ getProperties: () => {
78
+ [x: string]: any;
79
+ };
80
+ getPropertiesInternal: () => {
81
+ [x: string]: any;
82
+ } | null;
83
+ hasProperties: () => boolean;
84
+ notify: (key: string, oldValue: any) => void;
85
+ addChangeListener: (key: string, listener: import("ol/events").Listener) => void;
86
+ removeChangeListener: (key: string, listener: import("ol/events").Listener) => void;
87
+ set: (key: string, value: any, silent?: boolean | undefined) => void;
88
+ setProperties: (values: {
89
+ [x: string]: any;
90
+ }, silent?: boolean | undefined) => void;
91
+ unset: (key: string, silent?: boolean | undefined) => void;
92
+ changed: () => void;
93
+ getRevision: () => number;
94
+ addEventListener: (type: string, listener: import("ol/events").Listener) => void;
95
+ dispatchEvent: (event: import("ol/events/Event").default | string) => boolean | undefined;
96
+ getListeners: (type: string) => Array<import("ol/events").Listener> | undefined;
97
+ hasListener: (type?: string | undefined) => boolean;
98
+ removeEventListener: (type: string, listener: import("ol/events").Listener) => void;
99
+ dispose: () => void;
100
+ };
101
+ } & typeof MapLibreLayer;
7
102
  /**
8
- * This layer is meant to facilitate the use of the geOps Maps api in an OpenLayers map using Maplibre.
103
+ * An OpenLayers layer able to display data from the [geOps Maps API](https://developer.geops.io/apis/maps).
9
104
  *
10
105
  * @example
11
106
  * import { MaplibreLayer } from 'mobility-toolbox-js/ol';
@@ -13,7 +108,7 @@ export type MaplibreLayerOptions = MapGlLayerOptions & {
13
108
  * const layer = new MaplibreLayer({
14
109
  * apiKey: 'yourApiKey',
15
110
  * // apiKeyName: 'key',
16
- * // mapOptions: {
111
+ * // mapLibreOptions: {
17
112
  * // interactive: false,
18
113
  * // trackResize: false,
19
114
  * // attributionControl: false,
@@ -25,39 +120,41 @@ export type MaplibreLayerOptions = MapGlLayerOptions & {
25
120
  * // url: 'https://maps.geops.io',
26
121
  * });
27
122
  *
28
- * @classproperty {maplibregl.Map} maplibreMap - The Maplibre map object. Readonly.
29
- * @classproperty {maplibregl.QueryRenderedFeaturesOptions} queryRenderedFeaturesOptions - Options used when we query features using map.getFeaturesAtPixel().
123
+ * @classproperty {maplibregl.Map} mapLibreMap - The Maplibre map object. Readonly.
30
124
  * @classproperty {string} style - geOps Maps api style.
31
125
  * @extends {ol/layer/Layer~Layer}
32
126
  * @public
33
127
  */
34
- export default class MaplibreLayer extends MapGlLayer {
35
- options?: MaplibreLayerOptions;
36
- /** @private */
37
- get maplibreMap(): maplibregl.Map | undefined;
128
+ declare class MaplibreLayer extends MaplibreLayer_base {
38
129
  /**
39
130
  * Constructor.
40
131
  *
41
132
  * @param {MaplibreLayerOptions} options
42
133
  * @param {string} options.apiKey Access key for [geOps apis](https://developer.geops.io/).
43
- * @param {string} [options.apiKeyName="key"] The geOps Maps api key name.
44
- * @param {maplibregl.MapOptions} [options.mapOptions={ interactive: false, trackResize: false, attributionControl: false }] Maplibre map options.
45
- * @param {string} [options.style="travic_v2"] The geOps Maps api style.
46
- * @param {string} [options.url="https://maps.geops.io"] The geOps Maps api url.
134
+ * @param {string} [options.apiKeyName="key"] The geOps Maps API key name.
135
+ * @param {maplibregl.MapOptions} [options.mapLibreOptions={ interactive: false, trackResize: false, attributionControl: false }] Maplibre map options.
136
+ * @param {string} [options.style="travic_v2"] The geOps Maps API style.
137
+ * @param {string} [options.url="https://maps.geops.io"] The geOps Maps API url.
47
138
  */
48
139
  constructor(options: MaplibreLayerOptions);
49
140
  /**
50
- * @private
51
- */
52
- createRenderer(): MaplibreLayerRenderer;
53
- /**
54
- * @private
141
+ * Initialize the layer and listen to feature clicks.
142
+ * @param {ol/Map~Map} map
55
143
  */
56
- createMap(options: MapOptions): Map;
144
+ attachToMap(map: OlMap): void;
57
145
  /**
58
146
  * Create a copy of the MaplibreLayer.
59
147
  * @param {MaplibreLayerOptions} newOptions Options to override
60
148
  * @return {MaplibreLayer} A MaplibreLayer layer
61
149
  */
62
150
  clone(newOptions: MaplibreLayerOptions): MaplibreLayer;
151
+ getStyle(): string;
152
+ updateMaplibreMap(): void;
153
+ get maplibreMap(): maplibregl.Map | undefined;
154
+ get mbMap(): maplibregl.Map | undefined;
155
+ get style(): string;
156
+ set style(newValue: string);
157
+ get url(): string;
158
+ set url(newValue: string);
63
159
  }
160
+ export default MaplibreLayer;
@@ -1,8 +1,22 @@
1
- import { Map } from 'maplibre-gl';
2
- import MapGlLayer from './MapGlLayer';
3
- import MaplibreLayerRenderer from '../renderers/MaplibreLayerRenderer';
1
+ import { MapLibreLayer } from '@geoblocks/ol-maplibre-layer';
2
+ import debounce from 'lodash.debounce';
3
+ import { getUrlWithParams } from '../../common/utils';
4
+ import MobilityLayerMixin from '../mixins/MobilityLayerMixin';
5
+ const buildStyleUrl = (url, style, apiKey, apiKeyName) => {
6
+ return getUrlWithParams(`${url}/styles/${style}/style.json`, {
7
+ [apiKeyName]: apiKey,
8
+ }).toString();
9
+ };
10
+ let deprecated = () => { };
11
+ if (typeof window !== 'undefined' &&
12
+ new URLSearchParams(window.location.search).get('deprecated')) {
13
+ deprecated = debounce((message) => {
14
+ // eslint-disable-next-line no-console
15
+ console.warn(message);
16
+ }, 1000);
17
+ }
4
18
  /**
5
- * This layer is meant to facilitate the use of the geOps Maps api in an OpenLayers map using Maplibre.
19
+ * An OpenLayers layer able to display data from the [geOps Maps API](https://developer.geops.io/apis/maps).
6
20
  *
7
21
  * @example
8
22
  * import { MaplibreLayer } from 'mobility-toolbox-js/ol';
@@ -10,7 +24,7 @@ import MaplibreLayerRenderer from '../renderers/MaplibreLayerRenderer';
10
24
  * const layer = new MaplibreLayer({
11
25
  * apiKey: 'yourApiKey',
12
26
  * // apiKeyName: 'key',
13
- * // mapOptions: {
27
+ * // mapLibreOptions: {
14
28
  * // interactive: false,
15
29
  * // trackResize: false,
16
30
  * // attributionControl: false,
@@ -22,43 +36,54 @@ import MaplibreLayerRenderer from '../renderers/MaplibreLayerRenderer';
22
36
  * // url: 'https://maps.geops.io',
23
37
  * });
24
38
  *
25
- * @classproperty {maplibregl.Map} maplibreMap - The Maplibre map object. Readonly.
26
- * @classproperty {maplibregl.QueryRenderedFeaturesOptions} queryRenderedFeaturesOptions - Options used when we query features using map.getFeaturesAtPixel().
39
+ * @classproperty {maplibregl.Map} mapLibreMap - The Maplibre map object. Readonly.
27
40
  * @classproperty {string} style - geOps Maps api style.
28
41
  * @extends {ol/layer/Layer~Layer}
29
42
  * @public
30
43
  */
31
- export default class MaplibreLayer extends MapGlLayer {
32
- /** @private */
33
- get maplibreMap() {
34
- return this.mbMap;
35
- }
44
+ class MaplibreLayer extends MobilityLayerMixin(MapLibreLayer) {
36
45
  /**
37
46
  * Constructor.
38
47
  *
39
48
  * @param {MaplibreLayerOptions} options
40
49
  * @param {string} options.apiKey Access key for [geOps apis](https://developer.geops.io/).
41
- * @param {string} [options.apiKeyName="key"] The geOps Maps api key name.
42
- * @param {maplibregl.MapOptions} [options.mapOptions={ interactive: false, trackResize: false, attributionControl: false }] Maplibre map options.
43
- * @param {string} [options.style="travic_v2"] The geOps Maps api style.
44
- * @param {string} [options.url="https://maps.geops.io"] The geOps Maps api url.
50
+ * @param {string} [options.apiKeyName="key"] The geOps Maps API key name.
51
+ * @param {maplibregl.MapOptions} [options.mapLibreOptions={ interactive: false, trackResize: false, attributionControl: false }] Maplibre map options.
52
+ * @param {string} [options.style="travic_v2"] The geOps Maps API style.
53
+ * @param {string} [options.url="https://maps.geops.io"] The geOps Maps API url.
45
54
  */
46
55
  constructor(options) {
47
- super(Object.assign({}, options));
48
- }
49
- /**
50
- * @private
51
- */
52
- createRenderer() {
53
- return new MaplibreLayerRenderer(this);
56
+ const newOptions = Object.assign(Object.assign({ apiKeyName: 'key', style: 'travic_v2', url: 'https://maps.geops.io' }, (options || {})), { mapLibreOptions: Object.assign({}, (options.mapLibreOptions || {})) });
57
+ if (!newOptions.mapLibreOptions.style &&
58
+ newOptions.apiKey &&
59
+ newOptions.style &&
60
+ typeof newOptions.style === 'string') {
61
+ newOptions.mapLibreOptions.style = buildStyleUrl(newOptions.url, newOptions.style, newOptions.apiKey, newOptions.apiKeyName);
62
+ }
63
+ super(newOptions);
54
64
  }
55
65
  /**
56
- * @private
66
+ * Initialize the layer and listen to feature clicks.
67
+ * @param {ol/Map~Map} map
57
68
  */
58
- // eslint-disable-next-line class-methods-use-this
59
- createMap(options) {
60
- return new Map(options);
69
+ attachToMap(map) {
70
+ super.attachToMap(map);
71
+ const updateMaplibreMapDebounced = debounce(this.updateMaplibreMap.bind(this), 150);
72
+ updateMaplibreMapDebounced();
73
+ this.olEventsKeys.push(this.on('propertychange', (evt) => {
74
+ if (/(url|style)/.test(evt.key)) {
75
+ updateMaplibreMapDebounced();
76
+ }
77
+ }));
61
78
  }
79
+ // get queryRenderedFeaturesOptions(): maplibregl.QueryRenderedFeaturesOptions {
80
+ // return this.get('queryRenderedFeaturesOptions');
81
+ // }
82
+ // set queryRenderedFeaturesOptions(
83
+ // newValue: maplibregl.QueryRenderedFeaturesOptions,
84
+ // ) {
85
+ // this.set('queryRenderedFeaturesOptions', newValue);
86
+ // }
62
87
  /**
63
88
  * Create a copy of the MaplibreLayer.
64
89
  * @param {MaplibreLayerOptions} newOptions Options to override
@@ -67,4 +92,50 @@ export default class MaplibreLayer extends MapGlLayer {
67
92
  clone(newOptions) {
68
93
  return new MaplibreLayer(Object.assign(Object.assign({}, (this.options || {})), (newOptions || {})));
69
94
  }
95
+ getStyle() {
96
+ // If the style is a complete style object, use it directly.
97
+ if (this.style &&
98
+ typeof this.style === 'object' &&
99
+ this.style.name &&
100
+ this.style.version) {
101
+ return this.style;
102
+ }
103
+ // If the url set is already a complete style url, use it directly.
104
+ if (this.url.includes('style.json')) {
105
+ return this.url;
106
+ }
107
+ /// Otherwise build the complete style url.
108
+ return buildStyleUrl(this.url, this.style, this.get('apiKey'), this.get('apiKeyName'));
109
+ }
110
+ updateMaplibreMap() {
111
+ var _a;
112
+ try {
113
+ (_a = this.mapLibreMap) === null || _a === void 0 ? void 0 : _a.setStyle(this.getStyle(), { diff: false });
114
+ }
115
+ catch (e) {
116
+ // eslint-disable-next-line no-console
117
+ console.error('Error while updating MaplibreMap', e);
118
+ }
119
+ }
120
+ get maplibreMap() {
121
+ deprecated('MaplibreLayer.maplibreMap is deprecated. Use layer.mapLibreMap.');
122
+ return this.mapLibreMap;
123
+ }
124
+ get mbMap() {
125
+ deprecated('MaplibreLayer.mbMap is deprecated. Use layer.maplibreMap.');
126
+ return this.maplibreMap;
127
+ }
128
+ get style() {
129
+ return this.get('style');
130
+ }
131
+ set style(newValue) {
132
+ this.set('style', newValue);
133
+ }
134
+ get url() {
135
+ return this.get('url');
136
+ }
137
+ set url(newValue) {
138
+ this.set('url', newValue);
139
+ }
70
140
  }
141
+ export default MaplibreLayer;