{"version":3,"file":"143-a04437fb2b4a6a1de4ac.js","mappings":"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","sources":["webpack://voresby.web/./Scripts/components/map/business-map.tsx","webpack://voresby.web/./Scripts/components/map/leaflet-extended.css?6808","webpack://voresby.web/./Scripts/components/map/default-map.tsx","webpack://voresby.web/./Scripts/util/gtm.ts","webpack://voresby.web/./Scripts/components/map/leaflet-extended.css"],"sourcesContent":["import React, { useLayoutEffect, useState } from \"react\";\r\nimport { DefaultMap, DefaultMarker } from \"./default-map\";\r\nimport { BusinessApi } from \"../../lib-api\";\r\nimport { apiConfiguration } from \"../../api-configuration\";\r\nimport { createRoot } from \"react-dom/client\";\r\n\r\nconst api = new BusinessApi(apiConfiguration);\r\n\r\nconst BusinessMap: React.FC<{\r\n categoryId: string;\r\n latitude: number;\r\n longitude: number;\r\n}> = (props) => {\r\n const [markers, setMarkers] = useState();\r\n\r\n const getResult = async () => {\r\n const result = await api.getBusinessMapData({\r\n categoryId: props.categoryId,\r\n });\r\n setMarkers(\r\n result.businessMapEntries.map((x) => {\r\n return {\r\n data: [x.name, x.address, `${x.zipCode} ${x.city}`],\r\n position: [x.latitude!, x.longitude!],\r\n url: x.url,\r\n };\r\n })\r\n );\r\n };\r\n\r\n useLayoutEffect(() => {\r\n getResult();\r\n }, []);\r\n\r\n return (\r\n <>\r\n {markers && markers.length > 0 && (\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nconst element = document.getElementsByTagName(\"business-map\");\r\nif (element.length == 1) {\r\n const root = createRoot(element[0]);\r\n root.render(\r\n \r\n );\r\n}\r\n","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/dist/cjs.js!./leaflet-extended.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/dist/cjs.js!./leaflet-extended.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React, { useCallback } from \"react\";\r\nimport { Button } from \"react-bootstrap\";\r\nimport { MapContainer, TileLayer, Marker, Popup } from \"react-leaflet\";\r\nimport { divIcon, LatLngExpression } from \"leaflet\";\r\nimport \"leaflet/dist/leaflet.css\";\r\nimport \"./leaflet-extended.css\";\r\nimport { trackGaEvent } from \"../../util/gtm\";\r\n\r\nexport interface DefaultMarker {\r\n position: LatLngExpression;\r\n data: string[];\r\n url: string;\r\n}\r\n\r\nconst generateIcon = () => {\r\n return divIcon({\r\n iconAnchor: [18, 45],\r\n iconSize: [35, 45],\r\n html: \"\",\r\n });\r\n};\r\n\r\nconst generateMarkers = (item: DefaultMarker, index: number): JSX.Element => (\r\n \r\n \r\n \r\n {item.data.map((item, i) => (\r\n
\r\n {item}\r\n
\r\n
\r\n ))}\r\n
\r\n \r\n);\r\n\r\nexport const DefaultMap: React.FC<{\r\n markers?: DefaultMarker[];\r\n latitude: number;\r\n longitude: number;\r\n}> = (props) => {\r\n //const navUrl = `https://www.google.com/maps/search/?api=1&query=${props.latitude},${props.longitude}`;\r\n const navUrl = `https://www.google.com/maps/dir/?api=1&destination=${props.latitude},${props.longitude}`;\r\n\r\n const trackKpi = useCallback(() => {\r\n trackGaEvent(\"on_kpi\", {\r\n action: \"click_map\"\r\n });\r\n }, []);\r\n\r\n return (\r\n
\r\n \r\n \r\n {props.markers && <>{props.markers.map(generateMarkers)}}\r\n \r\n \r\n Rutevejledning\r\n \r\n
\r\n );\r\n};\r\n","declare const window: {\r\n dataLayer: any[];\r\n};\r\n\r\n/* If you add new ones here. Remeber to add them in Google Tag Manager GA4 Event Tag */\r\ntype validEvents =\r\n | \"on_cookie_consent\"\r\n | \"on_company_contact\"\r\n | \"on_facebook_carousel_clicked\"\r\n | \"on_shared_with_friend\"\r\n | \"on_content_task_feedback\"\r\n | \"on_newsletter_subscribe\"\r\n | \"on_external_link_clicked\"\r\n | \"on_questionnaire_submitted\"\r\n | \"on_one_tap\"\r\n | \"on_kpi\"\r\n | \"lead_generated\";\r\n\r\n/* If you add new ones here. Remeber to add them in Google Tag Manager GA4 Event Tag, And in CustomDefinitions IN GA4 */\r\ntype validParameters =\r\n | \"in_section\"\r\n | \"action\"\r\n | \"href\"\r\n | \"variant\"\r\n | \"lead_type\"\r\n | \"customer_id\"\r\n | \"customer_name\"\r\n | \"user_data\";\r\n\r\ntype validUserData = \"email\" | \"phone\" | \"zip\" | \"city\" | \"country\";\r\n\r\nexport function trackGaEvent(\r\n type: validEvents,\r\n parameters?: { [key in validParameters]?: string | number },\r\n userData?: { [key in validUserData]?: string | number },\r\n callback?: (id: string) => void\r\n) {\r\n window.dataLayer = window.dataLayer || [];\r\n //convert parameter keys to dlv_* for Tag Manager.\r\n const convertedParams = convertParams(parameters);\r\n\r\n const event: any = {\r\n event: type,\r\n ...convertedParams,\r\n };\r\n\r\n if (userData) {\r\n event.user_data = userData;\r\n }\r\n\r\n if (callback) {\r\n event.eventCallback = callback;\r\n }\r\n\r\n window.dataLayer.push(event);\r\n}\r\n\r\n/* If you add new ones here. Remeber to add them in Google Tag Manager GA4 DLV */\r\ntype validDataLayerVariables = \"page_type\" | \"category\";\r\n\r\nexport function setDataLayerVariables(parameters: {\r\n [key in validDataLayerVariables]?: string | number;\r\n}) {\r\n window.dataLayer = window.dataLayer || [];\r\n //convert parameter keys to dlv_* for Tag Manager.\r\n const convertedParams = convertParams(parameters);\r\n window.dataLayer.push({\r\n ...convertedParams,\r\n });\r\n}\r\n\r\nfunction convertParams(parameters?: { [key: string]: string | number }) {\r\n return parameters\r\n ? Object.fromEntries(\r\n Object.entries(parameters).map(([key, value]) => [`dlv_${key}`, value])\r\n )\r\n : {};\r\n}\r\n\r\nexport function trackVirtualPageView(url: string) {\r\n window.dataLayer = window.dataLayer || [];\r\n window.dataLayer.push({\r\n event: \"GAVirtualPageView\",\r\n virtualPageUrl: url,\r\n });\r\n}\r\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_GET_URL_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/getUrl.js\";\nvar ___CSS_LOADER_URL_IMPORT_0___ = new URL(\"./marker-red-35.png\", import.meta.url);\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_0___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.leaflet-marker-icon.leaflet-interactive,.leaflet-image-layer.leaflet-interactive,.leaflet-pane>svg path.leaflet-interactive{background-image:url(${___CSS_LOADER_URL_REPLACEMENT_0___});background-color:transparent;border:none;display:flex;justify-content:center}.leaflet-marker-icon.leaflet-interactive,.leaflet-image-layer.leaflet-interactive,.leaflet-pane>svg path.leaflet-interactive span{height:fit-content;color:#fff;padding-top:5px}.leaflet-popup-content p{margin:0px}.leaflet-container{z-index:0}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./Scripts/components/map/leaflet-extended.css\"],\"names\":[],\"mappings\":\"AACA,6HAGC,wDAA0C,CAC1C,4BAA6B,CAC7B,WAAY,CACZ,YAAa,CACb,sBAAuB,CACvB,kIAIC,kBAAmB,CACnB,UAAW,CACX,eAAgB,CACjB,yBAEC,UAAW,CACZ,mBAEC,SAAU\",\"sourcesContent\":[\"/* Default icon URLs */\\r\\n.leaflet-marker-icon.leaflet-interactive,\\r\\n.leaflet-image-layer.leaflet-interactive,\\r\\n.leaflet-pane > svg path.leaflet-interactive {\\r\\n\\tbackground-image: url(./marker-red-35.png);\\r\\n\\tbackground-color: transparent;\\r\\n\\tborder: none;\\r\\n\\tdisplay: flex;\\r\\n\\tjustify-content: center;\\r\\n}\\r\\n.leaflet-marker-icon.leaflet-interactive,\\r\\n.leaflet-image-layer.leaflet-interactive,\\r\\n.leaflet-pane > svg path.leaflet-interactive span {\\r\\n height: fit-content;\\r\\n color: #fff;\\r\\n padding-top: 5px;\\r\\n}\\r\\n.leaflet-popup-content p {\\r\\n margin: 0px;\\r\\n}\\r\\n.leaflet-container{\\r\\n z-index: 0;\\r\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n"],"names":["api","BusinessApi","apiConfiguration","BusinessMap","props","markers","setMarkers","useState","getResult","_ref","result","getBusinessMapData","categoryId","businessMapEntries","map","x","data","name","address","concat","zipCode","city","position","latitude","longitude","url","apply","arguments","useLayoutEffect","React","length","DefaultMap","element","document","getElementsByTagName","createRoot","render","getAttribute","valueOf","Number","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","locals","generateMarkers","item","index","Marker","key","icon","divIcon","iconAnchor","iconSize","html","Popup","href","style","textDecoration","i","navUrl","trackKpi","useCallback","trackGaEvent","action","className","MapContainer","center","zoom","scrollWheelZoom","height","TileLayer","attribution","Button","variant","size","target","onClick","type","parameters","userData","callback","window","dataLayer","event","_objectSpread","Object","fromEntries","entries","value","convertParams","user_data","eventCallback","push","___CSS_LOADER_URL_IMPORT_0___","URL","___CSS_LOADER_EXPORT___","___CSS_LOADER_URL_REPLACEMENT_0___","module","id"],"sourceRoot":""}