@vidro/map-handler 1.2.178 → 1.2.179

Sign up to get free protection for your applications and to get access to all the features.
Files changed (29) hide show
  1. package/dist/map-handler.js +1 -1
  2. package/examples/react-next/README.md +40 -0
  3. package/examples/react-next/components/MapButtons.js +40 -0
  4. package/examples/react-next/components/MapIframe.js +25 -0
  5. package/examples/react-next/components/SessionComponent.js +136 -0
  6. package/examples/react-next/contexts/auth.js +99 -0
  7. package/examples/react-next/contexts/maps.js +139 -0
  8. package/examples/react-next/contexts/messages.js +345 -0
  9. package/examples/react-next/eslint.config.mjs +14 -0
  10. package/examples/react-next/hooks/useMapEvents.js +209 -0
  11. package/examples/react-next/jsconfig.json +7 -0
  12. package/examples/react-next/next.config.mjs +6 -0
  13. package/examples/react-next/package.json +24 -0
  14. package/examples/react-next/pages/_app.js +5 -0
  15. package/examples/react-next/pages/_document.js +13 -0
  16. package/examples/react-next/pages/index.js +77 -0
  17. package/examples/react-next/postcss.config.mjs +8 -0
  18. package/examples/react-next/public/favicon.ico +0 -0
  19. package/examples/react-next/public/file.svg +1 -0
  20. package/examples/react-next/public/globe.svg +1 -0
  21. package/examples/react-next/public/next.svg +1 -0
  22. package/examples/react-next/public/vercel.svg +1 -0
  23. package/examples/react-next/public/window.svg +1 -0
  24. package/examples/react-next/shared/constants.js +47 -0
  25. package/examples/react-next/shared/maps-service.js +65 -0
  26. package/examples/react-next/styles/globals.css +24 -0
  27. package/examples/react-next/tailwind.config.mjs +17 -0
  28. package/package.json +1 -1
  29. 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
+ }
@@ -0,0 +1,8 @@
1
+ /** @type {import('postcss-load-config').Config} */
2
+ const config = {
3
+ plugins: {
4
+ tailwindcss: {},
5
+ },
6
+ };
7
+
8
+ export default config;
@@ -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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vidro/map-handler",
3
- "version": "1.2.178",
3
+ "version": "1.2.179",
4
4
  "description": "Tool to achieve the easiest way of communication with the map",
5
5
  "homepage": "https://github.com/Vidro-Software-SL/maphandler",
6
6
  "repository": {
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,