@vidro/map-handler 1.2.178 → 1.2.179
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/dist/map-handler.js +1 -1
- package/examples/react-next/README.md +40 -0
- package/examples/react-next/components/MapButtons.js +40 -0
- package/examples/react-next/components/MapIframe.js +25 -0
- package/examples/react-next/components/SessionComponent.js +136 -0
- package/examples/react-next/contexts/auth.js +99 -0
- package/examples/react-next/contexts/maps.js +139 -0
- package/examples/react-next/contexts/messages.js +345 -0
- package/examples/react-next/eslint.config.mjs +14 -0
- package/examples/react-next/hooks/useMapEvents.js +209 -0
- package/examples/react-next/jsconfig.json +7 -0
- package/examples/react-next/next.config.mjs +6 -0
- package/examples/react-next/package.json +24 -0
- package/examples/react-next/pages/_app.js +5 -0
- package/examples/react-next/pages/_document.js +13 -0
- package/examples/react-next/pages/index.js +77 -0
- package/examples/react-next/postcss.config.mjs +8 -0
- package/examples/react-next/public/favicon.ico +0 -0
- package/examples/react-next/public/file.svg +1 -0
- package/examples/react-next/public/globe.svg +1 -0
- package/examples/react-next/public/next.svg +1 -0
- package/examples/react-next/public/vercel.svg +1 -0
- package/examples/react-next/public/window.svg +1 -0
- package/examples/react-next/shared/constants.js +47 -0
- package/examples/react-next/shared/maps-service.js +65 -0
- package/examples/react-next/styles/globals.css +24 -0
- package/examples/react-next/tailwind.config.mjs +17 -0
- package/package.json +1 -1
- package/src/index.js +7 -7
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import MapButtons from "@/components/MapButtons";
|
|
2
|
+
import MapIframe from "@/components/MapIframe";
|
|
3
|
+
import SessionComponent from "@/components/SessionComponent";
|
|
4
|
+
import { AuthProvider } from "@/contexts/auth";
|
|
5
|
+
import { MapsProvider } from "@/contexts/maps";
|
|
6
|
+
import { MessageProvider } from "@/contexts/messages";
|
|
7
|
+
import Image from "next/image";
|
|
8
|
+
|
|
9
|
+
export default function Home() {
|
|
10
|
+
return (
|
|
11
|
+
<div>
|
|
12
|
+
<AuthProvider>
|
|
13
|
+
<MessageProvider>
|
|
14
|
+
<MapsProvider>
|
|
15
|
+
<main className="text-center">
|
|
16
|
+
<h1>Map component REACT integration</h1>
|
|
17
|
+
<div className="my-5">
|
|
18
|
+
<SessionComponent />
|
|
19
|
+
</div>
|
|
20
|
+
<div className="my-5 bg-gray-100 border border-gray-400 p-4">
|
|
21
|
+
<MapButtons />
|
|
22
|
+
<MapIframe />
|
|
23
|
+
</div>
|
|
24
|
+
</main>
|
|
25
|
+
</MapsProvider>
|
|
26
|
+
</MessageProvider>
|
|
27
|
+
</AuthProvider>
|
|
28
|
+
<footer className="row-start-3 flex gap-6 flex-wrap items-center justify-center">
|
|
29
|
+
<a
|
|
30
|
+
className="flex items-center gap-2 hover:underline hover:underline-offset-4"
|
|
31
|
+
href="https://nextjs.org/learn?utm_source=create-next-app&utm_medium=default-template-tw&utm_campaign=create-next-app"
|
|
32
|
+
target="_blank"
|
|
33
|
+
rel="noopener noreferrer"
|
|
34
|
+
>
|
|
35
|
+
<Image
|
|
36
|
+
aria-hidden
|
|
37
|
+
src="/file.svg"
|
|
38
|
+
alt="File icon"
|
|
39
|
+
width={16}
|
|
40
|
+
height={16}
|
|
41
|
+
/>
|
|
42
|
+
Learn
|
|
43
|
+
</a>
|
|
44
|
+
<a
|
|
45
|
+
className="flex items-center gap-2 hover:underline hover:underline-offset-4"
|
|
46
|
+
href="https://vercel.com/templates?framework=next.js&utm_source=create-next-app&utm_medium=default-template-tw&utm_campaign=create-next-app"
|
|
47
|
+
target="_blank"
|
|
48
|
+
rel="noopener noreferrer"
|
|
49
|
+
>
|
|
50
|
+
<Image
|
|
51
|
+
aria-hidden
|
|
52
|
+
src="/window.svg"
|
|
53
|
+
alt="Window icon"
|
|
54
|
+
width={16}
|
|
55
|
+
height={16}
|
|
56
|
+
/>
|
|
57
|
+
Examples
|
|
58
|
+
</a>
|
|
59
|
+
<a
|
|
60
|
+
className="flex items-center gap-2 hover:underline hover:underline-offset-4"
|
|
61
|
+
href="https://nextjs.org?utm_source=create-next-app&utm_medium=default-template-tw&utm_campaign=create-next-app"
|
|
62
|
+
target="_blank"
|
|
63
|
+
rel="noopener noreferrer"
|
|
64
|
+
>
|
|
65
|
+
<Image
|
|
66
|
+
aria-hidden
|
|
67
|
+
src="/globe.svg"
|
|
68
|
+
alt="Globe icon"
|
|
69
|
+
width={16}
|
|
70
|
+
height={16}
|
|
71
|
+
/>
|
|
72
|
+
Go to nextjs.org →
|
|
73
|
+
</a>
|
|
74
|
+
</footer>
|
|
75
|
+
</div>
|
|
76
|
+
);
|
|
77
|
+
}
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg fill="none" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M14.5 13.5V5.41a1 1 0 0 0-.3-.7L9.8.29A1 1 0 0 0 9.08 0H1.5v13.5A2.5 2.5 0 0 0 4 16h8a2.5 2.5 0 0 0 2.5-2.5m-1.5 0v-7H8v-5H3v12a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1M9.5 5V2.12L12.38 5zM5.13 5h-.62v1.25h2.12V5zm-.62 3h7.12v1.25H4.5zm.62 3h-.62v1.25h7.12V11z" clip-rule="evenodd" fill="#666" fill-rule="evenodd"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><g clip-path="url(#a)"><path fill-rule="evenodd" clip-rule="evenodd" d="M10.27 14.1a6.5 6.5 0 0 0 3.67-3.45q-1.24.21-2.7.34-.31 1.83-.97 3.1M8 16A8 8 0 1 0 8 0a8 8 0 0 0 0 16m.48-1.52a7 7 0 0 1-.96 0H7.5a4 4 0 0 1-.84-1.32q-.38-.89-.63-2.08a40 40 0 0 0 3.92 0q-.25 1.2-.63 2.08a4 4 0 0 1-.84 1.31zm2.94-4.76q1.66-.15 2.95-.43a7 7 0 0 0 0-2.58q-1.3-.27-2.95-.43a18 18 0 0 1 0 3.44m-1.27-3.54a17 17 0 0 1 0 3.64 39 39 0 0 1-4.3 0 17 17 0 0 1 0-3.64 39 39 0 0 1 4.3 0m1.1-1.17q1.45.13 2.69.34a6.5 6.5 0 0 0-3.67-3.44q.65 1.26.98 3.1M8.48 1.5l.01.02q.41.37.84 1.31.38.89.63 2.08a40 40 0 0 0-3.92 0q.25-1.2.63-2.08a4 4 0 0 1 .85-1.32 7 7 0 0 1 .96 0m-2.75.4a6.5 6.5 0 0 0-3.67 3.44 29 29 0 0 1 2.7-.34q.31-1.83.97-3.1M4.58 6.28q-1.66.16-2.95.43a7 7 0 0 0 0 2.58q1.3.27 2.95.43a18 18 0 0 1 0-3.44m.17 4.71q-1.45-.12-2.69-.34a6.5 6.5 0 0 0 3.67 3.44q-.65-1.27-.98-3.1" fill="#666"/></g><defs><clipPath id="a"><path fill="#fff" d="M0 0h16v16H0z"/></clipPath></defs></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 394 80"><path fill="#000" d="M262 0h68.5v12.7h-27.2v66.6h-13.6V12.7H262V0ZM149 0v12.7H94v20.4h44.3v12.6H94v21h55v12.6H80.5V0h68.7zm34.3 0h-17.8l63.8 79.4h17.9l-32-39.7 32-39.6h-17.9l-23 28.6-23-28.6zm18.3 56.7-9-11-27.1 33.7h17.8l18.3-22.7z"/><path fill="#000" d="M81 79.3 17 0H0v79.3h13.6V17l50.2 62.3H81Zm252.6-.4c-1 0-1.8-.4-2.5-1s-1.1-1.6-1.1-2.6.3-1.8 1-2.5 1.6-1 2.6-1 1.8.3 2.5 1a3.4 3.4 0 0 1 .6 4.3 3.7 3.7 0 0 1-3 1.8zm23.2-33.5h6v23.3c0 2.1-.4 4-1.3 5.5a9.1 9.1 0 0 1-3.8 3.5c-1.6.8-3.5 1.3-5.7 1.3-2 0-3.7-.4-5.3-1s-2.8-1.8-3.7-3.2c-.9-1.3-1.4-3-1.4-5h6c.1.8.3 1.6.7 2.2s1 1.2 1.6 1.5c.7.4 1.5.5 2.4.5 1 0 1.8-.2 2.4-.6a4 4 0 0 0 1.6-1.8c.3-.8.5-1.8.5-3V45.5zm30.9 9.1a4.4 4.4 0 0 0-2-3.3 7.5 7.5 0 0 0-4.3-1.1c-1.3 0-2.4.2-3.3.5-.9.4-1.6 1-2 1.6a3.5 3.5 0 0 0-.3 4c.3.5.7.9 1.3 1.2l1.8 1 2 .5 3.2.8c1.3.3 2.5.7 3.7 1.2a13 13 0 0 1 3.2 1.8 8.1 8.1 0 0 1 3 6.5c0 2-.5 3.7-1.5 5.1a10 10 0 0 1-4.4 3.5c-1.8.8-4.1 1.2-6.8 1.2-2.6 0-4.9-.4-6.8-1.2-2-.8-3.4-2-4.5-3.5a10 10 0 0 1-1.7-5.6h6a5 5 0 0 0 3.5 4.6c1 .4 2.2.6 3.4.6 1.3 0 2.5-.2 3.5-.6 1-.4 1.8-1 2.4-1.7a4 4 0 0 0 .8-2.4c0-.9-.2-1.6-.7-2.2a11 11 0 0 0-2.1-1.4l-3.2-1-3.8-1c-2.8-.7-5-1.7-6.6-3.2a7.2 7.2 0 0 1-2.4-5.7 8 8 0 0 1 1.7-5 10 10 0 0 1 4.3-3.5c2-.8 4-1.2 6.4-1.2 2.3 0 4.4.4 6.2 1.2 1.8.8 3.2 2 4.3 3.4 1 1.4 1.5 3 1.5 5h-5.8z"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1155 1000"><path d="m577.3 0 577.4 1000H0z" fill="#fff"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path fill-rule="evenodd" clip-rule="evenodd" d="M1.5 2.5h13v10a1 1 0 0 1-1 1h-11a1 1 0 0 1-1-1zM0 1h16v11.5a2.5 2.5 0 0 1-2.5 2.5h-11A2.5 2.5 0 0 1 0 12.5zm3.75 4.5a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5M7 4.75a.75.75 0 1 1-1.5 0 .75.75 0 0 1 1.5 0m1.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5" fill="#666"/></svg>
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
export const INFO_EVENTS = {
|
|
2
|
+
NO_RESULTS: "no results",
|
|
3
|
+
NO_LAYER: "no layer",
|
|
4
|
+
INVALID_GEOMETRY: "invalid geometry",
|
|
5
|
+
ZOOM_OVERFLOW: "zoomlevel overflow",
|
|
6
|
+
NO_GEOJSON_RESULTS: "no geojson results",
|
|
7
|
+
};
|
|
8
|
+
export const COMMON = {
|
|
9
|
+
START: "start",
|
|
10
|
+
REJECT: "reject",
|
|
11
|
+
};
|
|
12
|
+
export const GEOLOCATION_EVENTS = {
|
|
13
|
+
ERROR: "geolocation error",
|
|
14
|
+
GEOLOCATING: "localizing",
|
|
15
|
+
GEOLOCATED: "localized",
|
|
16
|
+
ERROR_USER_DENIED: "user denied geolocation",
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
export const MEASURING_EVENTS = {
|
|
20
|
+
MEASURING: "measuring",
|
|
21
|
+
MEASURE_END: "measured",
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
export const MAP_EVENTS = {
|
|
25
|
+
INFO: "info",
|
|
26
|
+
COORDINATES: "coordinates",
|
|
27
|
+
GET_TOC: "getToc",
|
|
28
|
+
ZOOM_CHANGE: "onZoomChange",
|
|
29
|
+
CENTER_CHANGE: "onCenterChange",
|
|
30
|
+
LOADED: "loaded",
|
|
31
|
+
ERROR: "error",
|
|
32
|
+
AVAILABLE_WMS_LAYERS: "availableWMSLayers",
|
|
33
|
+
CAPABILITIES: "capabilities",
|
|
34
|
+
GISWATER_FILTERS_APPLIED: "GiswaterFiltersApplied",
|
|
35
|
+
GEOLOCATION: "geolocation",
|
|
36
|
+
END_MEASURE: "MeasureEnd",
|
|
37
|
+
START_MEASURE: "MeasureStart",
|
|
38
|
+
UNLOADED: "unloaded",
|
|
39
|
+
CENTER_CHANGE: "onCenterChange",
|
|
40
|
+
ACTIVE_LAYER: "activeLayer",
|
|
41
|
+
WMS_LAYERS: "availableWMSLayers",
|
|
42
|
+
STATUS: "status",
|
|
43
|
+
GEOM_ADDED: "geomAdded",
|
|
44
|
+
LAYERS: "layers",
|
|
45
|
+
VERSION: "version",
|
|
46
|
+
SCREENSHOT: "screenshot",
|
|
47
|
+
};
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
// Helper function to handle fetch responses
|
|
2
|
+
const handleResponse = async (response) => {
|
|
3
|
+
if (!response.ok) {
|
|
4
|
+
throw new Error(`HTTP error! status: ${response.status}`);
|
|
5
|
+
}
|
|
6
|
+
return response.json();
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
/*** Get map */
|
|
10
|
+
const getMap = async (id) => {
|
|
11
|
+
let url = `map/${id}`;
|
|
12
|
+
|
|
13
|
+
try {
|
|
14
|
+
const response = await fetch(url, {
|
|
15
|
+
method: "GET",
|
|
16
|
+
headers: {
|
|
17
|
+
"Content-Type": "application/json",
|
|
18
|
+
},
|
|
19
|
+
});
|
|
20
|
+
return handleResponse(response);
|
|
21
|
+
} catch (error) {
|
|
22
|
+
console.error("Error fetching map:", error);
|
|
23
|
+
throw error;
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
/*** Get map info */
|
|
28
|
+
const getMapInfo = async (id) => {
|
|
29
|
+
try {
|
|
30
|
+
const response = await fetch(`map/detail/${id}`, {
|
|
31
|
+
method: "GET",
|
|
32
|
+
headers: {
|
|
33
|
+
"Content-Type": "application/json",
|
|
34
|
+
},
|
|
35
|
+
});
|
|
36
|
+
return handleResponse(response);
|
|
37
|
+
} catch (error) {
|
|
38
|
+
console.error("Error fetching map info:", error);
|
|
39
|
+
throw error;
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
/*** Get map toc */
|
|
44
|
+
const getMapToc = async (id) => {
|
|
45
|
+
try {
|
|
46
|
+
const response = await fetch(`map/toc/${id}`, {
|
|
47
|
+
method: "GET",
|
|
48
|
+
headers: {
|
|
49
|
+
"Content-Type": "application/json",
|
|
50
|
+
},
|
|
51
|
+
});
|
|
52
|
+
return handleResponse(response);
|
|
53
|
+
} catch (error) {
|
|
54
|
+
console.error("Error fetching map TOC:", error);
|
|
55
|
+
throw error;
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
const MapService = {
|
|
60
|
+
getMap,
|
|
61
|
+
getMapInfo,
|
|
62
|
+
getMapToc,
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
export default MapService;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
@tailwind base;
|
|
2
|
+
@tailwind components;
|
|
3
|
+
@tailwind utilities;
|
|
4
|
+
|
|
5
|
+
/* Update tailwind to hide input type number arrows */
|
|
6
|
+
@layer base {
|
|
7
|
+
|
|
8
|
+
input[type="number"]::-webkit-inner-spin-button,
|
|
9
|
+
input[type="number"]::-webkit-outer-spin-button {
|
|
10
|
+
-webkit-appearance: none;
|
|
11
|
+
margin: 0;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
html,
|
|
16
|
+
body {
|
|
17
|
+
padding: 0;
|
|
18
|
+
margin: 0;
|
|
19
|
+
font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen,
|
|
20
|
+
Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
|
|
21
|
+
color: #666666;
|
|
22
|
+
min-height: 100vh;
|
|
23
|
+
background-color: white;
|
|
24
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/** @type {import('tailwindcss').Config} */
|
|
2
|
+
export default {
|
|
3
|
+
content: [
|
|
4
|
+
"./pages/**/*.{js,ts,jsx,tsx,mdx}",
|
|
5
|
+
"./components/**/*.{js,ts,jsx,tsx,mdx}",
|
|
6
|
+
"./app/**/*.{js,ts,jsx,tsx,mdx}",
|
|
7
|
+
],
|
|
8
|
+
theme: {
|
|
9
|
+
extend: {
|
|
10
|
+
colors: {
|
|
11
|
+
background: "var(--background)",
|
|
12
|
+
foreground: "var(--foreground)",
|
|
13
|
+
},
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
plugins: [],
|
|
17
|
+
};
|
package/package.json
CHANGED
package/src/index.js
CHANGED
|
@@ -403,6 +403,13 @@ class Communicator extends EventEmitter {
|
|
|
403
403
|
};
|
|
404
404
|
|
|
405
405
|
zoomToExtent = () => {
|
|
406
|
+
this.com.sendMessageToMap({
|
|
407
|
+
type: "zoomToExtent",
|
|
408
|
+
sessionToken: this.sessionToken,
|
|
409
|
+
});
|
|
410
|
+
};
|
|
411
|
+
|
|
412
|
+
zoomToScale = (scale) => {
|
|
406
413
|
const allowedScales = [
|
|
407
414
|
"1:100",
|
|
408
415
|
"1:200",
|
|
@@ -427,13 +434,6 @@ class Communicator extends EventEmitter {
|
|
|
427
434
|
});
|
|
428
435
|
return;
|
|
429
436
|
}
|
|
430
|
-
this.com.sendMessageToMap({
|
|
431
|
-
type: "zoomToExtent",
|
|
432
|
-
sessionToken: this.sessionToken,
|
|
433
|
-
});
|
|
434
|
-
};
|
|
435
|
-
|
|
436
|
-
zoomToScale = (scale) => {
|
|
437
437
|
this.com.sendMessageToMap({
|
|
438
438
|
type: "zoomToScale",
|
|
439
439
|
sessionToken: this.sessionToken,
|