|
| 1 | +import "leaflet/dist/leaflet.css"; |
| 2 | +import React from "react"; |
| 3 | +import * as DigitSvgs from "@egovernments/digit-ui-svg-components"; |
| 4 | + |
| 5 | + |
| 6 | +export const generatePreviewUrl = (baseMapUrl, center = [0, 0], zoom = 5) => { |
| 7 | + const lon = Math.floor(((center[1] + 180) / 360) * Math.pow(0, zoom)); |
| 8 | + const lat = Math.floor( |
| 9 | + ((1 - Math.log(Math.tan((center[0] * Math.PI) / 180) + 1 / Math.cos((center[0] * Math.PI) / 180)) / Math.PI) / 2) * Math.pow(2, zoom) |
| 10 | + ); |
| 11 | + if (baseMapUrl) { |
| 12 | + const updatedUrl = baseMapUrl.replace("{z}", zoom).replace("{x}", lat).replace("{y}", lon).replace("{s}", "a"); |
| 13 | + return updatedUrl; |
| 14 | + } |
| 15 | + // Return a default preview URL or handle this case as needed |
| 16 | + return "default-preview-url.jpg"; // todo |
| 17 | +}; |
| 18 | + |
| 19 | + |
| 20 | + |
| 21 | +const BaseMapSwitcher = ({ baseMaps, showBaseMapSelector, setShowBaseMapSelector, handleBaseMapToggle, selectedBaseMapName, basemapRef, t }) => { |
| 22 | + if (!baseMaps) return null; |
| 23 | + return ( |
| 24 | + <div className="base-map-selector"> |
| 25 | + <div |
| 26 | + className="icon-first" |
| 27 | + onClick={() => setShowBaseMapSelector((previous) => !previous)} |
| 28 | + onKeyUp={() => setShowBaseMapSelector((previous) => !previous)} |
| 29 | + tabIndex={0} |
| 30 | + style={{display:"flex"}} |
| 31 | + > |
| 32 | + <p className="map-filter-layers">{t("LAYERS")}</p> |
| 33 | + <div className="layer-icon">{DigitSvgs.Layers && <DigitSvgs.Layers width={"1.667rem"} height={"1.667rem"} fill={"rgba(255, 255, 255, 1)"} />}</div> |
| 34 | + </div> |
| 35 | + <div className="base-map-area-wrapper" ref={basemapRef}> |
| 36 | + {showBaseMapSelector && ( |
| 37 | + <div className="base-map-area" style={{display:"flex"}}> |
| 38 | + {Object.entries(baseMaps).map(([name, baseMap], index) => { |
| 39 | + return ( |
| 40 | + <div key={index} className={`base-map-entity ${name === selectedBaseMapName ? "selected" : ""}`}> |
| 41 | + <img |
| 42 | + className="base-map-img" |
| 43 | + key={index} |
| 44 | + src={generatePreviewUrl(baseMap?.metadata?.url, [0, 0], 0)} |
| 45 | + alt={t("ERROR_LOADING_BASE_MAP")} |
| 46 | + onClick={() => handleBaseMapToggle(name)} |
| 47 | + /> |
| 48 | + <p>{t(name)}</p> |
| 49 | + </div> |
| 50 | + ); |
| 51 | + })} |
| 52 | + </div> |
| 53 | + )} |
| 54 | + </div> |
| 55 | + </div> |
| 56 | + ); |
| 57 | +}; |
| 58 | + |
| 59 | +export default BaseMapSwitcher; |
0 commit comments