{"version":3,"file":"static/chunks/1512-85a2a002dbe3d256.js","mappings":"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","sources":["webpack://_N_E/./hooks/useMap.ts","webpack://_N_E/./components/map/Map.tsx","webpack://_N_E/./components/map/SearchStaticMap.tsx","webpack://_N_E/./components/map/StaticMap.tsx","webpack://_N_E/./components/search/SearchMapWrapper.tsx","webpack://_N_E/./components/search/useHighlightedSlug.tsx","webpack://_N_E/./components/search/useSearchPageParams.tsx","webpack://_N_E/./hooks/useQueryParams.tsx","webpack://_N_E/./hooks/useScreenSize.tsx","webpack://_N_E/./hooks/useWebGL.ts","webpack://_N_E/./utils/mapbox.ts","webpack://_N_E/./public/images/brands/TGR.svg","webpack://_N_E/./public/images/brands/welkin-and-meraki.svg"],"sourcesContent":["import { Feature, Geometry } from 'geojson';\nimport mapboxgl, {\n GeoJSONSource,\n LngLat,\n LngLatBounds,\n LngLatBoundsLike,\n MapboxGeoJSONFeature,\n} from 'mapbox-gl';\nimport { useLocale } from 'next-intl';\nimport { MutableRefObject, useEffect } from 'react';\n\nimport { Bounds, CameraMapOptions, MapItem } from '@/components/map/types';\nimport useSearchPageParams from '@/components/search/useSearchPageParams';\nimport { CURRENT_LOCATION_VALUE } from '@/components/search/utils';\nimport { MAP_STYLE } from '@/utils/constants';\nimport {\n getArrayOfKeyRenderedFeaturesWithinView,\n getUniqueFeatures,\n} from '@/utils/mapbox';\n\nconst SOURCE_ID = 'industrious-locations';\nconst CLUSTERS_LAYER_ID = 'clusters';\nconst UNCLUSTERS_LAYER_ID = 'unclustered-points';\nconst ANIMATION_DURATION = 1000;\nconst CLUSTER_MAX_ZOOM = 10;\nconst MAX_ZOOM_POPUP_CLUSTERS = 12;\n\nexport type OnMoveEndProps = {\n bounds: Bounds;\n center: LngLat;\n zoom?: number;\n shouldNotUpdateQueryParams?: boolean;\n};\nexport type OnZoomChangeProps = OnMoveEndProps & {\n isZoomIn: boolean;\n visibleSlugs: string[];\n};\n\ntype UseMapProps = {\n features: Feature[];\n haveParamsWithCoords: boolean;\n initialCameraOptions: CameraMapOptions;\n map: MutableRefObject;\n mapboxAccessToken: string;\n mapContainer: MutableRefObject;\n minZoom?: number;\n maxZoom?: number;\n clusterPerLocation?: boolean;\n staticMapRef: MutableRefObject;\n onMarkerClicked?: (props: T | T[] | undefined) => void;\n onZoomChange?: (props: OnZoomChangeProps) => void;\n onMoveEnd?: (props: OnMoveEndProps) => void;\n onIdle?: (bounds: Bounds) => void;\n};\n\nexport function useMap({\n features,\n haveParamsWithCoords,\n initialCameraOptions,\n map,\n mapboxAccessToken,\n mapContainer,\n minZoom,\n maxZoom,\n clusterPerLocation,\n staticMapRef,\n onMarkerClicked,\n onZoomChange,\n onMoveEnd,\n onIdle,\n}: UseMapProps) {\n const locale = useLocale();\n const { queryParams } = useSearchPageParams();\n\n useEffect(() => {\n if (queryParams.query === CURRENT_LOCATION_VALUE) {\n addCurrentPositionMarker();\n }\n }, [queryParams.query]);\n\n useEffect(() => {\n if (!map.current) return;\n refreshSource(map.current);\n }, [features]);\n\n const getInitialCenter = () => {\n const centerParam = queryParams.center as string;\n const boundsParam = queryParams.bounds as string;\n\n if (haveParamsWithCoords) {\n const queryZoom = +(queryParams.zoom as string);\n return {\n ...(boundsParam && {\n bounds: boundsParam.split(',') as unknown as LngLatBoundsLike,\n }),\n center: {\n lng: +centerParam.split(',')[0],\n lat: +centerParam.split(',')[1],\n },\n zoom: minZoom ? Math.max(queryZoom, minZoom) : queryZoom,\n };\n }\n\n return {\n center: initialCameraOptions.center,\n zoom: initialCameraOptions.zoom,\n bounds: initialCameraOptions.bounds,\n };\n };\n\n const initializeMap = () => {\n if (!mapContainer.current) return;\n\n mapboxgl.accessToken = mapboxAccessToken;\n map.current = new mapboxgl.Map({\n container: mapContainer.current,\n style: `mapbox://styles/mapbox/${MAP_STYLE}`,\n minZoom,\n maxZoom: maxZoom || undefined,\n ...getInitialCenter(),\n });\n\n map.current.addControl(\n new mapboxgl.NavigationControl({ showCompass: false }),\n 'top-left'\n );\n\n map.current.on('load', () => {\n map.current?.setLayoutProperty('country-label', 'text-field', [\n 'get',\n `name_${locale}`,\n ]);\n\n addSourceIntoMap();\n addClusters();\n\n handleClickMap();\n handleClusterHover();\n handleMarkerHover();\n\n if (queryParams.query === CURRENT_LOCATION_VALUE) {\n addCurrentPositionMarker();\n }\n\n map.current?.once('idle', () => {\n onIdle?.(mapLngLatBounds(map.current?.getBounds() as LngLatBounds));\n if (staticMapRef.current) {\n staticMapRef.current.style.visibility = 'hidden';\n }\n });\n\n if (onZoomChange) {\n map.current?.on('zoomend', (e) => {\n handleZoomChange(isZoomIn(e as IsZoomInProps));\n });\n }\n\n map.current?.on('moveend', (event) => {\n if (\n !map.current ||\n !onMoveEnd ||\n !event.originalEvent ||\n event.originalEvent.type === 'wheel'\n )\n return;\n\n onMoveEnd({\n center: map.current.getCenter(),\n bounds: mapLngLatBounds(map.current.getBounds()),\n zoom: map.current.getZoom(),\n shouldNotUpdateQueryParams: event.shouldNotUpdateQueryParams || false,\n });\n });\n });\n };\n\n const addCurrentPositionMarker = () => {\n const centerParam = queryParams.center as string;\n if (map.current?.getSource('points')) return;\n map.current?.loadImage(\n '../icons/markerCurrentPosition.png',\n (error, image) => {\n if (error || !image) throw error;\n map.current?.addImage('custom-marker', image);\n\n map.current?.addSource('points', {\n type: 'geojson',\n data: {\n type: 'FeatureCollection',\n features: [\n {\n type: 'Feature',\n geometry: {\n type: 'Point',\n coordinates: [\n +centerParam.split(',')[0],\n +centerParam.split(',')[1],\n ],\n },\n properties: {},\n },\n ],\n },\n });\n\n map.current?.addLayer({\n id: 'points',\n type: 'symbol',\n source: 'points',\n layout: {\n 'icon-size': 0.7,\n 'icon-image': 'custom-marker',\n },\n });\n }\n );\n };\n\n const addSourceIntoMap = () => {\n map.current?.addSource(SOURCE_ID, {\n type: 'geojson',\n cluster: true,\n ...(!clusterPerLocation && {\n clusterMaxZoom: CLUSTER_MAX_ZOOM,\n }),\n generateId: true,\n data: {\n type: 'FeatureCollection',\n features,\n },\n });\n };\n\n const refreshSource = (map: mapboxgl.Map) => {\n (map.getSource(SOURCE_ID) as GeoJSONSource)?.setData({\n type: 'FeatureCollection',\n features,\n });\n };\n\n const addClustersCountText = () => {\n map.current?.addLayer({\n id: 'cluster-count',\n type: 'symbol',\n source: SOURCE_ID,\n filter: ['has', 'point_count'],\n layout: {\n 'text-field': ['get', 'point_count_abbreviated'],\n 'text-size': 12,\n },\n paint: {\n 'text-color': '#ffffff',\n },\n });\n };\n\n const addClusters = () => {\n map.current?.addLayer({\n id: CLUSTERS_LAYER_ID,\n type: 'circle',\n source: SOURCE_ID,\n filter: ['has', 'point_count'],\n paint: {\n // https://docs.mapbox.com/mapbox-gl-js/style-spec/#expressions-step\n // * 15px circles when point count is less than 10\n // * 22px circles when point count is between 10 and 20\n // * 30px circles when point count is greater than or equal to 20\n 'circle-color': '#002D2D',\n 'circle-radius': [\n 'case',\n ['boolean', ['feature-state', 'hover'], false],\n ['step', ['get', 'point_count'], 20, 10, 25, 20, 35],\n ['step', ['get', 'point_count'], 15, 10, 22, 20, 30],\n ],\n 'circle-radius-transition': { duration: 5000 },\n },\n });\n\n map.current?.addLayer({\n id: UNCLUSTERS_LAYER_ID,\n type: 'circle',\n source: SOURCE_ID,\n filter: ['!', ['has', 'point_count']],\n paint: {\n 'circle-color': [\n 'case',\n ['boolean', ['feature-state', 'hover'], false],\n '#FDD344',\n '#002D2D',\n ],\n 'circle-radius': [\n 'case',\n ['boolean', ['feature-state', 'hover'], false],\n 7,\n 8,\n ],\n 'circle-stroke-width': [\n 'case',\n ['boolean', ['feature-state', 'hover'], false],\n 1,\n 8,\n ],\n 'circle-stroke-color': [\n 'case',\n ['boolean', ['feature-state', 'hover'], false],\n '#002D2D',\n 'transparent',\n ],\n },\n });\n\n addClustersCountText();\n };\n\n // helper to get the rendered features in the map\n function getRenderedFeatureByLayerId(params: {\n point?: mapboxgl.Point;\n layerId: string | string[];\n }) {\n const { point, layerId } = params;\n\n return map.current?.queryRenderedFeatures(point, {\n layers: Array.isArray(layerId) ? layerId : [layerId],\n });\n }\n\n const handleClickMap = () => {\n map.current?.on('click', (e) => {\n const features = getRenderedFeatureByLayerId({\n point: e.point,\n layerId: [CLUSTERS_LAYER_ID, UNCLUSTERS_LAYER_ID],\n });\n\n if (!features) return;\n\n if (features?.length === 0) {\n onMarkerClicked?.(undefined);\n highlightPointOnMap(undefined);\n return;\n }\n\n if (features[0].layer.id === UNCLUSTERS_LAYER_ID) {\n onMarkerClicked?.(features[0].properties as T);\n highlightPointOnMap(features[0].properties?.slug);\n return;\n }\n\n handleClusterClick(features[0]);\n });\n };\n\n const handleClusterClick = (feature: mapboxgl.MapboxGeoJSONFeature) => {\n const clusterId = feature.properties?.cluster_id;\n\n const source = map.current?.getSource(SOURCE_ID) as mapboxgl.GeoJSONSource;\n const zoom = map.current?.getZoom();\n\n if (clusterPerLocation) {\n if (\n zoom &&\n zoom < MAX_ZOOM_POPUP_CLUSTERS &&\n feature.geometry.type === 'Point'\n ) {\n map.current?.easeTo({\n center: [\n feature.geometry.coordinates[0],\n feature.geometry.coordinates[1],\n ],\n zoom: zoom + 3,\n duration: ANIMATION_DURATION,\n });\n } else {\n source.getClusterLeaves(\n clusterId,\n feature.properties?.point_count,\n 0,\n function (err, aFeatures) {\n if (!onMarkerClicked) return;\n onMarkerClicked(aFeatures.map((a) => a.properties) as T[]);\n highlightPointOnMap(aFeatures[0].properties?.slug);\n }\n );\n }\n } else {\n source.getClusterExpansionZoom(clusterId, (err, zoom) => {\n if (err) return;\n\n if (feature.geometry.type === 'Point') {\n map.current?.easeTo({\n center: [\n feature.geometry.coordinates[0],\n feature.geometry.coordinates[1],\n ],\n zoom,\n duration: ANIMATION_DURATION,\n });\n }\n });\n }\n };\n\n const handleClusterHover = () => {\n if (!map.current) return;\n const currentMap = map.current;\n\n currentMap.on('mouseenter', CLUSTERS_LAYER_ID, () => {\n currentMap.getCanvas().style.cursor = 'pointer';\n });\n currentMap.on('mouseleave', CLUSTERS_LAYER_ID, () => {\n currentMap.getCanvas().style.cursor = '';\n });\n };\n\n const handleMarkerHover = () => {\n if (!map.current) return;\n const currentMap = map.current;\n\n currentMap.on('mouseenter', UNCLUSTERS_LAYER_ID, () => {\n currentMap.getCanvas().style.cursor = 'pointer';\n });\n currentMap.on('mouseleave', UNCLUSTERS_LAYER_ID, () => {\n currentMap.getCanvas().style.cursor = '';\n });\n };\n\n const handleZoomChange = async (isZoomIn?: boolean) => {\n if (map.current && onZoomChange) {\n const visibleSlugs = await getVisiblePointSlugs();\n onZoomChange({\n center: map.current.getCenter(),\n bounds: mapLngLatBounds(map.current.getBounds()),\n isZoomIn: isZoomIn || false,\n zoom: map.current.getZoom(),\n visibleSlugs,\n });\n }\n };\n\n const getVisiblePointSlugs = async () => {\n const source = map.current?.getSource(SOURCE_ID) as mapboxgl.GeoJSONSource;\n const allRenderedFeatures = getRenderedFeatureByLayerId({\n layerId: [CLUSTERS_LAYER_ID, UNCLUSTERS_LAYER_ID],\n });\n\n if (allRenderedFeatures && allRenderedFeatures.length > 0) {\n const uniqueRenderedFeatures = getUniqueFeatures(allRenderedFeatures);\n return getArrayOfKeyRenderedFeaturesWithinView(\n source,\n uniqueRenderedFeatures,\n 'slug'\n );\n }\n return [];\n };\n\n const highlightPointOnMap = (slug: string | undefined) => {\n map.current?.removeFeatureState({\n source: SOURCE_ID,\n });\n\n if (slug !== undefined) {\n const allRenderedFeatures = getRenderedFeatureByLayerId({\n layerId: [CLUSTERS_LAYER_ID, UNCLUSTERS_LAYER_ID],\n });\n\n if (allRenderedFeatures && allRenderedFeatures.length > 0) {\n const uniqueRenderedFeatures = getUniqueFeatures(allRenderedFeatures);\n\n const clusterSource = map.current?.getSource(\n SOURCE_ID\n ) as mapboxgl.GeoJSONSource;\n uniqueRenderedFeatures.forEach((v) => {\n if ((v as MapboxGeoJSONFeature).layer.id === UNCLUSTERS_LAYER_ID) {\n if (v.properties?.slug === slug) {\n map.current?.setFeatureState(\n {\n source: SOURCE_ID,\n id: v.id,\n },\n {\n hover: true,\n }\n );\n }\n } else {\n clusterSource?.getClusterLeaves(\n v.properties?.cluster_id,\n v.properties?.point_count,\n 0,\n (error, features) => {\n const allSlugsOfCluster =\n features?.map((f) => f.properties?.slug) || [];\n if (allSlugsOfCluster.includes(slug)) {\n map.current?.setFeatureState(\n {\n source: SOURCE_ID,\n id: v.id,\n },\n {\n hover: true,\n }\n );\n }\n }\n );\n }\n });\n }\n }\n };\n\n return {\n animationDuration: ANIMATION_DURATION,\n initializeMap,\n highlightPointOnMap,\n };\n}\n\nfunction mapLngLatBounds(bounds: LngLatBounds): Bounds {\n return {\n ne: bounds.getNorthEast(),\n sw: bounds.getSouthWest(),\n };\n}\n\ntype IsZoomInProps = {\n originalEvent?: { deltaY?: number };\n};\n\nfunction isZoomIn(event: IsZoomInProps) {\n const deltaY = event.originalEvent?.deltaY;\n\n if (!deltaY) return false;\n\n return deltaY < 0;\n}\n","import { Feature, Geometry } from 'geojson';\nimport mapboxgl from 'mapbox-gl';\nimport { useSearchParams } from 'next/navigation';\nimport { MutableRefObject, useEffect, useRef } from 'react';\n\nimport { OnMoveEndProps, OnZoomChangeProps, useMap } from '@/hooks/useMap';\nimport { ScreenSize, useScreenSize } from '@/hooks/useScreenSize';\n\nimport { Bounds, CameraMapOptions, MapItem } from './types';\n\ntype MapProps = {\n initialCameraOptions: CameraMapOptions;\n cameraOptions?: CameraMapOptions;\n features: Feature[];\n mapboxAccessToken: string;\n highlightedSlug?: string | undefined;\n isFullScreenMap?: boolean;\n minZoom?: number;\n maxZoom?: number;\n clusterPerLocation?: boolean;\n staticMapRef: MutableRefObject;\n onMarkerClicked?: (marker: T | T[] | undefined) => void;\n onMapRefChange?: (mapRef: MutableRefObject) => void;\n onZoomChange?: (props: OnZoomChangeProps) => void;\n onMoveEnd?: (props: OnMoveEndProps) => void;\n onIdle?: (bounds: Bounds) => void;\n};\n\nexport default function Map({\n initialCameraOptions,\n cameraOptions,\n features,\n mapboxAccessToken,\n highlightedSlug,\n isFullScreenMap,\n minZoom,\n maxZoom,\n clusterPerLocation,\n staticMapRef,\n onMarkerClicked,\n onMapRefChange,\n onZoomChange,\n onMoveEnd,\n onIdle,\n}: MapProps) {\n const map = useRef(null);\n const mapContainer = useRef(null);\n const screenSize = useScreenSize();\n\n const searchParams = useSearchParams();\n const haveParamsWithCoords =\n searchParams?.get('bounds') != null || searchParams?.get('center') != null;\n\n const { animationDuration, initializeMap, highlightPointOnMap } = useMap({\n haveParamsWithCoords,\n initialCameraOptions,\n features,\n map,\n mapboxAccessToken,\n mapContainer,\n staticMapRef,\n minZoom,\n maxZoom,\n clusterPerLocation,\n onMarkerClicked,\n onZoomChange,\n onMoveEnd,\n onIdle,\n });\n const isMapLoaded = map.current?.isStyleLoaded();\n\n useEffect(() => {\n if (isFullScreenMap) {\n map?.current?.resize({ shouldNotUpdateQueryParams: true });\n }\n }, [isFullScreenMap]);\n\n useEffect(() => {\n if (map?.current) return;\n initializeMap();\n\n return () => {\n map.current?.remove();\n };\n }, []);\n\n useEffect(() => {\n if (!haveParamsWithCoords && map?.current) {\n map.current.jumpTo({ center: initialCameraOptions.center });\n }\n }, [initialCameraOptions.center]);\n\n useEffect(() => {\n if (!cameraOptions || !map?.current || !searchParams?.get('query')) return;\n\n if (cameraOptions.bounds) {\n map.current.fitBounds(\n cameraOptions.bounds,\n {\n duration: animationDuration,\n ...cameraOptions.boundsOptions,\n },\n { shouldNotUpdateQueryParams: true }\n );\n } else {\n map.current.easeTo(\n {\n center: cameraOptions.center,\n zoom: cameraOptions.zoom,\n },\n { shouldNotUpdateQueryParams: true }\n );\n }\n }, [map, cameraOptions, searchParams?.get('query')]);\n\n useEffect(() => {\n if (screenSize >= ScreenSize.SM && isMapLoaded) {\n highlightPointOnMap(highlightedSlug);\n }\n }, [highlightedSlug, isMapLoaded]);\n\n useEffect(() => {\n if (onMapRefChange) {\n onMapRefChange(map);\n }\n }, [map]);\n\n return
;\n}\n","import { forwardRef } from 'react';\n\nimport StaticMap from './StaticMap';\nimport { CameraMapOptions } from './types';\ntype SearchStaticMapProps = {\n coords: CameraMapOptions;\n};\n\nconst SearchStaticMap = forwardRef(\n ({ coords }, ref) => {\n return (\n
\n \n
\n );\n }\n);\n\nSearchStaticMap.displayName = 'SearchStaticMap';\n\nexport default SearchStaticMap;\n","'use client';\n\nimport Image, { ImageLoaderProps } from 'next/image';\n\nimport { LatLng } from '@/models/LatLng';\nimport { getServerConfig } from '@/utils/config';\nimport { MAP_STYLE } from '@/utils/constants';\n\nimport { CameraMapOptions } from './types';\n\nimport clsx from 'clsx';\n\ntype StaticMapProps = {\n coords: CameraMapOptions;\n withMarker?: boolean;\n className?: string;\n width?: number;\n height?: number;\n sizes?: string;\n scaleMultiplier?: boolean;\n};\n\nconst MAX_SIZE_MAPBOX_STATIC_API = 1280;\nconst DEFAULT_WIDTH = 1080;\nconst DEFAULT_HEIGHT = 1000;\n\nconst mapboxImageLoader = ({\n src,\n width,\n height,\n mapboxAccessToken,\n scaleMultiplier,\n}: ImageLoaderProps & {\n mapboxAccessToken: string;\n height: number;\n scaleMultiplier?: boolean;\n}) => {\n const maxWidth =\n width > MAX_SIZE_MAPBOX_STATIC_API ? MAX_SIZE_MAPBOX_STATIC_API : width;\n const maxHeight =\n height > MAX_SIZE_MAPBOX_STATIC_API ? MAX_SIZE_MAPBOX_STATIC_API : height;\n const multiplier = scaleMultiplier ? `@2x` : '';\n return `${src}/${maxWidth}x${maxHeight}${multiplier}?access_token=${mapboxAccessToken}&logo=false`;\n};\n\nexport default function StaticMap({\n coords,\n withMarker,\n className,\n sizes,\n scaleMultiplier,\n width = DEFAULT_WIDTH,\n height = DEFAULT_HEIGHT,\n}: StaticMapProps) {\n const { NEXT_PUBLIC_MAPBOX_STATIC_ACCESS_TOKEN } = getServerConfig();\n\n const zoom = coords.zoom;\n const { lat: latitude, lng: longitude } = coords.center as LatLng;\n\n return (\n
\n \n mapboxImageLoader({\n ...props,\n height,\n scaleMultiplier,\n mapboxAccessToken: NEXT_PUBLIC_MAPBOX_STATIC_ACCESS_TOKEN,\n })\n }\n src={`https://api.mapbox.com/styles/v1/mapbox/${MAP_STYLE}/static/${longitude},${latitude},${zoom}`}\n width={width}\n height={height}\n priority\n alt={`Static Map around the location ${longitude}-${latitude} with zoom ${zoom}`}\n sizes={sizes || `${width}px`}\n />\n {withMarker && (\n \n )}\n
\n );\n}\n","import clsx from 'clsx';\n\ntype SearchMapWrapperProps = {\n isFullScreenMap?: boolean;\n withMap?: boolean;\n} & React.ComponentPropsWithoutRef<'div'>;\n\nexport default function SearchMapWrapper({\n className,\n children,\n isFullScreenMap,\n withMap,\n}: SearchMapWrapperProps) {\n return (\n \n {children}\n
\n );\n}\n","import { useState } from 'react';\n\nimport { useDebounce } from '@/hooks/useDebounce';\n\nexport default function useHighlightedSlug() {\n const [highlightedSlug, setHighlightedSlug] = useState();\n\n const onMouseEnter = useDebounce((slug: string) => {\n setHighlightedSlug(slug);\n }, 10);\n\n const onMouseLeave = useDebounce(() => {\n setHighlightedSlug(undefined);\n }, 10);\n\n return {\n highlightedSlug,\n onMouseEnter,\n onMouseLeave,\n };\n}\n","import { useMemo } from 'react';\n\nimport useQueryParams from '@/hooks/useQueryParams';\nimport { usePathname } from '@/i18n/navigation';\n\nimport { SearchType } from './search-type.enum';\nimport { SearchViewMode } from './types';\n\nexport type SearchQueryParams = {\n view?: SearchViewMode;\n day?: string;\n startTime?: string;\n endTime?: string;\n isAllDay?: string;\n amenities?: string;\n seats?: string;\n query?: string;\n center?: string;\n bounds?: string;\n zoom?: string;\n startDay?: string;\n endDay?: string;\n};\n\nexport default function useSearchPageParams() {\n const pathname = usePathname();\n const { queryParams, updateQuery } = useQueryParams();\n\n const searchType = useMemo(() => {\n if (pathname.startsWith('/meeting-rooms')) {\n return SearchType.MeetingRoom;\n }\n if (pathname.startsWith('/locations')) {\n return SearchType.Location;\n }\n return SearchType.Coworking;\n }, [pathname]);\n\n return {\n searchType,\n queryParams,\n updateQuery,\n };\n}\n","import { useSearchParams } from 'next/navigation';\nimport { useCallback, useMemo } from 'react';\n\nimport { usePathname } from '@/i18n/navigation';\n\nimport { useRouter } from './useRouter';\n\ntype QueryParams = Record;\n\nexport default function useQueryParams() {\n const router = useRouter();\n const pathname = usePathname();\n const searchParams = useSearchParams();\n\n const queryParams = useMemo(() => {\n if (searchParams == null) return {};\n\n const entries = searchParams.entries();\n const result: QueryParams = {};\n for (const [key, value] of entries) {\n result[key] = value;\n }\n return result;\n }, [searchParams]);\n\n const updateQuery = useCallback(\n (newParams: Partial) => {\n if (searchParams == null) return {};\n\n const current = new URLSearchParams(window.location.search);\n\n Object.keys(newParams).forEach((key) => {\n const value = newParams[key];\n if (value === undefined || value === null) {\n current.delete(key); // Remove param if undefined or null\n } else if (Array.isArray(value)) {\n current.delete(key);\n value.forEach((val) => current.append(key, val));\n } else {\n current.set(key, value.toString());\n }\n });\n\n if (current.size === 0) {\n clearQuery();\n }\n\n router.replace(`?${current.toString()}`, { scroll: false });\n },\n [searchParams]\n );\n\n const clearQuery = useCallback(() => {\n window.history.replaceState(null, '', pathname);\n }, [pathname]);\n\n return {\n queryParams: queryParams as T,\n updateQuery,\n clearQuery,\n };\n}\n","'use client';\n\nimport debounce from 'lodash.debounce';\nimport { useEffect, useState } from 'react';\n\nconst DEBOUNCE_TIME = 100;\n\nexport enum ScreenSize {\n XXS = 320,\n XS = 375,\n SM = 500,\n MD = 600,\n LG = 960,\n XL = 1440,\n}\n\nexport function useScreenSize(): number {\n const [widthWindow, setWidthWindow] = useState(0);\n\n useEffect(() => {\n const handleResize = debounce(() => {\n setWidthWindow(window.innerWidth);\n }, DEBOUNCE_TIME);\n\n setWidthWindow(window.innerWidth);\n window.addEventListener('resize', handleResize);\n\n return () => {\n window.removeEventListener('resize', handleResize);\n };\n }, []);\n\n return widthWindow;\n}\n","import { useEffect, useState } from 'react';\n\nexport function useWebGL() {\n const [isWebGLSupported, setWebGLsupported] = useState();\n\n useEffect(() => {\n if (isWebGLSupported !== undefined) return;\n\n (async () => {\n const mapboxgl = await import('mapbox-gl');\n setWebGLsupported(mapboxgl.supported());\n })();\n }, []);\n\n return { isWebGLSupported };\n}\n","import { Feature, GeoJsonProperties, Geometry } from 'geojson';\nimport mapboxgl from 'mapbox-gl';\n\nimport {\n MapboxPlacesResult,\n MapboxPlacesResultTranslated,\n} from '@/app/api/mapbox-places/types';\nimport { CustomOption } from '@/components/form/CustomSelect/types';\nimport {\n LocationPhases,\n SimpleLocationDto,\n SimpleLocationSearchDto,\n} from '@/lib/locations/dto';\nimport { SearchMeetingRoomsPricesDto } from '@/lib/meeting-rooms/dto/search-meeting-rooms-prices.dto';\nimport { SimpleMeetingRoomDto } from '@/lib/meeting-rooms/dto/simple-meeting-room.dto';\n\nimport { isExternalLocation, isIndustriousLocation } from './locations';\n\nexport type LocationMapFeatureProps = Pick<\n SimpleLocationSearchDto,\n 'id' | 'slug' | 'name' | 'address' | 'city' | 'zipCode' | 'phone'\n> & {\n imageUrl?: string;\n imageAltText?: string | null;\n lat: number;\n lng: number;\n external?: boolean;\n externalLink?: string;\n state: string | null;\n phase?: LocationPhases;\n};\n\nexport type MeetingRoomMapFeatureProps = Pick<\n SimpleMeetingRoomDto,\n | 'slug'\n | 'name'\n | 'locationName'\n | 'seats'\n | 'amenities'\n | 'currencyIsoCode'\n | 'city'\n | 'locationTier'\n> & {\n imageUrl?: string;\n imageAltText?: string | null;\n prices?: SearchMeetingRoomsPricesDto['key'];\n lat: number;\n lng: number;\n};\n\nexport function getMapboxFeaturesLocations(\n locations: (SimpleLocationSearchDto | SimpleLocationDto)[]\n): Feature[] {\n return locations\n .filter(\n (loc) =>\n (isIndustriousLocation(loc) && !!loc.slug) || !!loc.geolocalization\n )\n .map((loc) => ({\n type: 'Feature',\n properties: {\n id: loc.id,\n slug: loc.slug,\n imageUrl: loc.image?.url,\n imageAltText: loc.image?.altText,\n name: loc.name,\n address: loc.address,\n city: loc.city,\n state: isIndustriousLocation(loc) ? loc.state : null,\n zipCode: loc.zipCode,\n phone: loc.phone,\n lat: loc.geolocalization.lat,\n lng: loc.geolocalization.lng,\n isExternal: loc.isExternal,\n externalLink: isExternalLocation(loc) ? loc.externalLink : undefined,\n phase: isIndustriousLocation(loc) ? loc.phase : undefined,\n },\n geometry: {\n type: 'Point',\n coordinates: [loc.geolocalization.lng, loc.geolocalization.lat],\n },\n }));\n}\n\nexport function getMapboxFeaturesMeetingRooms(\n meetingRooms: SimpleMeetingRoomDto[],\n prices?: SearchMeetingRoomsPricesDto\n): Feature[] {\n return meetingRooms.map((room) => ({\n type: 'Feature',\n properties: {\n slug: room.slug,\n name: room.name,\n seats: room.seats,\n amenities: room.amenities,\n locationName: room.locationName,\n imageUrl: room.image?.url,\n imageAltText: room.image?.altText,\n prices: prices?.[room.slug] || undefined,\n lat: room.geolocalization.lat,\n lng: room.geolocalization.lng,\n currencyIsoCode: room.currencyIsoCode,\n city: room.city,\n },\n geometry: {\n type: 'Point',\n coordinates: [room.geolocalization.lng, room.geolocalization.lat],\n },\n }));\n}\n\n// Because features come from tiled vector data, feature geometries may be split\n// or duplicated across tile boundaries. As a result, features may appear multiple times in query results.\nexport function getUniqueFeatures(\n features: Feature[]\n): Feature[] {\n const uniqueIds = new Set();\n const uniqueFeatures = [];\n for (const feature of features) {\n const id = feature.id || feature.properties?.slug;\n if (!uniqueIds.has(id)) {\n uniqueIds.add(id);\n uniqueFeatures.push(feature);\n }\n }\n return uniqueFeatures;\n}\n\nfunction getClusterLeavesOfSource(\n cluster_id: number,\n limit: number,\n offset: number,\n source: mapboxgl.GeoJSONSource\n): Promise[]> {\n return new Promise((resolve, reject) => {\n source.getClusterLeaves(cluster_id, limit, offset, (err, features) => {\n if (err) reject(err);\n else resolve(features);\n });\n });\n}\n\nexport const getArrayOfKeyRenderedFeaturesWithinView = async (\n source: mapboxgl.GeoJSONSource,\n renderedFeatures: Feature[],\n key: string\n) => {\n let arrayOfKeyRendered: string[] = [];\n try {\n for await (const feature of renderedFeatures) {\n const props = feature.properties!;\n const isACluster = props.cluster;\n if (isACluster) {\n const aFeatures = await getClusterLeavesOfSource(\n props.cluster_id,\n props.point_count,\n 0,\n source\n );\n const allInCluster = aFeatures.map((f) => f.properties![key]);\n arrayOfKeyRendered = [...arrayOfKeyRendered, ...allInCluster];\n } else {\n arrayOfKeyRendered = [...arrayOfKeyRendered, props[key]];\n }\n }\n } catch (error) {\n return arrayOfKeyRendered;\n }\n return arrayOfKeyRendered;\n};\n\nexport function getCenterFromFeatures(\n featuresLocations: Feature[]\n) {\n const bounds = new mapboxgl.LngLatBounds();\n\n for (const feature of featuresLocations) {\n if (feature.geometry.type === 'Point') {\n bounds.extend(feature.geometry.coordinates as [number, number]);\n }\n }\n\n return bounds.getCenter();\n}\n\nexport const getPlaceNameArrayFromFeature = (\n feature: MapboxPlacesResult,\n locale: string\n) => {\n const name =\n feature[`place_name_${locale}` as keyof MapboxPlacesResultTranslated] ||\n feature.place_name;\n const placeName = name.split(',');\n\n return placeName;\n};\n\nexport const mapResultsToOptions = (\n results: MapboxPlacesResult[],\n locale: string\n): CustomOption[] =>\n results.map((feat) => {\n const placeNameArray = getPlaceNameArrayFromFeature(feat, locale);\n return {\n label: placeNameArray.shift() as string,\n description: placeNameArray.join(','),\n value: feat.id as string,\n };\n });\n","export default {\"src\":\"/_next/static/media/TGR.30199ace.svg\",\"height\":15,\"width\":159,\"blurWidth\":0,\"blurHeight\":0};","export default {\"src\":\"/_next/static/media/welkin-and-meraki.3e549d5a.svg\",\"height\":20,\"width\":370,\"blurWidth\":0,\"blurHeight\":0};"],"names":["SOURCE_ID","CLUSTERS_LAYER_ID","UNCLUSTERS_LAYER_ID","mapLngLatBounds","bounds","ne","getNorthEast","sw","getSouthWest","Map","param","map","initialCameraOptions","cameraOptions","features","mapboxAccessToken","highlightedSlug","isFullScreenMap","minZoom","maxZoom","clusterPerLocation","staticMapRef","onMarkerClicked","onMapRefChange","onZoomChange","onMoveEnd","onIdle","useRef","mapContainer","screenSize","useScreenSize","searchParams","useSearchParams","haveParamsWithCoords","get","animationDuration","initializeMap","highlightPointOnMap","useMap","locale","useLocale","queryParams","useSearchPageParams","useEffect","query","CURRENT_LOCATION_VALUE","addCurrentPositionMarker","current","refreshSource","getInitialCenter","centerParam","center","boundsParam","queryZoom","zoom","split","lng","lat","Math","max","getSource","loadImage","error","image","addImage","addSource","type","data","geometry","coordinates","properties","addLayer","id","source","layout","addSourceIntoMap","cluster","clusterMaxZoom","generateId","_map_getSource","setData","addClustersCountText","filter","paint","addClusters","duration","getRenderedFeatureByLayerId","params","point","layerId","queryRenderedFeatures","layers","Array","isArray","handleClickMap","on","e","length","undefined","layer","slug","handleClusterClick","feature","clusterId","cluster_id","getZoom","easeTo","getClusterLeaves","point_count","err","aFeatures","a","getClusterExpansionZoom","handleClusterHover","currentMap","getCanvas","style","cursor","handleMarkerHover","handleZoomChange","isZoomIn","visibleSlugs","getVisiblePointSlugs","getCenter","getBounds","allRenderedFeatures","uniqueRenderedFeatures","getUniqueFeatures","getArrayOfKeyRenderedFeaturesWithinView","removeFeatureState","clusterSource","forEach","v","setFeatureState","hover","allSlugsOfCluster","f","includes","mapboxgl","container","concat","MAP_STYLE","addControl","showCompass","setLayoutProperty","once","visibility","event","deltaY","originalEvent","shouldNotUpdateQueryParams","isMapLoaded","isStyleLoaded","resize","remove","jumpTo","fitBounds","boundsOptions","ScreenSize","SM","jsx_runtime","jsx","div","ref","className","SearchStaticMap","forwardRef","coords","react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__","StaticMap","sizes","displayName","__webpack_exports__","Z","mapboxImageLoader","src","width","height","scaleMultiplier","maxWidth","maxHeight","multiplier","withMarker","NEXT_PUBLIC_MAPBOX_STATIC_ACCESS_TOKEN","getServerConfig","latitude","longitude","jsxs","Image","clsx","loader","props","priority","alt","SearchMapWrapper","children","withMap","useHighlightedSlug","setHighlightedSlug","useState","onMouseEnter","useDebounce","onMouseLeave","pathname","usePathname","updateQuery","useQueryParams","searchType","useMemo","startsWith","SearchType","MeetingRoom","Location","Coworking","router","useRouter","entries","result","key","value","useCallback","URLSearchParams","window","location","search","Object","keys","newParams","delete","append","val","set","toString","size","clearQuery","replace","scroll","history","replaceState","widthWindow","setWidthWindow","handleResize","debounce","innerWidth","addEventListener","removeEventListener","useWebGL","isWebGLSupported","setWebGLsupported","__webpack_require__","then","t","bind","supported","getMapboxFeaturesLocations","locations","_locations__WEBPACK_IMPORTED_MODULE_1__","jS","loc","geolocalization","imageUrl","url","imageAltText","altText","name","address","city","state","isIndustriousLocation","zipCode","phone","isExternal","externalLink","isExternalLocation","phase","getMapboxFeaturesMeetingRooms","meetingRooms","prices","room","seats","amenities","locationName","currencyIsoCode","uniqueIds","Set","uniqueFeatures","has","add","push","renderedFeatures","arrayOfKeyRendered","allInCluster","getClusterLeavesOfSource","limit","offset","Promise","resolve","reject","getCenterFromFeatures","featuresLocations","extend","getPlaceNameArrayFromFeature","place_name","mapResultsToOptions","results","placeNameArray","feat","label","shift","description","join"],"sourceRoot":""}