@mapcomponents/react-maplibre 0.1.57 → 0.1.59
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.
- package/.eslintignore +11 -0
- package/.eslintrc.js +20 -0
- package/.github/workflows/check-formatting.yml +46 -0
- package/.prettierignore +11 -0
- package/.prettierrc.json +6 -0
- package/CHANGELOG.md +18 -0
- package/coverage/clover.xml +229 -77
- package/coverage/coverage-final.json +43 -37
- package/coverage/lcov-report/index.html +65 -20
- package/coverage/lcov-report/src/components/MapLibreMap/MapLibreMap.tsx.html +83 -83
- package/coverage/lcov-report/src/components/MapLibreMap/index.html +1 -1
- package/coverage/lcov-report/src/components/MlCenterPosition/MlCenterPosition.tsx.html +66 -66
- package/coverage/lcov-report/src/components/MlCenterPosition/index.html +1 -1
- package/coverage/lcov-report/src/components/MlCreatePdfButton/MlCreatePdfButton.tsx.html +30 -30
- package/coverage/lcov-report/src/components/MlCreatePdfButton/index.html +1 -1
- package/coverage/lcov-report/src/components/MlCreatePdfForm/MlCreatePdfForm.tsx.html +202 -0
- package/coverage/lcov-report/src/components/MlCreatePdfForm/index.html +116 -0
- package/coverage/lcov-report/src/components/MlFeatureEditor/MlFeatureEditor.tsx.html +99 -99
- package/coverage/lcov-report/src/components/MlFeatureEditor/index.html +1 -1
- package/coverage/lcov-report/src/components/MlFillExtrusionLayer/MlFillExtrusionLayer.tsx.html +66 -66
- package/coverage/lcov-report/src/components/MlFillExtrusionLayer/index.html +1 -1
- package/coverage/lcov-report/src/components/MlFollowGps/MlFollowGps.tsx.html +221 -221
- package/coverage/lcov-report/src/components/MlFollowGps/index.html +1 -1
- package/coverage/lcov-report/src/components/MlGPXViewer/MlGPXViewer.tsx.html +308 -308
- package/coverage/lcov-report/src/components/MlGPXViewer/gpxConverter.js.html +497 -497
- package/coverage/lcov-report/src/components/MlGPXViewer/index.html +1 -1
- package/coverage/lcov-report/src/components/MlGeoJsonLayer/MlGeoJsonLayer.tsx.html +85 -85
- package/coverage/lcov-report/src/components/MlGeoJsonLayer/index.html +1 -1
- package/coverage/lcov-report/src/components/MlGeojsonLayerWithSource/MlGeojsonLayerWithSource.tsx.html +469 -0
- package/coverage/lcov-report/src/components/MlGeojsonLayerWithSource/index.html +116 -0
- package/coverage/lcov-report/src/components/MlImageMarkerLayer/MlImageMarkerLayer.tsx.html +140 -140
- package/coverage/lcov-report/src/components/MlImageMarkerLayer/index.html +1 -1
- package/coverage/lcov-report/src/components/MlLayer/MlLayer.tsx.html +37 -37
- package/coverage/lcov-report/src/components/MlLayer/index.html +1 -1
- package/coverage/lcov-report/src/components/MlLayerMagnify/MlLayerMagnify.tsx.html +179 -179
- package/coverage/lcov-report/src/components/MlLayerMagnify/index.html +1 -1
- package/coverage/lcov-report/src/components/MlLayerSwipe/MlLayerSwipe.tsx.html +113 -113
- package/coverage/lcov-report/src/components/MlLayerSwipe/index.html +1 -1
- package/coverage/lcov-report/src/components/MlLayerSwitcher/MlLayerSwitcher.js.html +181 -181
- package/coverage/lcov-report/src/components/MlLayerSwitcher/components/LayerBox.js.html +58 -58
- package/coverage/lcov-report/src/components/MlLayerSwitcher/components/index.html +1 -1
- package/coverage/lcov-report/src/components/MlLayerSwitcher/index.html +1 -1
- package/coverage/lcov-report/src/components/MlMarker/MlMarker.tsx.html +108 -108
- package/coverage/lcov-report/src/components/MlMarker/index.html +1 -1
- package/coverage/lcov-report/src/components/MlMeasureTool/MlMeasureTool.tsx.html +39 -39
- package/coverage/lcov-report/src/components/MlMeasureTool/index.html +1 -1
- package/coverage/lcov-report/src/components/MlNavigationCompass/MlNavigationCompass.tsx.html +183 -183
- package/coverage/lcov-report/src/components/MlNavigationCompass/index.html +1 -1
- package/coverage/lcov-report/src/components/MlNavigationTools/MlNavigationTools.tsx.html +163 -163
- package/coverage/lcov-report/src/components/MlNavigationTools/index.html +1 -1
- package/coverage/lcov-report/src/components/MlOsmLayer/MlOsmLayer.js.html +50 -50
- package/coverage/lcov-report/src/components/MlOsmLayer/MlOsmLayer.stories_.js.html +30 -30
- package/coverage/lcov-report/src/components/MlOsmLayer/index.html +1 -1
- package/coverage/lcov-report/src/components/MlScaleReference/MlScaleReference.js.html +83 -83
- package/coverage/lcov-report/src/components/MlScaleReference/index.html +1 -1
- package/coverage/lcov-report/src/components/MlShareMapState/MlShareMapState.js.html +204 -204
- package/coverage/lcov-report/src/components/MlShareMapState/index.html +1 -1
- package/coverage/lcov-report/src/components/MlSpatialElevationProfile/MlSpatialElevationProfile.js.html +180 -180
- package/coverage/lcov-report/src/components/MlSpatialElevationProfile/index.html +1 -1
- package/coverage/lcov-report/src/components/MlThreeJsLayer/MlThreeJsLayer.js.html +163 -163
- package/coverage/lcov-report/src/components/MlThreeJsLayer/index.html +1 -1
- package/coverage/lcov-report/src/components/MlTransitionGeoJsonLayer/MlTransitionGeoJsonLayer.tsx.html +136 -136
- package/coverage/lcov-report/src/components/MlTransitionGeoJsonLayer/index.html +1 -1
- package/coverage/lcov-report/src/components/MlUseMapDebugger/MlUseMapDebugger.js.html +53 -53
- package/coverage/lcov-report/src/components/MlUseMapDebugger/index.html +1 -1
- package/coverage/lcov-report/src/components/MlVectorTileLayer/MlVectorTileLayer.tsx.html +123 -123
- package/coverage/lcov-report/src/components/MlVectorTileLayer/index.html +1 -1
- package/coverage/lcov-report/src/components/MlWmsFeatureInfoPopup/MlWmsFeatureInfoPopup.js.html +35 -35
- package/coverage/lcov-report/src/components/MlWmsFeatureInfoPopup/index.html +1 -1
- package/coverage/lcov-report/src/components/MlWmsLayer/MlWmsLayer.tsx.html +155 -155
- package/coverage/lcov-report/src/components/MlWmsLayer/index.html +1 -1
- package/coverage/lcov-report/src/components/MlWmsLoader/MlWmsLoader.tsx.html +255 -255
- package/coverage/lcov-report/src/components/MlWmsLoader/index.html +1 -1
- package/coverage/lcov-report/src/contexts/MapContext.tsx.html +66 -66
- package/coverage/lcov-report/src/contexts/SimpleDataContext.js.html +1 -1
- package/coverage/lcov-report/src/contexts/SimpleDataProvider.js.html +48 -48
- package/coverage/lcov-report/src/contexts/index.html +1 -1
- package/coverage/lcov-report/src/hooks/exportMap/index.html +131 -0
- package/coverage/lcov-report/src/hooks/exportMap/index.ts.html +175 -0
- package/coverage/lcov-report/src/hooks/exportMap/lib.ts.html +646 -0
- package/coverage/lcov-report/src/hooks/index.html +48 -18
- package/coverage/lcov-report/src/hooks/useLayer.ts.html +230 -188
- package/coverage/lcov-report/src/hooks/useLayerEvent.js.html +232 -0
- package/coverage/lcov-report/src/hooks/useMap.ts.html +72 -69
- package/coverage/lcov-report/src/hooks/useMapState.ts.html +145 -145
- package/coverage/lcov-report/src/hooks/useSource.ts.html +337 -0
- package/coverage/lcov-report/src/hooks/useWms.js.html +72 -72
- package/coverage/lcov-report/src/index.html +1 -1
- package/coverage/lcov-report/src/index.ts.html +11 -2
- package/coverage/lcov.info +448 -151
- package/dist/components/MlCreatePdfForm/MlCreatePdfForm.d.ts +24 -0
- package/dist/components/MlCreatePdfForm/MlCreatePdfForm.stories.d.ts +13 -0
- package/dist/components/MlCreatePdfForm/lib/PdfContext.d.ts +21 -0
- package/dist/components/MlCreatePdfForm/lib/PdfForm.d.ts +10 -0
- package/dist/components/MlCreatePdfForm/lib/PdfPreview.d.ts +13 -0
- package/dist/components/MlCreatePdfForm/lib/pdf.templates.d.ts +11 -0
- package/dist/components/MlFeatureEditor/lib/create_vertex.d.ts +1 -1
- package/dist/components/MlGeojsonLayerWithSource/MlGeojsonLayerWithSource.d.ts +22 -0
- package/dist/components/MlGeojsonLayerWithSource/MlGeojsonLayerWithSource.stories.d.ts +10 -0
- package/dist/components/MlLayerSwipe/MlLayerSwipe.d.ts +1 -1
- package/dist/components/MlWmsLayer/MlWmsLayer.d.ts +2 -2
- package/dist/decorators/MapContextDecoratorHooks.d.ts +2 -0
- package/dist/hooks/exportMap/index.d.ts +11 -0
- package/dist/hooks/exportMap/lib.d.ts +36 -0
- package/dist/hooks/useLayer.d.ts +6 -5
- package/dist/hooks/useLayerEvent.d.ts +2 -0
- package/dist/hooks/useMap.d.ts +1 -1
- package/dist/hooks/useMapState.stories.d.ts +2 -2
- package/dist/hooks/useSource.d.ts +17 -0
- package/dist/hooks/useSources.stories.d.ts +13 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.esm.js +1055 -315
- package/dist/index.esm.js.map +1 -1
- package/eslintErrorTest.js +10 -0
- package/package.json +7 -1
- package/public/thumbnails/MlCreatePdfForm.png +0 -0
- package/src/components/MapLibreMap/MapLibreMap.stories.js +72 -72
- package/src/components/MapLibreMap/MapLibreMap.test.js +60 -60
- package/src/components/MapLibreMap/MapLibreMap.tsx +82 -82
- package/src/components/MapLibreMap/lib/MapLibreGlWrapper.test.js +343 -343
- package/src/components/MapLibreMap/lib/MapLibreGlWrapper.ts +619 -619
- package/src/components/MlBasicComponent.js +25 -25
- package/src/components/MlCenterPosition/MlCenterPosition.stories.js +6 -6
- package/src/components/MlCenterPosition/MlCenterPosition.tsx +65 -65
- package/src/components/MlComponentTemplate/MlComponentTemplate.stories.js +5 -5
- package/src/components/MlComponentTemplate/MlComponentTemplate.tsx +23 -23
- package/src/components/MlCreatePdfButton/{MlCreatePdfButton.meta.json → MlCreatePdfButton.meta_.json} +0 -0
- package/src/components/MlCreatePdfButton/MlCreatePdfButton.stories.js +16 -16
- package/src/components/MlCreatePdfButton/MlCreatePdfButton.tsx +29 -29
- package/src/components/MlCreatePdfButton/lib/createPdf.ts +175 -175
- package/src/components/MlCreatePdfButton/lib/nominatimMap.ts +51 -51
- package/src/components/MlCreatePdfForm/MlCreatePdfForm.doc.de.md +3 -0
- package/src/components/MlCreatePdfForm/MlCreatePdfForm.meta.json +15 -0
- package/src/components/MlCreatePdfForm/MlCreatePdfForm.stories.tsx +152 -0
- package/src/components/MlCreatePdfForm/MlCreatePdfForm.tsx +39 -0
- package/src/components/MlCreatePdfForm/lib/PdfContext.tsx +53 -0
- package/src/components/MlCreatePdfForm/lib/PdfForm.tsx +161 -0
- package/src/components/MlCreatePdfForm/lib/PdfPreview.tsx +399 -0
- package/src/components/MlCreatePdfForm/lib/pdf.templates.ts +82 -0
- package/src/components/MlFeatureEditor/MlFeatureEditor.stories.js +55 -55
- package/src/components/MlFeatureEditor/MlFeatureEditor.test.js +105 -105
- package/src/components/MlFeatureEditor/MlFeatureEditor.tsx +119 -119
- package/src/components/MlFeatureEditor/custom-direct-select-mode.js +208 -208
- package/src/components/MlFeatureEditor/custom-polygon-mode.js +148 -148
- package/src/components/MlFeatureEditor/custom-select-mode.js +314 -314
- package/src/components/MlFeatureEditor/lib/common_selectors.js +34 -34
- package/src/components/MlFeatureEditor/lib/constants.js +61 -61
- package/src/components/MlFeatureEditor/lib/constrain_feature_movement.js +51 -51
- package/src/components/MlFeatureEditor/lib/create_midpoint.js +30 -30
- package/src/components/MlFeatureEditor/lib/create_supplementary_points.js +82 -82
- package/src/components/MlFeatureEditor/lib/create_vertex.js +16 -16
- package/src/components/MlFeatureEditor/lib/double_click_zoom.js +23 -23
- package/src/components/MlFeatureEditor/lib/euclidean_distance.js +3 -3
- package/src/components/MlFeatureEditor/lib/features_at.js +23 -23
- package/src/components/MlFeatureEditor/lib/get_features_and_set_cursor.js +15 -15
- package/src/components/MlFeatureEditor/lib/is_click.js +8 -8
- package/src/components/MlFeatureEditor/lib/is_event_at_coordinates.js +2 -2
- package/src/components/MlFeatureEditor/lib/is_tap.js +6 -6
- package/src/components/MlFeatureEditor/lib/map_event_to_bounding_box.js +4 -4
- package/src/components/MlFeatureEditor/lib/mode_handler.js +105 -105
- package/src/components/MlFeatureEditor/lib/mouse_event_point.js +5 -5
- package/src/components/MlFeatureEditor/lib/move_features.js +33 -33
- package/src/components/MlFeatureEditor/lib/sort_features.js +25 -25
- package/src/components/MlFeatureEditor/lib/string_set.js +36 -36
- package/src/components/MlFeatureEditor/lib/string_sets_are_equal.js +2 -2
- package/src/components/MlFeatureEditor/lib/theme.js +230 -230
- package/src/components/MlFeatureEditor/lib/to_dense_array.js +1 -1
- package/src/components/MlFeatureEditor/lib/utils.js +40 -40
- package/src/components/MlFillExtrusionLayer/MlFillExtrusionLayer.stories.js +9 -9
- package/src/components/MlFillExtrusionLayer/MlFillExtrusionLayer.test.js +4 -4
- package/src/components/MlFillExtrusionLayer/MlFillExtrusionLayer.tsx +65 -65
- package/src/components/MlFollowGps/MlFollowGps.stories.js +6 -6
- package/src/components/MlFollowGps/MlFollowGps.test.js +44 -44
- package/src/components/MlFollowGps/MlFollowGps.tsx +220 -220
- package/src/components/MlGPXViewer/MlGPXViewer.stories.js +15 -15
- package/src/components/MlGPXViewer/MlGPXViewer.test.js +12 -12
- package/src/components/MlGPXViewer/MlGPXViewer.tsx +345 -345
- package/src/components/MlGPXViewer/gpxConverter.js +496 -496
- package/src/components/MlGPXViewer/util/GeoJsonContext.ts +4 -4
- package/src/components/MlGPXViewer/util/GeoJsonProvider.tsx +16 -16
- package/src/components/MlGeoJsonLayer/MlGeoJsonLayer.stories.js +34 -34
- package/src/components/MlGeoJsonLayer/MlGeoJsonLayer.test.js +8 -8
- package/src/components/MlGeoJsonLayer/MlGeoJsonLayer.tsx +84 -84
- package/src/components/MlGeoJsonLayer/util/getDefaultLayerTypeByGeometry.ts +21 -21
- package/src/components/MlGeoJsonLayer/util/getDefaultPaintPropsByType.ts +27 -27
- package/src/components/MlGeojsonLayerWithSource/MlGeojsonLayerWithSource.doc.de.md +3 -0
- package/src/components/MlGeojsonLayerWithSource/MlGeojsonLayerWithSource.meta_.json +15 -0
- package/src/components/MlGeojsonLayerWithSource/MlGeojsonLayerWithSource.stories.js +19 -0
- package/src/components/MlGeojsonLayerWithSource/MlGeojsonLayerWithSource.tsx +128 -0
- package/src/components/MlImageMarkerLayer/MlImageMarkerLayer.stories.js +28 -28
- package/src/components/MlImageMarkerLayer/MlImageMarkerLayer.test.js +8 -8
- package/src/components/MlImageMarkerLayer/MlImageMarkerLayer.tsx +162 -162
- package/src/components/MlLayer/MlLayer.stories.js +5 -5
- package/src/components/MlLayer/MlLayer.test.js +86 -86
- package/src/components/MlLayer/MlLayer.tsx +36 -36
- package/src/components/MlLayerMagnify/MlLayerMagnify.stories.js +21 -21
- package/src/components/MlLayerMagnify/MlLayerMagnify.test.js +54 -54
- package/src/components/MlLayerMagnify/MlLayerMagnify.tsx +201 -201
- package/src/components/MlLayerSwipe/MlLayerSwipe.stories.js +20 -20
- package/src/components/MlLayerSwipe/MlLayerSwipe.test.js +54 -54
- package/src/components/MlLayerSwipe/MlLayerSwipe.tsx +130 -130
- package/src/components/MlLayerSwitcher/MlLayerSwitcher.js +194 -194
- package/src/components/MlLayerSwitcher/MlLayerSwitcher.stories.js +85 -85
- package/src/components/MlLayerSwitcher/components/LayerBox.js +57 -57
- package/src/components/MlMarker/MlMarker.stories.js +7 -7
- package/src/components/MlMarker/MlMarker.tsx +119 -119
- package/src/components/MlMeasureTool/MlMeasureTool.stories.js +64 -64
- package/src/components/MlMeasureTool/MlMeasureTool.tsx +38 -38
- package/src/components/MlNavigationCompass/MlNavigationCompass.stories.js +45 -45
- package/src/components/MlNavigationCompass/MlNavigationCompass.test.js +40 -40
- package/src/components/MlNavigationCompass/MlNavigationCompass.tsx +192 -192
- package/src/components/MlNavigationTools/MlNavigationTools.stories.js +18 -18
- package/src/components/MlNavigationTools/MlNavigationTools.tsx +173 -173
- package/src/components/MlOsmLayer/MlOsmLayer.js +49 -49
- package/src/components/MlOsmLayer/MlOsmLayer.stories_.js +29 -29
- package/src/components/MlOsmLayer/MlOsmLayer.test.js +8 -8
- package/src/components/MlScaleReference/MlScaleReference.js +82 -82
- package/src/components/MlScaleReference/MlScaleReference.stories.js +27 -27
- package/src/components/MlShareMapState/MlShareMapState.js +203 -203
- package/src/components/MlShareMapState/MlShareMapState.stories.js +68 -68
- package/src/components/MlSpatialElevationProfile/MlSpatialElevationProfile.js +201 -201
- package/src/components/MlSpatialElevationProfile/MlSpatialElevationProfile.stories.js +35 -35
- package/src/components/MlSpatialElevationProfile/MlSpatialElevationProfile.test.js +8 -8
- package/src/components/MlThreeJsLayer/MlThreeJsLayer.js +186 -186
- package/src/components/MlThreeJsLayer/MlThreeJsLayer.stories.js +21 -21
- package/src/components/MlThreeJsLayer/MlThreeJsLayer.test.js +24 -24
- package/src/components/MlThreeJsLayer/lib/GLTFLoader.js +3327 -3327
- package/src/components/MlTransitionGeoJsonLayer/MlTransitionGeoJsonLayer.stories.js +31 -30
- package/src/components/MlTransitionGeoJsonLayer/MlTransitionGeoJsonLayer.test.js +8 -8
- package/src/components/MlTransitionGeoJsonLayer/MlTransitionGeoJsonLayer.tsx +146 -146
- package/src/components/MlTransitionGeoJsonLayer/util/transitionFunctions.js +207 -207
- package/src/components/MlUseMapDebugger/MlUseMapDebugger.js +52 -52
- package/src/components/MlUseMapDebugger/MlUseMapDebugger.stories.js +13 -13
- package/src/components/MlVectorTileLayer/MlVectorTileLayer.stories.js +27 -27
- package/src/components/MlVectorTileLayer/MlVectorTileLayer.test.js +27 -27
- package/src/components/MlVectorTileLayer/MlVectorTileLayer.tsx +137 -137
- package/src/components/MlWmsFeatureInfoPopup/MlWmsFeatureInfoPopup.js +34 -34
- package/src/components/MlWmsFeatureInfoPopup/MlWmsFeatureInfoPopup.stories.js +7 -7
- package/src/components/MlWmsLayer/MlWmsLayer.stories.js +26 -26
- package/src/components/MlWmsLayer/MlWmsLayer.test.js +8 -8
- package/src/components/MlWmsLayer/MlWmsLayer.tsx +167 -167
- package/src/components/MlWmsLoader/MlWmsLoader.stories.js +27 -27
- package/src/components/MlWmsLoader/MlWmsLoader.tsx +254 -254
- package/src/contexts/MapComponentsProvider.test.js +229 -229
- package/src/contexts/MapContext.tsx +65 -65
- package/src/contexts/SimpleDataProvider.js +47 -47
- package/src/contexts/SimpleDataProvider.test.js +29 -29
- package/src/custom.d.tsx +14 -14
- package/src/decorators/MapContextDecorator.js +22 -22
- package/src/decorators/MapContextDecoratorHooks.js +34 -0
- package/src/decorators/MultiMapContextDecorator.js +63 -63
- package/src/decorators/NoNavToolsDecorator.js +17 -17
- package/src/decorators/ThemeWrapper.jsx +1 -1
- package/src/hooks/assets/pointWG.json +13 -0
- package/src/hooks/exportMap/index.ts +30 -0
- package/src/hooks/exportMap/lib.ts +187 -0
- package/src/hooks/useLayer.test.js +188 -188
- package/src/hooks/useLayer.ts +194 -180
- package/src/hooks/useLayerEvent.js +49 -0
- package/src/hooks/useMap.ts +67 -66
- package/src/hooks/useMapState.stories.js +78 -78
- package/src/hooks/useMapState.ts +161 -161
- package/src/hooks/useSource.ts +84 -0
- package/src/hooks/useSources.stories.js +232 -0
- package/src/hooks/useWms.js +71 -71
- package/src/index.ts +3 -0
- package/src/setupTests.js +86 -86
- package/src/ui_components/ImageLoader.js +62 -62
- package/src/ui_components/Legend.js +34 -34
- package/src/ui_components/LoadingOverlay.js +29 -29
- package/src/ui_components/LoadingOverlayContext.js +68 -68
- package/src/ui_components/Sidebar.js +80 -80
- package/src/ui_components/Tooltip.js +9 -9
- package/src/ui_components/TopToolbar.js +23 -23
- package/src/util/layerRemovalTest.js +111 -111
- package/src/util/sourceRemovalTest.js +103 -103
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import { LngLatLike, Map } from 'maplibre-gl';
|
|
2
|
+
import jsPDF from 'jspdf';
|
|
3
|
+
import MapLibreGlWrapper from '../../components/MapLibreMap/lib/MapLibreGlWrapper';
|
|
4
|
+
|
|
5
|
+
import * as turf from '@turf/turf';
|
|
6
|
+
import { BBox } from '@turf/turf';
|
|
7
|
+
|
|
8
|
+
interface createExportOptions {
|
|
9
|
+
map: MapLibreGlWrapper;
|
|
10
|
+
width: number;
|
|
11
|
+
height: number;
|
|
12
|
+
bbox: BBox;
|
|
13
|
+
bboxUnrotated: BBox;
|
|
14
|
+
bearing: number;
|
|
15
|
+
format: string;
|
|
16
|
+
orientation: string;
|
|
17
|
+
}
|
|
18
|
+
export type { createExportOptions };
|
|
19
|
+
|
|
20
|
+
const createExport = (options: createExportOptions) => {
|
|
21
|
+
const width = options.width;
|
|
22
|
+
const height = options.height;
|
|
23
|
+
|
|
24
|
+
// Create map container
|
|
25
|
+
const hiddenContainer = document.createElement('div');
|
|
26
|
+
hiddenContainer.className = 'hidden-map';
|
|
27
|
+
document.body.appendChild(hiddenContainer);
|
|
28
|
+
const container = document.createElement('div');
|
|
29
|
+
container.style.width = width + 'px';
|
|
30
|
+
container.style.height = height + 'px';
|
|
31
|
+
hiddenContainer.appendChild(container);
|
|
32
|
+
|
|
33
|
+
const style = options.map.map.getStyle();
|
|
34
|
+
|
|
35
|
+
// delete undefined source properties
|
|
36
|
+
for (const name in style.sources) {
|
|
37
|
+
const src = style.sources[name];
|
|
38
|
+
|
|
39
|
+
Object.keys(src).forEach((key) => {
|
|
40
|
+
// delete property if value is undefined.
|
|
41
|
+
// for instance, raster-dem might have undefined value in "url" and "bounds"
|
|
42
|
+
if (!src[key]) {
|
|
43
|
+
delete src[key];
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// Create a new MapLibre-gl instance
|
|
49
|
+
const renderMap = new Map({
|
|
50
|
+
container: container,
|
|
51
|
+
center: options.map.map.getCenter(),
|
|
52
|
+
zoom: options.map.map.getZoom(),
|
|
53
|
+
bearing: 0,
|
|
54
|
+
pitch: 0,
|
|
55
|
+
interactive: false,
|
|
56
|
+
preserveDrawingBuffer: true,
|
|
57
|
+
fadeDuration: 0,
|
|
58
|
+
attributionControl: false,
|
|
59
|
+
style: style,
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
let _previewGeojson = turf.bboxPolygon([
|
|
63
|
+
options.bbox[0],
|
|
64
|
+
options.bbox[1],
|
|
65
|
+
options.bbox[2],
|
|
66
|
+
options.bbox[3],
|
|
67
|
+
]);
|
|
68
|
+
_previewGeojson = turf.transformRotate(_previewGeojson, options.bearing);
|
|
69
|
+
|
|
70
|
+
// use original unrotated bbox and bearing 0 to calculate the correct zoom value as the function always adds a padding if used on the rotated feature coordinates
|
|
71
|
+
const bboxCamera = renderMap._cameraForBoxAndBearing(
|
|
72
|
+
[options.bboxUnrotated[0], options.bboxUnrotated[1]],
|
|
73
|
+
[options.bboxUnrotated[2], options.bboxUnrotated[3]],
|
|
74
|
+
0
|
|
75
|
+
);
|
|
76
|
+
const geometryCamera = renderMap._cameraForBoxAndBearing(
|
|
77
|
+
_previewGeojson.geometry.coordinates[0][0] as LngLatLike,
|
|
78
|
+
_previewGeojson.geometry.coordinates[0][2] as LngLatLike,
|
|
79
|
+
options.bearing
|
|
80
|
+
);
|
|
81
|
+
geometryCamera.zoom = bboxCamera.zoom;
|
|
82
|
+
|
|
83
|
+
renderMap._fitInternal(geometryCamera);
|
|
84
|
+
return new Promise<createExportResolverParams>((resolve) => {
|
|
85
|
+
renderMap.once('idle', function () {
|
|
86
|
+
if (renderMap.getLayer('pdfPreviewGeojsonOutline')) {
|
|
87
|
+
renderMap.setLayoutProperty('pdfPreviewGeojsonOutline', 'visibility', 'none');
|
|
88
|
+
}
|
|
89
|
+
if (renderMap.getLayer('pdfPreviewGeojson')) {
|
|
90
|
+
renderMap.setLayoutProperty('pdfPreviewGeojson', 'visibility', 'none');
|
|
91
|
+
}
|
|
92
|
+
if (renderMap.getLayer('pdfPreviewGeojsonResizeHandle')) {
|
|
93
|
+
renderMap.setLayoutProperty('pdfPreviewGeojsonResizeHandle', 'visibility', 'none');
|
|
94
|
+
}
|
|
95
|
+
if (renderMap.getLayer('pdfPreviewGeojsonRotationHandle')) {
|
|
96
|
+
renderMap.setLayoutProperty('pdfPreviewGeojsonRotationHandle', 'visibility', 'none');
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
renderMap.once('idle', function () {
|
|
100
|
+
const params: createExportResolverParams = {
|
|
101
|
+
...options,
|
|
102
|
+
renderMap,
|
|
103
|
+
hiddenContainer,
|
|
104
|
+
createPdf: (_options?: createJsPdfOptions) =>
|
|
105
|
+
createJsPdf({ ...options, renderMap, hiddenContainer, ..._options }),
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
resolve(params);
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
interface createExportResolverParams extends createExportOptions {
|
|
115
|
+
createPdf: (_options?: createJsPdfOptions) => Promise<createPdfResolverParams>;
|
|
116
|
+
renderMap: Map;
|
|
117
|
+
hiddenContainer: HTMLDivElement;
|
|
118
|
+
}
|
|
119
|
+
export type { createExportResolverParams };
|
|
120
|
+
|
|
121
|
+
interface createJsPdfOptions extends createExportOptions {
|
|
122
|
+
renderMap: Map;
|
|
123
|
+
hiddenContainer: HTMLDivElement;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
export type { createJsPdfOptions };
|
|
127
|
+
|
|
128
|
+
function createJsPdf(options: createJsPdfOptions) {
|
|
129
|
+
const pdf = new jsPDF({
|
|
130
|
+
orientation: options?.orientation === 'portrait' ? 'p' : 'l',
|
|
131
|
+
unit: 'mm',
|
|
132
|
+
compress: true,
|
|
133
|
+
format: options.format,
|
|
134
|
+
});
|
|
135
|
+
Object.defineProperty(window, 'devicePixelRatio', {
|
|
136
|
+
get: function () {
|
|
137
|
+
return 300 / 96;
|
|
138
|
+
},
|
|
139
|
+
});
|
|
140
|
+
|
|
141
|
+
return new Promise<createPdfResolverParams>((resolve) => {
|
|
142
|
+
//Render map image
|
|
143
|
+
pdf.addImage(
|
|
144
|
+
options.renderMap.getCanvas().toDataURL('image/png'),
|
|
145
|
+
'png',
|
|
146
|
+
0,
|
|
147
|
+
0,
|
|
148
|
+
pdf.internal.pageSize.getWidth(),
|
|
149
|
+
pdf.internal.pageSize.getHeight(),
|
|
150
|
+
undefined,
|
|
151
|
+
'FAST'
|
|
152
|
+
);
|
|
153
|
+
|
|
154
|
+
// remove DOM Elements
|
|
155
|
+
options.renderMap.remove();
|
|
156
|
+
options.hiddenContainer.parentNode?.removeChild(options.hiddenContainer);
|
|
157
|
+
|
|
158
|
+
const params: createPdfResolverParams = {
|
|
159
|
+
...options,
|
|
160
|
+
pdf,
|
|
161
|
+
downloadPdf: (_options?: downloadPdfOptions) => downloadPdf({ ...params, ..._options }),
|
|
162
|
+
};
|
|
163
|
+
|
|
164
|
+
resolve(params);
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
interface createPdfResolverParams extends createJsPdfOptions {
|
|
169
|
+
pdf: jsPDF;
|
|
170
|
+
downloadPdf: (_options?: downloadPdfOptions) => Promise<downloadPdfOptions>;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
export type { createPdfResolverParams };
|
|
174
|
+
|
|
175
|
+
interface downloadPdfOptions extends createJsPdfOptions {
|
|
176
|
+
pdf: jsPDF;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
function downloadPdf(options: downloadPdfOptions) {
|
|
180
|
+
options.pdf.save('Map.pdf');
|
|
181
|
+
|
|
182
|
+
return new Promise<downloadPdfOptions>(function (resolve) {
|
|
183
|
+
resolve({ ...options });
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
export { createExport };
|
|
@@ -8,198 +8,198 @@ import { mockMapLibreMethods } from "../setupTests";
|
|
|
8
8
|
import useLayer from "./useLayer";
|
|
9
9
|
|
|
10
10
|
const UseLayerTestComponent = (props) => {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
11
|
+
// Use a useRef hook to reference the layer object to be able to access it later inside useEffect hooks
|
|
12
|
+
useLayer({
|
|
13
|
+
mapId: props.mapId,
|
|
14
|
+
layerId: props.layerId || "TestComponent",
|
|
15
|
+
geojson: props.geojson,
|
|
16
|
+
options: {
|
|
17
|
+
paint: props.paint,
|
|
18
|
+
layout: props.layout || {},
|
|
19
|
+
type: props.type,
|
|
20
|
+
...props.options,
|
|
21
|
+
},
|
|
22
|
+
insertBeforeLayer: props.insertBeforeLayer,
|
|
23
|
+
onHover: props.onHover,
|
|
24
|
+
onClick: props.onClick,
|
|
25
|
+
onLeave: props.onLeave,
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
return <></>;
|
|
29
29
|
};
|
|
30
30
|
|
|
31
31
|
const TestComponent = (props) => {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
32
|
+
const [includeComponent, setIncludeComponent] = useState(true);
|
|
33
|
+
const [testType, setTestType] = useState('line');
|
|
34
|
+
|
|
35
|
+
return (
|
|
36
|
+
<>
|
|
37
|
+
<button
|
|
38
|
+
className="change_testType"
|
|
39
|
+
onClick={() => {
|
|
40
|
+
setTestType('circle');
|
|
41
|
+
}}
|
|
42
|
+
>
|
|
43
|
+
change type
|
|
44
|
+
</button>
|
|
45
|
+
<button
|
|
46
|
+
className="toggle_includeComponent"
|
|
47
|
+
onClick={() => {
|
|
48
|
+
setIncludeComponent(!includeComponent);
|
|
49
|
+
}}
|
|
50
|
+
>
|
|
51
|
+
toggle
|
|
52
|
+
</button>
|
|
53
|
+
{includeComponent && <UseLayerTestComponent {...props} type={testType} />}
|
|
54
|
+
<MapLibreMap />
|
|
55
|
+
</>
|
|
56
|
+
);
|
|
57
57
|
};
|
|
58
58
|
|
|
59
59
|
describe("useLayer hook", () => {
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
60
|
+
it("should register 1 event listener 'hover' to the maplibre instance", async () => {
|
|
61
|
+
var testAttributes = {
|
|
62
|
+
onHover: () => {},
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
const wrapper = mount(
|
|
66
|
+
<MapComponentsProvider>
|
|
67
|
+
<TestComponent {...testAttributes} />
|
|
68
|
+
</MapComponentsProvider>
|
|
69
|
+
);
|
|
70
|
+
|
|
71
|
+
// MapLibreGlWrapper now subscribes to 4 events events on its own
|
|
72
|
+
// useLayer always subscribes to 'styledata' to watch whether its representation within the maplibre instance has been removed
|
|
73
|
+
await waitFor(() => expect(mockMapLibreMethods.on).toHaveBeenCalledTimes(6));
|
|
74
|
+
});
|
|
75
|
+
it("should deregister 1 event listener 'hover' to the maplibre instance", async () => {
|
|
76
|
+
var testAttributes = {
|
|
77
|
+
onHover: () => {},
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
const wrapper = mount(
|
|
81
|
+
<MapComponentsProvider>
|
|
82
|
+
<TestComponent {...testAttributes} />
|
|
83
|
+
</MapComponentsProvider>
|
|
84
|
+
);
|
|
85
|
+
|
|
86
|
+
wrapper.find(".toggle_includeComponent").simulate("click");
|
|
87
|
+
|
|
88
|
+
// useLayer always subscribes to 'styledata' to watch whether its representation within the maplibre instance has been removed
|
|
89
|
+
await waitFor(() => expect(mockMapLibreMethods.off).toHaveBeenCalledTimes(2));
|
|
90
|
+
});
|
|
91
|
+
it("should register 1 event listener 'leave' to the maplibre instance", async () => {
|
|
92
|
+
var testAttributes = {
|
|
93
|
+
onLeave: () => {},
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
const wrapper = mount(
|
|
97
|
+
<MapComponentsProvider>
|
|
98
|
+
<TestComponent {...testAttributes} />
|
|
99
|
+
</MapComponentsProvider>
|
|
100
|
+
);
|
|
101
|
+
|
|
102
|
+
// MapLibreGlWrapper now subscribes to 4 events events on its own
|
|
103
|
+
// useLayer always subscribes to 'styledata' to watch whether its representation within the maplibre instance has been removed
|
|
104
|
+
await waitFor(() => expect(mockMapLibreMethods.on).toHaveBeenCalledTimes(6));
|
|
105
|
+
});
|
|
106
|
+
it("should deregister 1 event listener 'leave' to the maplibre instance", async () => {
|
|
107
|
+
var testAttributes = {
|
|
108
|
+
onLeave: () => {},
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
const wrapper = mount(
|
|
112
|
+
<MapComponentsProvider>
|
|
113
|
+
<TestComponent {...testAttributes} />
|
|
114
|
+
</MapComponentsProvider>
|
|
115
|
+
);
|
|
116
|
+
|
|
117
|
+
wrapper.find(".toggle_includeComponent").simulate("click");
|
|
118
|
+
|
|
119
|
+
// useLayer always subscribes to 'styledata' to watch whether its representation within the maplibre instance has been removed
|
|
120
|
+
await waitFor(() => expect(mockMapLibreMethods.off).toHaveBeenCalledTimes(2));
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
it("should register 1 event listener 'click' to the maplibre instance", async () => {
|
|
125
|
+
var testAttributes = {
|
|
126
|
+
onClick: () => {},
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
const wrapper = mount(
|
|
130
|
+
<MapComponentsProvider>
|
|
131
|
+
<TestComponent {...testAttributes} />
|
|
132
|
+
</MapComponentsProvider>
|
|
133
|
+
);
|
|
134
|
+
|
|
135
|
+
// MapLibreGlWrapper now subscribes to 4 events events on its own
|
|
136
|
+
// useLayer always subscribes to 'styledata' to watch whether its representation within the maplibre instance has been removed
|
|
137
|
+
await waitFor(() => expect(mockMapLibreMethods.on).toHaveBeenCalledTimes(6));
|
|
138
|
+
});
|
|
139
|
+
it("should deregister 1 event listener 'click' to the maplibre instance", async () => {
|
|
140
|
+
var testAttributes = {
|
|
141
|
+
onClick: () => {},
|
|
142
|
+
};
|
|
143
|
+
|
|
144
|
+
const wrapper = mount(
|
|
145
|
+
<MapComponentsProvider>
|
|
146
|
+
<TestComponent {...testAttributes} />
|
|
147
|
+
</MapComponentsProvider>
|
|
148
|
+
);
|
|
149
|
+
|
|
150
|
+
wrapper.find(".toggle_includeComponent").simulate("click");
|
|
151
|
+
|
|
152
|
+
// useLayer always subscribes to 'styledata' to watch whether its representation within the maplibre instance has been removed
|
|
153
|
+
await waitFor(() => expect(mockMapLibreMethods.off).toHaveBeenCalledTimes(2));
|
|
154
|
+
});
|
|
155
|
+
|
|
156
|
+
// if props.type is changed during runtime the hook needs to remove existing additions to the maplibre instance and reinitialize its representation in the maplibre instance
|
|
157
|
+
it("should deregister 1 event listener 'hover' to the maplibre instance if type is changed during component runtime", async () => {
|
|
158
|
+
var testAttributes = {
|
|
159
|
+
onHover: () => {},
|
|
160
|
+
};
|
|
161
|
+
|
|
162
|
+
const wrapper = mount(
|
|
163
|
+
<MapComponentsProvider>
|
|
164
|
+
<TestComponent {...testAttributes} />
|
|
165
|
+
</MapComponentsProvider>
|
|
166
|
+
);
|
|
167
|
+
|
|
168
|
+
wrapper.find(".change_testType").simulate("click");
|
|
169
|
+
|
|
170
|
+
// useLayer always subscribes to 'styledata' to watch whether its representation within the maplibre instance has been removed
|
|
171
|
+
await waitFor(() => expect(mockMapLibreMethods.off).toHaveBeenCalledTimes(2));
|
|
172
|
+
});
|
|
173
|
+
it("should deregister 1 event listener 'hover' to the maplibre instance if type is changed during component runtime", async () => {
|
|
174
|
+
var testAttributes = {
|
|
175
|
+
onHover: () => {},
|
|
176
|
+
};
|
|
177
|
+
|
|
178
|
+
const wrapper = mount(
|
|
179
|
+
<MapComponentsProvider>
|
|
180
|
+
<TestComponent {...testAttributes} />
|
|
181
|
+
</MapComponentsProvider>
|
|
182
|
+
);
|
|
183
|
+
|
|
184
|
+
wrapper.find(".change_testType").simulate("click");
|
|
185
|
+
|
|
186
|
+
// useLayer always subscribes to 'styledata' to watch whether its representation within the maplibre instance has been removed
|
|
187
|
+
await waitFor(() => expect(mockMapLibreMethods.off).toHaveBeenCalledTimes(2));
|
|
188
|
+
});
|
|
189
|
+
it("should deregister 1 event listener 'click' to the maplibre instance if type is changed during component runtime", async () => {
|
|
190
|
+
var testAttributes = {
|
|
191
|
+
onClick: () => {},
|
|
192
|
+
};
|
|
193
|
+
|
|
194
|
+
const wrapper = mount(
|
|
195
|
+
<MapComponentsProvider>
|
|
196
|
+
<TestComponent {...testAttributes} />
|
|
197
|
+
</MapComponentsProvider>
|
|
198
|
+
);
|
|
199
|
+
|
|
200
|
+
wrapper.find(".change_testType").simulate("click");
|
|
201
|
+
|
|
202
|
+
// useLayer always subscribes to 'styledata' to watch whether its representation within the maplibre instance has been removed
|
|
203
|
+
await waitFor(() => expect(mockMapLibreMethods.off).toHaveBeenCalledTimes(2));
|
|
204
|
+
});
|
|
205
205
|
});
|