@mapcomponents/react-maplibre 0.1.61 → 0.1.62

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 (105) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/coverage/clover.xml +36 -48
  3. package/coverage/coverage-final.json +3 -3
  4. package/coverage/lcov-report/index.html +23 -23
  5. package/coverage/lcov-report/src/components/MapLibreMap/MapLibreMap.tsx.html +1 -1
  6. package/coverage/lcov-report/src/components/MapLibreMap/index.html +1 -1
  7. package/coverage/lcov-report/src/components/MlCenterPosition/MlCenterPosition.tsx.html +1 -1
  8. package/coverage/lcov-report/src/components/MlCenterPosition/index.html +1 -1
  9. package/coverage/lcov-report/src/components/MlCreatePdfButton/MlCreatePdfButton.tsx.html +1 -1
  10. package/coverage/lcov-report/src/components/MlCreatePdfButton/index.html +1 -1
  11. package/coverage/lcov-report/src/components/MlCreatePdfForm/MlCreatePdfForm.tsx.html +2 -8
  12. package/coverage/lcov-report/src/components/MlCreatePdfForm/index.html +1 -1
  13. package/coverage/lcov-report/src/components/MlFeatureEditor/MlFeatureEditor.tsx.html +1 -1
  14. package/coverage/lcov-report/src/components/MlFeatureEditor/index.html +1 -1
  15. package/coverage/lcov-report/src/components/MlFillExtrusionLayer/MlFillExtrusionLayer.tsx.html +1 -1
  16. package/coverage/lcov-report/src/components/MlFillExtrusionLayer/index.html +1 -1
  17. package/coverage/lcov-report/src/components/MlFollowGps/MlFollowGps.tsx.html +1 -1
  18. package/coverage/lcov-report/src/components/MlFollowGps/index.html +1 -1
  19. package/coverage/lcov-report/src/components/MlGPXViewer/MlGPXViewer.tsx.html +1 -1
  20. package/coverage/lcov-report/src/components/MlGPXViewer/gpxConverter.js.html +1 -1
  21. package/coverage/lcov-report/src/components/MlGPXViewer/index.html +1 -1
  22. package/coverage/lcov-report/src/components/MlGeoJsonLayer/MlGeoJsonLayer.tsx.html +1 -1
  23. package/coverage/lcov-report/src/components/MlGeoJsonLayer/index.html +1 -1
  24. package/coverage/lcov-report/src/components/MlGeojsonLayerWithSource/MlGeojsonLayerWithSource.tsx.html +1 -1
  25. package/coverage/lcov-report/src/components/MlGeojsonLayerWithSource/index.html +1 -1
  26. package/coverage/lcov-report/src/components/MlImageMarkerLayer/MlImageMarkerLayer.tsx.html +1 -1
  27. package/coverage/lcov-report/src/components/MlImageMarkerLayer/index.html +1 -1
  28. package/coverage/lcov-report/src/components/MlLayer/MlLayer.tsx.html +1 -1
  29. package/coverage/lcov-report/src/components/MlLayer/index.html +1 -1
  30. package/coverage/lcov-report/src/components/MlLayerMagnify/MlLayerMagnify.tsx.html +1 -1
  31. package/coverage/lcov-report/src/components/MlLayerMagnify/index.html +1 -1
  32. package/coverage/lcov-report/src/components/MlLayerSwipe/MlLayerSwipe.tsx.html +1 -1
  33. package/coverage/lcov-report/src/components/MlLayerSwipe/index.html +1 -1
  34. package/coverage/lcov-report/src/components/MlLayerSwitcher/MlLayerSwitcher.js.html +1 -1
  35. package/coverage/lcov-report/src/components/MlLayerSwitcher/components/LayerBox.js.html +1 -1
  36. package/coverage/lcov-report/src/components/MlLayerSwitcher/components/index.html +1 -1
  37. package/coverage/lcov-report/src/components/MlLayerSwitcher/index.html +1 -1
  38. package/coverage/lcov-report/src/components/MlMarker/MlMarker.tsx.html +1 -1
  39. package/coverage/lcov-report/src/components/MlMarker/index.html +1 -1
  40. package/coverage/lcov-report/src/components/MlMeasureTool/MlMeasureTool.tsx.html +1 -1
  41. package/coverage/lcov-report/src/components/MlMeasureTool/index.html +1 -1
  42. package/coverage/lcov-report/src/components/MlNavigationCompass/MlNavigationCompass.tsx.html +1 -1
  43. package/coverage/lcov-report/src/components/MlNavigationCompass/index.html +1 -1
  44. package/coverage/lcov-report/src/components/MlNavigationTools/MlNavigationTools.tsx.html +1 -1
  45. package/coverage/lcov-report/src/components/MlNavigationTools/index.html +1 -1
  46. package/coverage/lcov-report/src/components/MlOsmLayer/MlOsmLayer.js.html +1 -1
  47. package/coverage/lcov-report/src/components/MlOsmLayer/MlOsmLayer.stories_.js.html +1 -1
  48. package/coverage/lcov-report/src/components/MlOsmLayer/index.html +1 -1
  49. package/coverage/lcov-report/src/components/MlScaleReference/MlScaleReference.js.html +1 -1
  50. package/coverage/lcov-report/src/components/MlScaleReference/index.html +1 -1
  51. package/coverage/lcov-report/src/components/MlShareMapState/MlShareMapState.js.html +1 -1
  52. package/coverage/lcov-report/src/components/MlShareMapState/index.html +1 -1
  53. package/coverage/lcov-report/src/components/MlSpatialElevationProfile/MlSpatialElevationProfile.js.html +1 -1
  54. package/coverage/lcov-report/src/components/MlSpatialElevationProfile/index.html +1 -1
  55. package/coverage/lcov-report/src/components/MlThreeJsLayer/MlThreeJsLayer.js.html +1 -1
  56. package/coverage/lcov-report/src/components/MlThreeJsLayer/index.html +1 -1
  57. package/coverage/lcov-report/src/components/MlTransitionGeoJsonLayer/MlTransitionGeoJsonLayer.tsx.html +1 -1
  58. package/coverage/lcov-report/src/components/MlTransitionGeoJsonLayer/index.html +1 -1
  59. package/coverage/lcov-report/src/components/MlUseMapDebugger/MlUseMapDebugger.js.html +1 -1
  60. package/coverage/lcov-report/src/components/MlUseMapDebugger/index.html +1 -1
  61. package/coverage/lcov-report/src/components/MlVectorTileLayer/MlVectorTileLayer.tsx.html +1 -1
  62. package/coverage/lcov-report/src/components/MlVectorTileLayer/index.html +1 -1
  63. package/coverage/lcov-report/src/components/MlWmsFeatureInfoPopup/MlWmsFeatureInfoPopup.js.html +1 -1
  64. package/coverage/lcov-report/src/components/MlWmsFeatureInfoPopup/index.html +1 -1
  65. package/coverage/lcov-report/src/components/MlWmsLayer/MlWmsLayer.tsx.html +1 -1
  66. package/coverage/lcov-report/src/components/MlWmsLayer/index.html +1 -1
  67. package/coverage/lcov-report/src/components/MlWmsLoader/MlWmsLoader.tsx.html +1 -1
  68. package/coverage/lcov-report/src/components/MlWmsLoader/index.html +1 -1
  69. package/coverage/lcov-report/src/contexts/MapContext.tsx.html +1 -1
  70. package/coverage/lcov-report/src/contexts/SimpleDataContext.js.html +1 -1
  71. package/coverage/lcov-report/src/contexts/SimpleDataProvider.js.html +1 -1
  72. package/coverage/lcov-report/src/contexts/index.html +1 -1
  73. package/coverage/lcov-report/src/hooks/index.html +11 -11
  74. package/coverage/lcov-report/src/hooks/useCameraFollowPath/index.html +1 -1
  75. package/coverage/lcov-report/src/hooks/useCameraFollowPath/useCameraFollowPath.tsx.html +1 -1
  76. package/coverage/lcov-report/src/hooks/useExportMap/index.html +14 -14
  77. package/coverage/lcov-report/src/hooks/useExportMap/index.ts.html +1 -1
  78. package/coverage/lcov-report/src/hooks/useExportMap/lib.ts.html +21 -108
  79. package/coverage/lcov-report/src/hooks/useLayer.ts.html +1 -1
  80. package/coverage/lcov-report/src/hooks/useLayerEvent.js.html +9 -9
  81. package/coverage/lcov-report/src/hooks/useMap.ts.html +1 -1
  82. package/coverage/lcov-report/src/hooks/useMapState.ts.html +1 -1
  83. package/coverage/lcov-report/src/hooks/useSource.ts.html +1 -1
  84. package/coverage/lcov-report/src/hooks/useWms.js.html +1 -1
  85. package/coverage/lcov-report/src/index.html +1 -1
  86. package/coverage/lcov-report/src/index.ts.html +5 -2
  87. package/coverage/lcov.info +50 -72
  88. package/dist/components/MlCreatePdfForm/MlCreatePdfForm.stories.d.ts +1 -0
  89. package/dist/components/MlCreatePdfForm/lib/PdfContext.d.ts +3 -16
  90. package/dist/components/MlCreatePdfForm/lib/PdfPreview.d.ts +19 -6
  91. package/dist/components/MlCreatePdfForm/lib/_PdfPreview.d.ts +13 -0
  92. package/dist/index.d.ts +1 -0
  93. package/dist/index.esm.js +505 -597
  94. package/dist/index.esm.js.map +1 -1
  95. package/package.json +2 -1
  96. package/src/components/MlCreatePdfForm/MlCreatePdfForm.stories.tsx +16 -1
  97. package/src/components/MlCreatePdfForm/MlCreatePdfForm.tsx +0 -2
  98. package/src/components/MlCreatePdfForm/lib/PdfContext.tsx +16 -18
  99. package/src/components/MlCreatePdfForm/lib/PdfForm.tsx +78 -5
  100. package/src/components/MlCreatePdfForm/lib/PdfPreview.tsx +285 -357
  101. package/src/components/MlCreatePdfForm/lib/_PdfPreview.tsx +399 -0
  102. package/src/components/MlCreatePdfForm/lib/pdfContext.d.ts +24 -0
  103. package/src/components/MlCreatePdfForm/lib/preview.css +114 -0
  104. package/src/hooks/useExportMap/lib.ts +14 -43
  105. package/src/index.ts +1 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mapcomponents/react-maplibre",
3
- "version": "0.1.61",
3
+ "version": "0.1.62",
4
4
  "main": "index.js",
5
5
  "license": "MIT",
6
6
  "module": "dist/index.esm.js",
@@ -33,6 +33,7 @@
33
33
  "jspdf": "^2.5.1",
34
34
  "maplibre-gl": "^2.1.7",
35
35
  "react-i18next": "^11.14.3",
36
+ "react-moveable": "^0.41.1",
36
37
  "three": "^0.139.1",
37
38
  "uuid": "^8.3.2",
38
39
  "wms-capabilities": "^0.5.1",
@@ -10,7 +10,9 @@ import Draggable from 'react-draggable';
10
10
 
11
11
  import TopToolbar from '../../ui_components/TopToolbar';
12
12
 
13
+ import './lib/preview.css';
13
14
  import mapContextDecorator from '../../decorators/MapContextDecorator';
15
+
14
16
  const PaperComponent = (props: object) => {
15
17
  return (
16
18
  <Draggable handle="#draggable-dialog-title" cancel={'[class*="MuiDialogContent-root"]'}>
@@ -49,11 +51,14 @@ export default storyoptions;
49
51
 
50
52
  const Template = () => {
51
53
  const [showCreatePdfForm, setShowCreatePdfForm] = useState(false);
54
+ const targetRef = React.useRef<HTMLDivElement>(null);
55
+ const containerRef = React.useRef<HTMLDivElement>(document.querySelector('.map_container'));
52
56
 
57
+ // <MlWmsLayer url='https://geo.stat.fi/geoserver/vaestoruutu/wms' urlParameters={{layers:'vaki2005_1km_kp'}}/>
53
58
  return (
54
59
  <>
55
60
  <TopToolbar>
56
- <Button variant="contained" onClick={() => setShowCreatePdfForm(true)}>
61
+ <Button variant="contained" onClick={() => setShowCreatePdfForm(!showCreatePdfForm)}>
57
62
  PDF
58
63
  </Button>
59
64
  </TopToolbar>
@@ -150,3 +155,13 @@ const Template = () => {
150
155
  export const ExampleConfig = Template.bind({});
151
156
  ExampleConfig.parameters = {};
152
157
  ExampleConfig.args = {};
158
+
159
+
160
+ //const SidebarTemplate = function() {
161
+ //
162
+ // return <>
163
+ // </>;
164
+ //}
165
+ //export const SidebarExample = SidebarTemplate.bind({});
166
+ //SidebarExample.parameters = {};
167
+ //SidebarExample.args = {};
@@ -1,5 +1,4 @@
1
1
  import React from 'react';
2
- import PdfPreview from './lib/PdfPreview';
3
2
  import PdfForm from './lib/PdfForm';
4
3
  import { PdfContextProvider } from './lib/PdfContext';
5
4
  import { createPdfResolverParams } from '../../hooks/useExportMap/lib';
@@ -27,7 +26,6 @@ const MlCreatePdfForm = (props: MlCreatePdfFormProps) => {
27
26
  <>
28
27
  <PdfContextProvider>
29
28
  <PdfForm {...props} />
30
- <PdfPreview />
31
29
  </PdfContextProvider>
32
30
  </>
33
31
  );
@@ -1,31 +1,29 @@
1
- import React, { useState, useRef, useMemo, MutableRefObject } from 'react';
1
+ import React, { useState, useRef, useMemo } from 'react';
2
2
  import templates from './pdf.templates';
3
- import { Feature } from '@turf/turf';
3
+ import { PdfContextInterface, PdfPreviewOptions } from './pdfContext';
4
4
 
5
- interface PdfContextInterface {
6
- format: string;
7
- setFormat: (format: string) => void;
8
- quality: string;
9
- setQuality: (quality: string) => void;
10
- orientation: string;
11
- setOrientation: (orientation: string) => void;
12
- geojsonRef: MutableRefObject<Feature | undefined>;
13
- template: { width: number; height: number };
14
- }
15
5
 
16
- const PdfContext = React.createContext<Partial<PdfContextInterface>>({});
6
+ const PdfContext = React.createContext<PdfContextInterface>({} as PdfContextInterface);
17
7
 
18
8
  const defaultTemplate = templates['A4']['72dpi'];
19
9
  const PdfContextProvider = ({ children }: { children: React.ReactNode }) => {
20
10
  const [format, setFormat] = useState('A4');
21
11
  const [quality, setQuality] = useState('72dpi');
22
- const [orientation, setOrientation] = useState('portrait');
12
+ const [options, setOptions] = useState<PdfPreviewOptions>({
13
+ center: undefined,
14
+ scale: undefined,
15
+ rotate: 0,
16
+ width: 210,
17
+ height: 297,
18
+ orientation: 'portrait',
19
+ fixedScale: 0,
20
+ });
23
21
 
24
22
  const geojsonRef = useRef();
25
23
 
26
24
  const template = useMemo(() => {
27
25
  if (typeof templates[format][quality] !== 'undefined') {
28
- return orientation === 'portrait'
26
+ return options.orientation === 'portrait'
29
27
  ? templates[format][quality]
30
28
  : {
31
29
  width: templates[format][quality].height,
@@ -33,15 +31,15 @@ const PdfContextProvider = ({ children }: { children: React.ReactNode }) => {
33
31
  };
34
32
  }
35
33
  return defaultTemplate;
36
- }, [format, quality, orientation]);
34
+ }, [format, quality, options.orientation]);
37
35
 
38
36
  const value = {
37
+ options,
38
+ setOptions,
39
39
  format,
40
40
  setFormat,
41
41
  quality,
42
42
  setQuality,
43
- orientation,
44
- setOrientation,
45
43
  geojsonRef,
46
44
  template,
47
45
  };
@@ -1,5 +1,6 @@
1
1
  import React, { useContext, useMemo, useCallback } from 'react';
2
2
  import PdfContext from './PdfContext';
3
+ import PdfPreview from './PdfPreview';
3
4
  import {
4
5
  FormControl,
5
6
  MenuItem,
@@ -19,7 +20,46 @@ import { createPdfResolverParams } from '../../../hooks/useExportMap/lib';
19
20
  import * as turf from '@turf/turf';
20
21
 
21
22
  import templates from './pdf.templates';
23
+ import { PdfPreviewOptions } from './pdfContext';
22
24
 
25
+ const scaleOptions = [
26
+ {
27
+ value: 0,
28
+ label: 'free scale',
29
+ },
30
+ {
31
+ value: 250,
32
+ label: '1/250',
33
+ },
34
+ {
35
+ value: 500,
36
+ label: '1/500',
37
+ },
38
+ {
39
+ value: 750,
40
+ label: '1/750',
41
+ },
42
+ {
43
+ value: 1000,
44
+ label: '1/1000',
45
+ },
46
+ {
47
+ value: 1500,
48
+ label: '1/1500',
49
+ },
50
+ {
51
+ value: 2000,
52
+ label: '1/2000',
53
+ },
54
+ {
55
+ value: 10000,
56
+ label: '1/10000',
57
+ },
58
+ {
59
+ value: 100000,
60
+ label: '1/100000',
61
+ },
62
+ ];
23
63
  const qualityOptions = [
24
64
  {
25
65
  value: '72dpi',
@@ -57,7 +97,7 @@ export default function PdfForm(props: PdfFormProps) {
57
97
  mapExporter.createExport &&
58
98
  pdfContext.template &&
59
99
  pdfContext.format &&
60
- pdfContext.orientation &&
100
+ pdfContext.options?.orientation &&
61
101
  pdfContext.geojsonRef?.current?.bbox &&
62
102
  pdfContext.geojsonRef?.current
63
103
  ) {
@@ -69,9 +109,9 @@ export default function PdfForm(props: PdfFormProps) {
69
109
  height: pdfContext.template.height,
70
110
  bbox: bbox,
71
111
  bboxUnrotated: pdfContext.geojsonRef.current.bbox,
72
- bearing: pdfContext.geojsonRef.current?.properties?.bearing || 0,
112
+ bearing: (pdfContext.geojsonRef.current?.properties?.bearing as number) || 0,
73
113
  format: pdfContext.format.toLowerCase(),
74
- orientation: pdfContext.orientation,
114
+ orientation: pdfContext.options.orientation,
75
115
  })
76
116
  .then((res) => res.createPdf())
77
117
  .then((res) => {
@@ -124,9 +164,14 @@ export default function PdfForm(props: PdfFormProps) {
124
164
  row
125
165
  aria-labelledby="orientation-radio-buttons-group-label"
126
166
  name="orientation-radio-buttons-group"
127
- value={pdfContext.orientation}
167
+ value={pdfContext.options?.orientation}
128
168
  onChange={(event) => {
129
- pdfContext.setOrientation?.(event.target.value);
169
+ if (!pdfContext.setOptions) return;
170
+
171
+ pdfContext.setOptions((val: PdfPreviewOptions) => ({
172
+ ...val,
173
+ orientation: event.target.value as 'landscape' | 'portrait',
174
+ }));
130
175
  }}
131
176
  >
132
177
  <FormControlLabel value="portrait" control={<Radio />} label="Portrait" />
@@ -151,11 +196,39 @@ export default function PdfForm(props: PdfFormProps) {
151
196
  ))}
152
197
  </Select>
153
198
  </FormControl>
199
+ <FormControl fullWidth sx={formControlStyles}>
200
+ <InputLabel id="quality-select-label">Scale</InputLabel>
201
+ <Select
202
+ labelId="quality-select-label"
203
+ id="quality-select"
204
+ label="Qualität"
205
+ value={pdfContext?.options?.fixedScale}
206
+ onChange={(event) => {
207
+ pdfContext.setOptions?.((val) => ({
208
+ ...val,
209
+ fixedScale: event.target.value as number,
210
+ }));
211
+ }}
212
+ >
213
+ {scaleOptions.map((el, idx) => (
214
+ <MenuItem key={idx} value={el.value}>
215
+ {el.label}
216
+ </MenuItem>
217
+ ))}
218
+ </Select>
219
+ </FormControl>
154
220
  <FormControl fullWidth sx={formControlStyles}>
155
221
  <Button variant="contained" onClick={createPdfHandler}>
156
222
  PDF erstellen
157
223
  </Button>
158
224
  </FormControl>
225
+ {pdfContext.options && pdfContext.setOptions && (
226
+ <PdfPreview
227
+ options={pdfContext.options}
228
+ setOptions={pdfContext.setOptions}
229
+ geojsonRef={pdfContext.geojsonRef}
230
+ />
231
+ )}
159
232
  </>
160
233
  );
161
234
  }