{"version":3,"file":"static/chunks/4341-22f05c6211cb601b.js","mappings":"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","sources":["webpack://_N_E/./components/CircleLoader.tsx","webpack://_N_E/./components/ModalDialog.tsx","webpack://_N_E/./components/buttons/ButtonAsLink.tsx","webpack://_N_E/./components/buttons/PrimaryButton.tsx","webpack://_N_E/./components/buttons/SecondaryButton.tsx","webpack://_N_E/./components/buttons/ArrowButton.tsx","webpack://_N_E/./components/buttons/TertiaryButton.tsx","webpack://_N_E/./components/buttons/index.ts","webpack://_N_E/./components/form/CustomSelect/CustomOptionSelect.tsx","webpack://_N_E/./components/form/CustomSelect/theme.ts","webpack://_N_E/./components/icons/LoepIcon.tsx","webpack://_N_E/./public/icons/beesIcon.svg","webpack://_N_E/./public/icons/placesIcon.svg","webpack://_N_E/./utils/isIOS.ts","webpack://_N_E/./components/SearchField.tsx","webpack://_N_E/./components/search/LocalizationErrorModal.tsx","webpack://_N_E/./components/search/SearchInput.tsx","webpack://_N_E/./components/search/search-type.enum.ts","webpack://_N_E/./components/search/utils.ts","webpack://_N_E/./hooks/useDebounce.tsx","webpack://_N_E/./lib/countries.ts","webpack://_N_E/./lib/locations/dto/location.dto.ts","webpack://_N_E/./lib/locations/dto/location-price.dto.ts","webpack://_N_E/./lib/locations/dto/sort-filter.enum.ts","webpack://_N_E/./lib/locations/dto/index.ts","webpack://_N_E/./lib/locations/dto/location-phases.enum.ts","webpack://_N_E/./lib/locations/dto/manager-roles.enum.ts","webpack://_N_E/./lib/locations/location-api.tsx","webpack://_N_E/./models/Countries.enum.ts","webpack://_N_E/./models/index.ts","webpack://_N_E/./models/location-utils.ts","webpack://_N_E/./models/solutions-pages-utils.ts","webpack://_N_E/./models/BrandNames.enum.ts","webpack://_N_E/./utils/validators/string-day-validator.ts","webpack://_N_E/./utils/locations.ts","webpack://_N_E/./utils/select-option-utils.ts","webpack://_N_E/./public/icons/markerAltIcon.svg"],"sourcesContent":["import clsx from 'clsx';\n\ntype CircleLoaderProps = {\n className?: string;\n};\n\nexport function CircleLoader({ className }: CircleLoaderProps) {\n return (\n \n \n \n );\n}\n","import { useTranslations } from 'next-intl';\nimport Image from 'next/image';\nimport { ReactNode, useEffect } from 'react';\nimport ReactDOM from 'react-dom';\n\nimport closeIcon from '@/public/icons/closeIcon.svg';\nimport { ID_MODAL_CONTAINER } from '@/utils/constants';\n\nimport clsx from 'clsx';\n\nconst MAX_WIDTH = 500;\n\ntype ModalDialogProps = {\n className?: string;\n children: ReactNode;\n onClose: () => void;\n dataTestId: string;\n width?: number;\n withoutCloseButton?: boolean;\n closable?: boolean;\n};\n\nfunction ModalDialogContainer({\n className,\n onClose,\n children,\n dataTestId,\n width = MAX_WIDTH,\n withoutCloseButton,\n closable = true,\n}: ModalDialogProps) {\n const t = useTranslations('general');\n\n const handleCloseModal = () => {\n if (!closable) return;\n onClose();\n };\n\n return (\n \n \n {children}\n\n {!withoutCloseButton && closable && (\n \n \n \n )}\n \n \n \n );\n}\n\nexport function ModalDialog(props: ModalDialogProps) {\n const container = document.getElementById(ID_MODAL_CONTAINER)!;\n\n const downHandler = ({ key }: { key: string }) => {\n if (!props.closable) return;\n const pressingEscape = key === 'Escape';\n if (pressingEscape) {\n props.onClose();\n }\n };\n\n useEffect(() => {\n const disableScroll = () => {\n const { body } = document;\n body.style.height = '100vh';\n body.style.overflowY = 'hidden';\n };\n\n const restoreScroll = () => {\n const { body } = document;\n body.style.height = '';\n body.style.overflowY = '';\n };\n\n window.addEventListener('keydown', downHandler);\n disableScroll();\n\n return () => {\n restoreScroll();\n window.removeEventListener('keydown', downHandler);\n };\n }, []);\n\n return ReactDOM.createPortal(, container);\n}\n","import clsx from 'clsx';\n\nexport function ButtonAsLink(props: React.ComponentPropsWithoutRef<'button'>) {\n const { className, children, type = 'button', ...others } = props;\n\n return (\n \n {children}\n \n );\n}\n","import { CircleLoader } from '../CircleLoader';\n\nimport clsx from 'clsx';\n\ntype PrimaryButtonProps = React.ComponentPropsWithoutRef<'button'> & {\n sm?: boolean;\n isLoading?: boolean;\n};\n\nexport function PrimaryButton(props: PrimaryButtonProps) {\n const { className, sm, isLoading, children, ...otherProps } = props;\n\n return (\n \n
\n {isLoading && }\n {children}\n
\n \n );\n}\n","import { CircleLoader } from '../CircleLoader';\n\nimport clsx from 'clsx';\n\ntype SecondaryButtonProps = {\n sm?: boolean;\n isLoading?: boolean;\n} & React.ComponentPropsWithoutRef<'button'>;\n\nexport function SecondaryButton(props: SecondaryButtonProps) {\n const { sm, className, isLoading, children, ...otherProps } = props;\n\n return (\n \n
\n {isLoading && (\n \n )}\n {children}\n
\n \n );\n}\n","import ChevronIcon from '../icons/ChevronIcon';\n\nimport clsx from 'clsx';\n\ntype ArrowButtonProps = {\n isDisabled?: boolean;\n direction: 'left' | 'right';\n className?: string;\n onClick: (direction: 'left' | 'right') => void;\n} & React.ComponentPropsWithoutRef<'button'>;\n\nexport function ArrowButton({\n isDisabled,\n direction,\n className,\n onClick,\n ...props\n}: ArrowButtonProps) {\n return (\n onClick(direction)}\n {...props}\n >\n \n \n );\n}\n","import clsx from 'clsx';\n\ntype TertiaryButtonProps = {\n sm?: boolean;\n} & React.ComponentPropsWithoutRef<'button'>;\n\nexport function TertiaryButton(props: TertiaryButtonProps) {\n const { sm, className, ...otherProps } = props;\n\n return (\n \n );\n}\n","export * from './SecondaryLinkButton';\nexport * from './PrimaryButton';\nexport * from './SecondaryButton';\nexport * from './LinkButtonThemes';\nexport * from './ArrowButton';\nexport * from './TertiaryButton';\nexport * from './ButtonAsLink';\n","import Image from 'next/image';\nimport { OptionProps, components } from 'react-select';\n\nimport { CURRENT_LOCATION_VALUE } from '@/components/search/utils';\nimport localizationIcon from '@/public/icons/markerAltIcon.svg';\n\nimport { CustomOption } from './types';\n\nimport clsx from 'clsx';\n\nexport const CustomOptionSelect = ({\n isFocused,\n data,\n ...props\n}: OptionProps) => {\n const isCurrentLocationOption = data.value === CURRENT_LOCATION_VALUE;\n\n return (\n \n
\n {isCurrentLocationOption && (\n \n )}\n

\n {data.label}\n

\n {data.description && (\n

{data.description}

\n )}\n
\n \n );\n};\n","import { Theme } from 'react-select';\n\nexport const getCustomSelectTheme = (theme: Theme) => ({\n ...theme,\n borderRadius: 3,\n borderColor: 'border-grey-70',\n colors: {\n ...theme.colors,\n },\n});\n","import { IconProps } from './types';\n\nexport default function LoepIcon(props: IconProps) {\n return (\n \n \n \n );\n}\n","export default {\"src\":\"/_next/static/media/beesIcon.081114b1.svg\",\"height\":19,\"width\":15,\"blurWidth\":0,\"blurHeight\":0};","export default {\"src\":\"/_next/static/media/placesIcon.89ed72bd.svg\",\"height\":17,\"width\":11,\"blurWidth\":0,\"blurHeight\":0};","export function isIOS() {\n if (/iPad|iPhone|iPod/.test(navigator.userAgent)) {\n return true;\n }\n return false;\n}\n","'use client';\n\nimport Image from 'next/image';\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport Select, {\n ActionMeta,\n ControlProps,\n GroupBase,\n GroupHeadingProps,\n GroupProps,\n InputProps,\n MenuProps,\n PropsValue,\n SelectInstance,\n SingleValue,\n components,\n} from 'react-select';\n\nimport { ScreenSize, useScreenSize } from '@/hooks/useScreenSize';\nimport { NAVBAR_HEIGHT, NAVBAR_HEIGHT_MOBILE } from '@/utils/constants';\nimport { isIOS } from '@/utils/isIOS';\n\nimport { CustomOptionSelect } from './form/CustomSelect/CustomOptionSelect';\nimport { getCustomSelectTheme } from './form/CustomSelect/theme';\nimport { CustomOption } from './form/CustomSelect/types';\n\nimport clsx from 'clsx';\n\ntype SearchFieldProps = {\n className?: string;\n placeholder: string;\n onChange?: (\n newValue: SingleValue,\n actionMeta?: ActionMeta\n ) => void;\n onInputChange?: (newValue: string) => void;\n onKeyDown?: React.KeyboardEventHandler;\n searchValue?: PropsValue;\n options: (CustomOption | CustomOptionGroup)[];\n autoFocus?: boolean;\n isScrollOnFocus?: boolean;\n showSearchIndicator?: boolean;\n rightIndicator?: React.ReactNode;\n leftIndicator?: React.ReactNode;\n controlClassName?: string;\n};\n\nconst Menu = ({ children, ...props }: MenuProps) => {\n return (\n \n {children}\n \n );\n};\n\nconst Input = ({ className, ...rest }: InputProps) => {\n return (\n \n );\n};\n\ninterface CustomOptionGroup extends GroupBase {\n icon?: string;\n}\n\nconst GroupHeading = (\n props: GroupHeadingProps\n) => {\n const { icon } = props.data;\n\n return (\n \n {icon && (\n \n )}\n \n \n );\n};\n\nconst Group = (props: GroupProps) => (\n
\n \n
\n);\n\nconst Control = ({ children, ...props }: ControlProps) => {\n const { leftIndicator, rightIndicator, controlClassName } = props.selectProps;\n\n return (\n \n {leftIndicator}\n {children}\n {rightIndicator}\n \n );\n};\n\nexport function SearchField({\n placeholder,\n className,\n onChange,\n onInputChange,\n options,\n searchValue,\n autoFocus,\n isScrollOnFocus,\n rightIndicator,\n leftIndicator,\n controlClassName,\n}: SearchFieldProps) {\n const screenSize = useScreenSize();\n const [shouldRenderValue, setShouldRenderValue] = useState(\n searchValue != null\n );\n const selectRef =\n useRef>>(null);\n\n useEffect(() => {\n if (selectRef.current && autoFocus) {\n selectRef.current.focus();\n }\n }, [autoFocus]);\n\n const handleInputFocused = (event: React.FocusEvent) => {\n if (isScrollOnFocus) {\n scrollToFieldAtTop(event.target);\n }\n };\n\n const maxMenuHeight = useMemo(() => {\n return screenSize >= ScreenSize.LG ? 400 : 300;\n }, [screenSize]);\n\n return (\n clsx('relative flex text-left', className),\n placeholder: () => 'text-grey-25 truncate',\n }}\n components={{\n Control,\n DropdownIndicator: () => null,\n Option: CustomOptionSelect,\n Menu,\n Input,\n Group,\n GroupHeading,\n }}\n onInputChange={onInputChange}\n onChange={onChange}\n filterOption={() => true}\n noOptionsMessage={() => null}\n value={searchValue}\n onMenuOpen={() => {\n setShouldRenderValue(false);\n }}\n onMenuClose={() => {\n setShouldRenderValue(true);\n }}\n controlShouldRenderValue={shouldRenderValue}\n autoFocus={autoFocus}\n maxMenuHeight={maxMenuHeight}\n onFocus={handleInputFocused}\n leftIndicator={leftIndicator}\n rightIndicator={rightIndicator}\n controlClassName={controlClassName}\n />\n );\n}\n\nfunction scrollToFieldAtTop(element: HTMLInputElement) {\n const { top } = element.getBoundingClientRect();\n const topFromWindow = window.scrollY + top;\n let btnLocation = topFromWindow - 30;\n const navbarHeight =\n window.innerWidth <= ScreenSize.SM ? NAVBAR_HEIGHT_MOBILE : NAVBAR_HEIGHT;\n if (!isIOS()) {\n btnLocation -= navbarHeight;\n }\n\n setTimeout(\n () =>\n window.scrollTo({\n left: 0,\n top: btnLocation,\n behavior: 'smooth',\n }),\n 100\n );\n}\n","import { useTranslations } from 'next-intl';\n\nimport { ModalDialog } from '../ModalDialog';\nimport { PrimaryButton, SecondaryButton } from '../buttons';\n\ntype LocalizationErrorModalProps = {\n onClose: () => void;\n};\n\nexport default function LocalizationErrorModal({\n onClose,\n}: LocalizationErrorModalProps) {\n const t = useTranslations('search.error-localization');\n\n return (\n \n
\n

{t('title')}

\n

\n {t.rich('description-1', { strong: (chunks) => {chunks} })}\n

\n

{t('description-2')}

\n
\n window.location.reload()}\n >\n {t('refresh')}\n \n \n {t('ok')}\n \n
\n
\n
\n );\n}\n","import { useLocale, useTranslations } from 'next-intl';\nimport { useSearchParams } from 'next/navigation';\nimport { useEffect, useMemo, useState } from 'react';\nimport { SingleValue } from 'react-select';\n\nimport { MapboxPlacesResult } from '@/app/api/mapbox-places/types';\nimport { useDebounce } from '@/hooks/useDebounce';\nimport { ScreenSize, useScreenSize } from '@/hooks/useScreenSize';\nimport { useToastError } from '@/hooks/useToastError';\nimport { useUserLocalization } from '@/hooks/useUserLocalization';\nimport {\n SimpleIndustriousLocationSearchDto,\n SimpleLocationSearchDto,\n} from '@/lib/locations/dto';\nimport { fetchAllLocations } from '@/lib/locations/location-api';\nimport { LatLng, getFormattedAddressByCountry } from '@/models';\nimport BeesIcon from '@/public/icons/beesIcon.svg';\nimport PlacesIcon from '@/public/icons/placesIcon.svg';\nimport {\n MAP_SEARCH_ADDRESS_ZOOM,\n MAP_SEARCH_CURRENT_LOCATION,\n} from '@/utils/constants';\nimport { tryFetchToJson } from '@/utils/http-request';\nimport { stringifyUrl } from '@/utils/stringify-url';\n\nimport { SearchField } from '../SearchField';\nimport { CustomOption } from '../form/CustomSelect/types';\nimport { CameraMapOptions } from '../map/types';\nimport LocalizationErrorModal from './LocalizationErrorModal';\nimport { SearchType } from './search-type.enum';\nimport { CURRENT_LOCATION_VALUE, getSearchValueFromQuery } from './utils';\n\nconst NB_MAX_LOCATIONS = 5;\n\ntype SearchInputProps = {\n latLng?: LatLng;\n className?: string;\n placeholder: string;\n isScrollOnFocus?: boolean;\n rightIndicator?: React.ReactNode;\n leftIndicator?: React.ReactNode;\n controlClassName?: string;\n searchType?: SearchType;\n defaultSearchValue?: string | null;\n onClickResultItem: (value: CameraMapOptions, query: string) => void;\n onClickLocation: (location: SimpleLocationSearchDto) => void;\n};\n\ntype FetchLocationsProps = {\n searchText: string;\n userLocalization?: LatLng;\n locale: string;\n searchType?: SearchType;\n};\n\ntype FetchMapboxPlacesTextProps = {\n searchText: string;\n coords?: LatLng;\n locale: string;\n};\n\nexport default function LocationSearchInput({\n latLng,\n className,\n placeholder,\n isScrollOnFocus,\n rightIndicator,\n leftIndicator,\n controlClassName,\n searchType,\n defaultSearchValue,\n onClickResultItem,\n onClickLocation,\n}: SearchInputProps) {\n const t = useTranslations('search');\n const searchParams = useSearchParams();\n\n const { showToast, hideToast } = useToastError();\n const locale = useLocale();\n const screenWidth = useScreenSize();\n\n const [searchText, setSearchText] = useState();\n const [searchValue, setSearchValue] = useState(\n createSearchValue(getSearchValueFromQuery(searchParams?.get('query')))\n );\n const [options, setOptions] = useState<\n Array<\n | {\n label: string;\n icon: string;\n options: CustomOption[];\n }\n | {\n label: string;\n value: string;\n }\n >\n >([]);\n\n const [resultsPlaces, setResultsPlaces] = useState([]);\n const [resultsLocations, setResultsLocations] = useState<\n SimpleIndustriousLocationSearchDto[]\n >([]);\n const [showErrorLocalization, setErrorLocalization] = useState(false);\n const [loadingBrowserLocation, setLoadingBrowserLocation] = useState(false);\n\n const {\n lnglat: userLocalization,\n getDeviceLocalization,\n isDeviceLocalizationDenied,\n isLocalizationFromDevice,\n isLoading: isLoadingUserLocalization,\n } = useUserLocalization();\n\n const autoFocus = useMemo(\n () => !searchValue && screenWidth >= ScreenSize.LG,\n [screenWidth, searchValue]\n );\n\n const resetResultsPlaces = () => {\n setResultsPlaces((previousValue) =>\n previousValue.length ? [] : previousValue\n );\n };\n\n const resetResultsAddress = () => {\n setResultsLocations((previousValue) =>\n previousValue.length ? [] : previousValue\n );\n };\n\n const onInputChangeSearch = (value: string) => {\n setSearchText(value);\n };\n\n useEffect(() => {\n const setOptionsAsync = async () => {\n const { mapResultsToOptions } = await import('@/utils/mapbox');\n\n setOptions(\n (resultsPlaces.length === 0 && resultsLocations.length === 0) ||\n !searchText\n ? [{ label: t('current-location'), value: CURRENT_LOCATION_VALUE }]\n : [\n {\n label: t('all-places-title'),\n icon: PlacesIcon,\n options: [...mapResultsToOptions(resultsPlaces, locale)],\n },\n {\n label: t('locations-title'),\n icon: BeesIcon,\n options: [...mapLocationsToOptions(resultsLocations)],\n },\n ]\n );\n };\n\n setOptionsAsync();\n }, [resultsPlaces, resultsLocations, searchText, locale]);\n\n const fetchMapboxPlacesText = useDebounce(\n async ({ searchText, coords, locale }: FetchMapboxPlacesTextProps) => {\n const proximity = coords ? [coords.lng, coords.lat] : 'ip';\n\n const urlParams = {\n searchText,\n language: locale,\n proximity,\n };\n const endpoint = `/api/mapbox-places`;\n const url = stringifyUrl(endpoint, urlParams);\n\n await tryFetchToJson({\n fetchParams: {\n input: url,\n },\n onSuccess: (response) => {\n hideToast();\n setResultsPlaces(response);\n },\n onFunctionalError: () => {\n showToast();\n resetResultsPlaces();\n },\n onTechnicalError: () => {\n showToast();\n resetResultsPlaces();\n },\n });\n },\n 200\n );\n\n const fetchLocations = useDebounce(\n async ({\n searchText,\n userLocalization,\n locale,\n searchType,\n }: FetchLocationsProps) => {\n const locations = await fetchAllLocations({\n locale,\n limit: NB_MAX_LOCATIONS,\n text: searchText,\n nearTo:\n searchText == null && userLocalization\n ? {\n longitude: userLocalization.lng,\n latitude: userLocalization.lat,\n }\n : undefined,\n withPrivateOffice: searchType === SearchType.Location || undefined,\n withCoworkingDayPassOnly:\n searchType === SearchType.Coworking || undefined,\n withOnlineMeetingRoomReservation:\n searchType === SearchType.MeetingRoom || undefined,\n });\n setResultsLocations(locations as SimpleIndustriousLocationSearchDto[]);\n },\n 200\n );\n\n useEffect(() => {\n if (!searchText) {\n resetResultsPlaces();\n resetResultsAddress();\n } else {\n fetchMapboxPlacesText({\n searchText,\n coords: latLng ?? userLocalization,\n locale,\n });\n fetchLocations({ searchText, userLocalization, locale, searchType });\n }\n }, [searchText, locale]);\n\n useEffect(() => {\n if (!loadingBrowserLocation) return;\n setSearchValue(createSearchValue(t('finding-location')));\n\n if (isLocalizationFromDevice) {\n onClickResultItem(\n {\n center: [userLocalization.lng, userLocalization.lat],\n zoom: MAP_SEARCH_CURRENT_LOCATION,\n },\n CURRENT_LOCATION_VALUE\n );\n setLoadingBrowserLocation(false);\n return;\n }\n\n if (isDeviceLocalizationDenied && !isLoadingUserLocalization) {\n setErrorLocalization(true);\n return;\n }\n }, [\n loadingBrowserLocation,\n isLocalizationFromDevice,\n isDeviceLocalizationDenied,\n isLoadingUserLocalization,\n ]);\n\n const handleOnClickAddress = async (feature: MapboxPlacesResult) => {\n const { getPlaceNameArrayFromFeature } = await import('@/utils/mapbox');\n const placeName = getPlaceNameArrayFromFeature(feature, locale);\n\n resetResultsPlaces();\n resetResultsAddress();\n onClickResultItem(\n {\n center: feature.center as [number, number],\n zoom: MAP_SEARCH_ADDRESS_ZOOM,\n ...(feature.bbox && { bounds: feature.bbox }),\n },\n placeName[0]\n );\n setSearchValue(createSearchValue(placeName[0]));\n };\n\n useEffect(() => {\n if (searchParams?.get('query')) {\n setSearchValue(\n createSearchValue(getSearchValueFromQuery(searchParams?.get('query')))\n );\n }\n }, [searchParams?.get('query')]);\n\n useEffect(() => {\n if (searchParams?.get('query') && defaultSearchValue !== null) return;\n setSearchValue(createSearchValue(defaultSearchValue || ''));\n }, [searchParams?.get('query'), defaultSearchValue]);\n\n const handleOnClickLocation = (location: SimpleLocationSearchDto) => {\n setSearchValue(createSearchValue(location.name));\n onClickLocation(location);\n };\n\n const handleOnChange = (option: SingleValue | undefined) => {\n if (option?.value === CURRENT_LOCATION_VALUE) {\n setLoadingBrowserLocation(true);\n getDeviceLocalization();\n return;\n }\n\n const feature = resultsPlaces.find((r) => r.id === option?.value);\n\n if (feature) {\n return handleOnClickAddress(feature);\n }\n\n const location = resultsLocations.find((x) => x.slug === option?.value);\n if (location) {\n return handleOnClickLocation(location);\n }\n };\n\n const onCloseModalError = () => {\n setErrorLocalization(false);\n setSearchValue(null);\n setLoadingBrowserLocation(false);\n };\n\n return (\n
\n \n {showErrorLocalization && (\n \n )}\n
\n );\n}\n\nfunction createSearchValue(inputValue: string | undefined) {\n if (!inputValue) return null;\n return { label: inputValue, value: '', description: '' };\n}\n\nfunction mapLocationsToOptions(\n locations: SimpleIndustriousLocationSearchDto[]\n): CustomOption[] {\n return locations.map((location) => {\n const formattedAdr = getFormattedAddressByCountry(location);\n return {\n label: location.name,\n description: `${formattedAdr.addressLine1}, ${formattedAdr.addressLine2}`,\n value: location.slug,\n };\n });\n}\n","// Warning: Enum values used as translation keys\nexport enum SearchType {\n Location = 'location',\n MeetingRoom = 'meeting-room',\n Coworking = 'coworking',\n}\n","import { WithinFilterDto } from '@/lib/shared/dto/within-filter.dto';\nimport { LatLng } from '@/models/LatLng';\nimport { SEARCH_ROUTES } from '@/utils/constants';\nimport { decodeQueryParamAsString } from '@/utils/stringify-url';\n\nimport { Bounds, CameraMapOptions } from '../map/types';\nimport { SearchType } from './search-type.enum';\nimport { SearchQueryParams } from './useSearchPageParams';\n\nexport const CURRENT_LOCATION_VALUE = 'CurrentLocation';\n\nexport function getSearchValueFromQuery(query?: string | null) {\n if (query) {\n if (!query || query === CURRENT_LOCATION_VALUE) return undefined;\n return decodeURIComponent(query);\n }\n return undefined;\n}\n\nexport function getLatLngFromQuery(\n queryParams: SearchQueryParams\n): LatLng | undefined {\n const centerParam = queryParams.center;\n if (!centerParam) return undefined;\n\n const [longitude, latitude] = decodeQueryParamAsString(centerParam)\n .split(',')\n .map((coord) => +coord);\n\n if (isNaN(longitude) || isNaN(latitude)) return undefined;\n\n return {\n lat: latitude,\n lng: longitude,\n };\n}\n\nexport function getRoute(searchType: SearchType) {\n if (searchType === SearchType.MeetingRoom) {\n return SEARCH_ROUTES.MEETING_ROOMS;\n }\n if (searchType === SearchType.Coworking) {\n return SEARCH_ROUTES.COWORKING;\n }\n return SEARCH_ROUTES.LOCATIONS;\n}\n\nexport function createLocalizationQueryParams(\n coords?: CameraMapOptions,\n query?: string\n) {\n if (!coords) return { query };\n\n const coordsBounds = coords.bounds as [number, number, number, number];\n const coordsCenter = coords.center as [number, number];\n\n return {\n query,\n bounds: coordsBounds ? coordsBounds.join(',') : undefined,\n center: coordsCenter.join(','),\n zoom: coords.zoom.toString(),\n };\n}\n\nexport function mapBounds(bounds: Bounds): WithinFilterDto {\n return {\n northEastPoint: {\n longitude: bounds.ne.lng,\n latitude: bounds.ne.lat,\n },\n southWestPoint: {\n longitude: bounds.sw.lng,\n latitude: bounds.sw.lat,\n },\n };\n}\n","import debounce from 'lodash.debounce';\nimport { useCallback } from 'react';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function useDebounce any>(\n func: T,\n ms: number,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n dependencies?: any[]\n) {\n return useCallback(debounce(func, ms), dependencies || []);\n}\n","export const EU_COUNTRIES = [\n 'AT', // Austria\n 'BE', // Belgium\n 'BG', // Bulgaria\n 'HR', // Croatia\n 'CY', // Cyprus\n 'CZ', // Czechia\n 'DK', // Denmark\n 'EE', // Estonia\n 'FI', // Finland\n 'FR', // France\n 'DE', // Germany\n 'GR', // Greece\n 'HU', // Hungary\n 'IE', // Ireland\n 'IT', // Italy\n 'LV', // Latvia\n 'LT', // Lithuania\n 'LU', // Luxembourg\n 'MT', // Malta\n 'NL', // Netherlands\n 'PL', // Poland\n 'PT', // Portugal\n 'RO', // Romania\n 'SK', // Slovakia\n 'SI', // Slovenia\n 'ES', // Spain\n 'SE', // Sweden\n];\n\nexport const UK = 'GB';\nexport const US = 'US';\nexport const CA = 'CA';\n","import { ImageDto } from '@/lib/image.dto';\nimport { BlackoutDateDto } from '@/lib/shared/dto/blackout-date.dto';\nimport { Countries } from '@/models/Countries.enum';\n\nimport { GeolocalizationDto } from './geolocalization.dto';\nimport { LocationAmenityDto } from './location-amenity.dto';\nimport { LocationCalendlyLinksDto } from './location-calendly-links.dto';\nimport { LocationManagerDto } from './location-manager.dto';\nimport { LocationMeetingSpacesDto } from './location-meeting-spaces.dto';\nimport { LocationOpeningHoursDto } from './location-opening-hours.dto';\nimport { LocationPhases } from './location-phases.enum';\nimport { LocationProductsDto } from './location-products.dto';\n\nexport type LocationDto = {\n id: string;\n sfId: string;\n slug: string;\n name: string;\n address: string;\n address2: string;\n zipCode: string;\n city: string;\n state: string;\n country: Countries;\n geolocalization: GeolocalizationDto;\n phase: LocationPhases;\n calendlyLinks: LocationCalendlyLinksDto;\n currencyIsoCode: string | null;\n brochureLink: string;\n locationManagers: LocationManagerDto[];\n images: ImageDto[];\n matterportImageLink: string | null;\n summary: string | null;\n products: LocationProductsDto;\n parkingInfos: string | null;\n parkingAlt: string | null;\n parkingGuest: string | null;\n bikeRacks: string | null;\n buildingCheckInInstructions: string | null;\n transitInfos: TransitInfo[];\n lodgingAndDining: string[];\n attractions: string[];\n embedSocialId: string | null;\n meetingSpaces: LocationMeetingSpacesDto;\n salesHighlightBanner: string | null;\n firstDayOfBusinessISO: string | null;\n email: string;\n phone: string | null;\n timezone: string;\n brandName: string | null;\n amenities: {\n standard: LocationAmenityDto[];\n unique: LocationAmenityDto[];\n };\n metroSfId: string;\n metroName: string;\n metaDescription?: string;\n isEarlyInPersonTourEnabled: boolean;\n hideOpeningDate: boolean;\n salesOfficeAddress: string | null;\n isWaitlisting: boolean;\n openingHours: LocationOpeningHoursDto;\n blackoutDates: BlackoutDateDto[];\n contractType: string | undefined;\n landlord: string | undefined;\n licensor: string | undefined | null;\n isCrawlable: boolean;\n};\n\nexport enum TransitCategoryType {\n Airport = 'Airport',\n Bike = 'Bike',\n Bus = 'Bus',\n Driving = 'Driving',\n Parking = 'Parking',\n Subway = 'Subway',\n Train = 'Train',\n TransitHub = 'TransitHub',\n Other = 'Other',\n}\n\nexport type TransitInfo = {\n description: string;\n category: TransitCategoryType;\n};\n","export enum LocationPriceFormat {\n CheapestPerSeat = 'Cheapest Per Seat',\n CheapestOffice = 'Cheapest Office',\n}\n\nexport type LocationPricesDto = {\n currencyIsoCode: string;\n priceFormat: LocationPriceFormat;\n lowestPrices: {\n dedicatedOffice: LocationPriceItemDto | undefined | null;\n suites: LocationPriceItemDto | undefined | null;\n access: LocationPriceItemDto | undefined | null;\n virtual: LocationPriceItemDto | undefined | null;\n meetingRoom: LocationMeetingRoomPriceItemDto;\n coworkingDayPass: LocationCoworkingDayPassPriceItemDto | undefined | null;\n coworking: LocationCoworkingPriceItemDto;\n office: LocationOfficePriceItemDto;\n };\n};\n\nexport type LocationMeetingRoomPriceItemDto = {\n price: number;\n perHour?: number;\n perDay?: number;\n};\n\nexport type LocationCoworkingDayPassPriceItemDto = {\n price: number;\n};\n\nexport type LocationOfficePriceItemDto = {\n perMonth?: number;\n};\n\nexport type LocationCoworkingPriceItemDto = {\n perDay?: number;\n perMonth?: number;\n};\n\nexport type LocationPriceItemDto = {\n family: string;\n price: number;\n productSquareFootage: number | null | undefined;\n seatCount: number | null | undefined;\n};\n","export enum SortFilter {\n PHASE = 'phase',\n}\n","export * from './geolocalization.dto';\nexport * from './location-manager.dto';\nexport * from './location.dto';\nexport * from './location-price.dto';\nexport * from './location-products.dto';\nexport * from './location-meeting-spaces.dto';\nexport * from './micro-location.dto';\nexport * from './simple-location.dto';\nexport * from './simple-location-search.dto';\nexport * from './location-and-near-locations.dto';\nexport * from './location-phases.enum';\nexport * from './manager-roles.enum';\nexport * from './metro.dto';\nexport * from './sort-filter.enum';\n","export enum LocationPhases {\n Signed = 'Signed',\n Launch = 'Launch',\n Open = 'Open',\n Closed = 'Closed',\n Draft = 'Draft',\n Greenlight = 'Greenlight',\n HardCommit = 'Hard Commit',\n // The following phases are to be deprecated:\n Takeover = 'Takeover',\n PostLaunch = 'Post-Launch',\n}\n","export enum ManagerRoles {\n CommunityManager = 'Community Manager',\n OperationsAssociate = 'Operations Associate',\n AreaManager = 'Area Manager',\n RegionalManager = 'Regional Manager',\n MembershipManager = 'Membership Manager',\n NationalAccountsMembershipManager = 'National Accounts Membership Manager',\n ConferenceServicesManager = 'Conference Services Manager',\n TechnicalAudioVisualManager = 'Technical Audio Visual Manager',\n // New roles - Revisit above roles during LCR refactor\n MemberExperienceAssociate = 'Member Experience Associate',\n MemberExperienceManager = 'Member Experience Manager',\n AssistantGeneralManager = 'Assistant General Manager',\n GeneralManager = 'General Manager',\n RegionalDirector = 'Regional Director',\n AreaSalesLead = 'Area Sales Lead',\n EnterpriseSales = 'Enterprise Sales',\n AccountManager = 'Account Manager',\n FacilitiesManager = 'Facilities Manager',\n FacilitiesAssociate = 'Facilities Associate',\n}\n","import { getServerConfig } from '@/utils/config';\nimport { tryFetchToJson } from '@/utils/http-request';\n\nimport {\n MicroLocationDto,\n SimpleIndustriousLocationSearchDto,\n SimpleLocationSearchDto,\n} from './dto';\nimport { LocationAndNearLocationsDto } from './dto/location-and-near-locations.dto';\nimport { LocationFilterDto } from './dto/location-filter.dto';\nimport { LocationHierarchies } from './dto/location-hierarchies.dto';\n\nexport enum GetAllLocationsResponseTypes {\n Full = 'full',\n Micro = 'micro',\n}\n\nexport async function fetchLocationBySlug(\n slug: string,\n locale: string\n): Promise {\n const url = `${\n getServerConfig().NEXT_PUBLIC_INVENTORY_API_URL\n }/discovery/locations/${slug}`;\n\n return tryFetchToJson({\n fetchParams: {\n input: url,\n init: {\n headers: { 'Accept-Language': locale },\n cache: 'no-cache',\n },\n },\n });\n}\n\nexport async function fetchLocationMeetingRoomCount(\n slug: string\n): Promise {\n const url = `${\n getServerConfig().NEXT_PUBLIC_INVENTORY_API_URL\n }/discovery/locations/${slug}/meeting-room-count?isOpenToAll=true`;\n\n const result = await tryFetchToJson<{ count: number }>({\n fetchParams: {\n input: url,\n },\n });\n\n return result?.count ?? undefined;\n}\n\nexport type FetchAllLocationsProps = {\n locale: string;\n responseType?: GetAllLocationsResponseTypes;\n withPrivateOffice?: boolean;\n withCoworkingDayPassOnly?: boolean;\n withOnlineMeetingRoomReservation?: boolean;\n onlyCrawlable?: boolean;\n} & LocationFilterDto;\n\nexport async function fetchIndustriousMicroLocations(\n locale: string\n): Promise {\n return fetchAllIndustriousLocations({\n locale,\n responseType: GetAllLocationsResponseTypes.Micro,\n }) as Promise;\n}\n\nexport async function fetchAllLocations(\n params: FetchAllLocationsProps\n): Promise {\n const { locale, responseType, ...filters } = params;\n\n const host = getServerConfig().NEXT_PUBLIC_INVENTORY_API_URL;\n\n const url = `${host}/discovery/locations/all?responseType=${\n responseType || GetAllLocationsResponseTypes.Full\n }`;\n\n const locations = await tryFetchToJson({\n fetchParams: {\n input: url,\n init: {\n headers: {\n 'Accept-Language': locale,\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n body: JSON.stringify(filters),\n },\n },\n skipFetchError: true,\n });\n\n return locations ?? [];\n}\n\nexport async function fetchAllIndustriousLocations(\n props: FetchAllLocationsProps\n): Promise {\n return fetchAllLocations({\n ...props,\n onlyInternal: true,\n }) as Promise;\n}\n\nexport async function fetchLocationHierarchies(props: {\n locale: string;\n}): Promise {\n const { locale } = props;\n\n const url = `${\n getServerConfig().NEXT_PUBLIC_INVENTORY_API_URL\n }/discovery/locations/hierarchies`;\n\n return tryFetchToJson({\n fetchParams: {\n input: url,\n init: { headers: { 'Accept-Language': locale } },\n },\n });\n}\n","export enum Countries {\n Belgium = 'Belgium',\n Canada = 'Canada',\n France = 'France',\n UnitedStates = 'United States',\n UnitedKingdom = 'United Kingdom',\n}\n","export * from './location-utils';\nexport * from './LatLng';\nexport * from './solutions-pages-utils';\n","import { UK } from '@/lib/countries';\nimport {\n LocationDto,\n LocationManagerDto,\n LocationPhases,\n LocationPriceFormat,\n LocationPricesDto,\n LocationProductName,\n ManagerRoles,\n} from '@/lib/locations/dto';\nimport { LocationCalendlyLinksDto } from '@/lib/locations/dto/location-calendly-links.dto';\nimport {\n DEFAULT_CURRENCY_ISO_CODE,\n FR_GENERIC_NUMBER,\n UK_GENERIC_APPLICATION_NUMBER,\n US_GENERIC_APPLICATION_NUMBER,\n US_GENERIC_NUMBER,\n} from '@/utils/constants';\n\nimport { Countries } from './Countries.enum';\nimport { Products } from './Products.enum';\n\nconst PRODUCT_SUITES_IMG = '/public-s3/images/product_suites_new.webp';\nconst PRODUCT_VIRTUAL_IMG = '/public-s3/images/product_virtual_new.webp';\nexport const OFFICE_WINDOW_IMG = '/public-s3/images/window-office.webp';\nexport const OFFICE_INTERIOR_IMG = '/public-s3/images/interior-office.webp';\n\nexport const GOOGLE_SEARCH_API = 'https://www.google.com/maps/search/?api=1';\n\nexport enum LocationPrimaryCtaTypes {\n GetNotified = 'get-notified',\n ScheduleCall = 'schedule-call',\n GetStarted = 'get-started',\n BookTour = 'book-tour',\n}\n\ntype getLocationPrimaryCtaTypeProps = {\n phase: LocationPhases;\n isEarlyInPersonTourEnabled: boolean;\n calendlyLinks: LocationCalendlyLinksDto;\n};\n\nexport function getLocationPrimaryCtaType({\n phase,\n isEarlyInPersonTourEnabled,\n calendlyLinks,\n}: getLocationPrimaryCtaTypeProps): LocationPrimaryCtaTypes {\n const isLaunchLocationWithoutEarlyInPersonTourAvailable =\n phase === LocationPhases.Launch &&\n (!isEarlyInPersonTourEnabled || !calendlyLinks.inPersonTour);\n\n if (phase === LocationPhases.Signed) {\n return LocationPrimaryCtaTypes.GetNotified;\n }\n if (\n phase === LocationPhases.PostLaunch ||\n isLaunchLocationWithoutEarlyInPersonTourAvailable\n ) {\n return LocationPrimaryCtaTypes.ScheduleCall;\n }\n\n return LocationPrimaryCtaTypes.BookTour;\n}\n\nexport function getGoogleMapsDirectionUrlFromString(query: string) {\n return `${GOOGLE_SEARCH_API}&query=${encodeURI(query)}`;\n}\n\nexport function getGoogleMapsDirectionUrl(props: {\n city: string;\n address: string;\n brandName: string | null;\n name: string;\n state: string;\n zipCode: string;\n}) {\n const { brandName, name, address, city, state, zipCode } = props;\n\n return `${GOOGLE_SEARCH_API}&query=${encodeURI(\n `${brandName || name} ${address} ${city} ${state} ${zipCode}`\n )}`;\n}\n\nexport function sortMemberExperienceTeam(\n a: LocationManagerDto,\n b: LocationManagerDto\n): number {\n if (a.role === b.role) {\n return a.name.localeCompare(b.name);\n }\n if (a.role !== ManagerRoles.CommunityManager) {\n return 1;\n }\n return -1;\n}\n\nexport function getFormattedAddressByCountry({\n country,\n address,\n address2,\n city,\n state,\n zipCode,\n}: {\n country: Countries;\n address: string;\n address2: string | null;\n city: string;\n state: string;\n zipCode?: string;\n}) {\n const firstPart = `${address}${address2 ? ` ${address2}` : ''}`;\n\n switch (country) {\n case Countries.Belgium:\n case Countries.France:\n return {\n addressLine1: firstPart,\n addressLine2: `${zipCode} ${city}, ${country}`,\n };\n case Countries.Canada:\n return {\n addressLine1: firstPart,\n addressLine2: `${city}, ${state} ${zipCode}, ${country}`,\n };\n case Countries.UnitedKingdom:\n return {\n addressLine1: firstPart,\n addressLine2: `${city} ${zipCode}, ${country}`,\n };\n default:\n return {\n addressLine1: firstPart,\n addressLine2: `${city}, ${state} ${zipCode}`,\n };\n }\n}\n\nexport function getGenericPhoneNumberByCountry(country: string) {\n switch (country) {\n case Countries.France:\n return FR_GENERIC_NUMBER;\n case Countries.UnitedKingdom:\n return UK_GENERIC_APPLICATION_NUMBER;\n default:\n return US_GENERIC_NUMBER;\n }\n}\n\nexport function getPhoneApplicationForm({\n location,\n country,\n}: {\n location:\n | {\n phone: string | null;\n phase: LocationPhases;\n country: string;\n }\n | undefined;\n country: string;\n}) {\n if (!location) {\n return country === UK\n ? UK_GENERIC_APPLICATION_NUMBER\n : US_GENERIC_APPLICATION_NUMBER;\n }\n\n if ([LocationPhases.Signed, LocationPhases.Launch].includes(location.phase)) {\n return getGenericPhoneNumberByCountry(location.country);\n }\n\n if (location.phone) {\n return location.phone;\n }\n\n return US_GENERIC_NUMBER;\n}\n\nexport function getLocationMembershipManagerPhone({\n locationManagers,\n country,\n}: {\n locationManagers: LocationManagerDto[];\n country: Countries;\n}): string {\n const membershipManager = locationManagers.find(\n (manager) => manager.role === ManagerRoles.MembershipManager\n );\n\n if (membershipManager && membershipManager.phone) {\n return membershipManager.phone;\n }\n\n if (country === Countries.UnitedKingdom) {\n return UK_GENERIC_APPLICATION_NUMBER;\n }\n\n return US_GENERIC_APPLICATION_NUMBER;\n}\n\nexport function createEmptyLocationPrices(): LocationPricesDto {\n return {\n currencyIsoCode: DEFAULT_CURRENCY_ISO_CODE,\n priceFormat: LocationPriceFormat.CheapestOffice,\n lowestPrices: {\n dedicatedOffice: null,\n suites: null,\n access: null,\n virtual: null,\n meetingRoom: {\n price: 0,\n },\n coworkingDayPass: null,\n coworking: {},\n office: {},\n },\n };\n}\n\nexport function getLocationFullName(props: {\n name: string;\n brandName: string | null;\n}) {\n const { name, brandName } = props;\n\n if (brandName && !name.includes(brandName)) {\n return `${brandName} ${name}`;\n }\n\n return name;\n}\n\nconst displayRoles = [\n ManagerRoles.OperationsAssociate,\n ManagerRoles.CommunityManager,\n];\n\nexport type VisibleLocationManager = LocationManagerDto & {\n avatarUrl: string;\n role:\n | ManagerRoles.CommunityManager\n | ManagerRoles.OperationsAssociate\n | ManagerRoles.TechnicalAudioVisualManager\n | ManagerRoles.ConferenceServicesManager;\n};\n\nexport function getVisibleManagers(\n managers: LocationManagerDto[]\n): VisibleLocationManager[] {\n return managers\n .filter((manager) => !!manager.avatarUrl)\n .filter((manager): manager is VisibleLocationManager =>\n displayRoles.includes(manager.role)\n );\n}\n\nexport function getProductPageLink(productName: LocationProductName) {\n switch (productName) {\n case 'dedicatedOffice':\n return '/solutions/offices';\n case 'meetingRoom':\n return '/solutions/conference-and-meeting-rooms';\n case 'access':\n return '/solutions/coworking-membership';\n case 'coworkingDayPass':\n return '/solutions/coworking-day-pass';\n default:\n return `/solutions/${productName}`;\n }\n}\n\nexport function getProductImage(product: Products.Suite | Products.Virtual) {\n switch (product) {\n case 'virtual':\n return PRODUCT_VIRTUAL_IMG;\n default:\n return PRODUCT_SUITES_IMG;\n }\n}\n\nexport function getSearchNearByLocationsUrl(location: LocationDto) {\n const {\n city,\n geolocalization: { lat, lng },\n } = location;\n return `/locations?center=${lng},${lat}&query=${encodeURI(city)}&zoom=10`;\n}\n","import { LocationProductName } from '@/lib/locations/dto';\n\nconst PRODUCT_PAGE_ACCESS_IMG = '/public-s3/images/solutions-pages/access.webp';\nconst PRODUCT_PAGE_OFFICE_IMG =\n '/public-s3/images/solutions-pages/dedicatedOffice.webp';\nconst PRODUCT_PAGE_MEETING_ROOM_IMG =\n '/public-s3/images/solutions-pages/meetingRoom.webp';\nconst PRODUCT_PAGE_SUITES_IMG = '/public-s3/images/solutions-pages/suites.webp';\nconst PRODUCT_PAGE_VIRTUAL_IMG =\n '/public-s3/images/solutions-pages/virtual.webp';\nconst PRODUCT_PAGE_COWORKING_DAY_PASS_IMG =\n '/public-s3/images/solutions-pages/coworkingDayPass.webp';\n\nexport enum SolutionPageSlugs {\n Suites = 'suites',\n Access = 'access',\n CoworkingMembership = 'coworking-membership',\n Virtual = 'virtual',\n Conference = 'conference-and-meeting-rooms',\n Offices = 'offices',\n CoworkingDayPass = 'coworking-day-pass',\n}\n\nexport function getProductNameFromSlug(\n slug: SolutionPageSlugs\n): LocationProductName | null {\n if (slug === SolutionPageSlugs.Conference) {\n return 'meetingRoom';\n }\n if (slug === SolutionPageSlugs.Offices) {\n return 'dedicatedOffice';\n }\n if (slug === SolutionPageSlugs.CoworkingDayPass) {\n return 'coworkingDayPass';\n }\n if (\n slug === SolutionPageSlugs.CoworkingMembership ||\n slug === SolutionPageSlugs.Access\n ) {\n return 'access';\n }\n if (['suites', 'virtual'].includes(slug)) {\n return slug;\n }\n\n return null;\n}\n\nexport function getProductPageImage(productName: LocationProductName) {\n switch (productName) {\n case 'access':\n return PRODUCT_PAGE_ACCESS_IMG;\n case 'dedicatedOffice':\n return PRODUCT_PAGE_OFFICE_IMG;\n case 'meetingRoom':\n return PRODUCT_PAGE_MEETING_ROOM_IMG;\n case 'suites':\n return PRODUCT_PAGE_SUITES_IMG;\n case 'coworkingDayPass':\n return PRODUCT_PAGE_COWORKING_DAY_PASS_IMG;\n default:\n return PRODUCT_PAGE_VIRTUAL_IMG;\n }\n}\n\nexport function getProductPerksTranslationsKey(\n productName: LocationProductName,\n isLocationProductPage?: boolean\n) {\n if (productName === 'access' && !isLocationProductPage) {\n return ['perk-1', 'perk-2', 'perk-3'];\n }\n return ['perk-1', 'perk-2'];\n}\n","export enum BrandNames {\n Industrious = 'Industrious',\n WelkinMeraki = 'Welkin & Meraki',\n TheGreatRoom = 'The Great Room',\n}\n","import { string } from 'yup';\n\nimport { isValidDate } from '../date-utils';\n\nexport const stringDay = () =>\n string().test((x) => {\n if (x == null) {\n return true;\n }\n return isValidDate(x) && /^\\d{4}-\\d{2}-\\d{2}$/.test(x);\n });\n","import { useTranslations } from 'next-intl';\n\nimport { SelectOption } from '@/components/form/Select/types';\nimport {\n LocationDto,\n SimpleIndustriousLocationSearchDto,\n SimpleLocationSearchDto,\n WorlwideExternalLocationDto,\n} from '@/lib/locations/dto';\nimport { LocationPhases, ManagerRoles } from '@/lib/locations/dto';\nimport {\n LocationOpeningHoursDto,\n LocationValueOpeningHour,\n} from '@/lib/locations/dto/location-opening-hours.dto';\nimport { BlackoutDateDto } from '@/lib/shared/dto/blackout-date.dto';\nimport { BrandNames } from '@/models/BrandNames.enum';\nimport { DateRange } from '@/models/DateRange';\nimport tgrLogo from '@/public/images/brands/TGR.svg';\nimport wmLogo from '@/public/images/brands/welkin-and-meraki.svg';\n\nimport {\n DAY_PASS_CUTOFF_HOUR,\n DISPLAY_SEASON_AFTER_NB_DAYS,\n MAX_BOOKING_MONTHS,\n NORTH_SEASONS_BY_QUARTER,\n SOUTH_SEASONS_BY_QUARTER,\n} from './constants';\nimport {\n addMonths,\n createLocalDay,\n differenceInDays,\n formatToDay,\n getAbbreviatedDayName,\n getNextDay,\n getQuarter,\n getTomorrowDay,\n isAfter,\n isSameDay,\n setHours,\n setMinutes,\n} from './date-utils';\nimport { sortByLabel } from './select-option-utils';\nimport { stringifyUrl } from './stringify-url';\nimport { stringDay } from './validators/string-day-validator';\n\nexport function createLocationUrl(location: {\n isExternal?: boolean;\n externalLink?: string;\n slug: string;\n}) {\n return location.isExternal\n ? location.externalLink!\n : `/locations/${location.slug}`;\n}\n\nexport function createLocationDayPassUrl(params: {\n slug: string;\n dateRange?: DateRange;\n}) {\n const { slug, dateRange } = params;\n\n const url = `/locations/${slug}/coworking-day-pass`;\n\n if (!dateRange) return url;\n\n return stringifyUrl(url, {\n startDay: formatToDay(dateRange.from),\n endDay: formatToDay(dateRange.to),\n });\n}\n\nexport function isIndustriousLocation(\n location: SimpleLocationSearchDto\n): location is SimpleIndustriousLocationSearchDto {\n return !location.isExternal;\n}\n\nexport function isExternalLocation(\n location: SimpleLocationSearchDto\n): location is WorlwideExternalLocationDto {\n return location.isExternal;\n}\n\nexport function getBrandLogo(brandName: string | null) {\n switch (brandName) {\n case BrandNames.WelkinMeraki:\n return wmLogo;\n case BrandNames.TheGreatRoom:\n return tgrLogo;\n default:\n return undefined;\n }\n}\n\ntype LocationForOption = Pick & {\n metroName?: string;\n};\n\nexport const mapLocationsToOptions = (\n locations: Array\n): SelectOption[] => locations.map(mapLocationToOption).sort(sortByLabel);\n\nexport const mapLocationToOption = (\n location: LocationForOption\n): SelectOption => ({\n label: getLocationOptionLabel(location),\n value: location.sfId,\n});\n\nconst getLocationOptionLabel = (location: LocationForOption) => {\n return `${location.city} - ${location.name}`;\n};\n\n// This function extract the date disregarding time and timezone as we currently don't care in SF.\n// if we don't do this, it brings an issue\nexport function getOpeningDate(dateISO: string) {\n const year = +dateISO.substring(0, 4);\n const month = +dateISO.substring(5, 7) - 1;\n const day = +dateISO.substring(8, 10);\n\n return new Date(year, month, day);\n}\n\nexport function getOpeningLabelTranslationKey(params: {\n openingDate: Date;\n latitude: number;\n}) {\n const { openingDate, latitude } = params;\n\n const is60daysAway =\n differenceInDays(openingDate, new Date()) > DISPLAY_SEASON_AFTER_NB_DAYS;\n\n if (!is60daysAway) {\n return 'date';\n }\n\n const quarter = getQuarter(openingDate);\n\n return latitude > 0\n ? NORTH_SEASONS_BY_QUARTER[quarter]\n : SOUTH_SEASONS_BY_QUARTER[quarter];\n}\n\nexport function managerRoleToTranslationKey(role: string) {\n switch (role) {\n case ManagerRoles.OperationsAssociate:\n return 'operations-associate';\n case ManagerRoles.ConferenceServicesManager:\n return 'conference-services-manager';\n case ManagerRoles.TechnicalAudioVisualManager:\n return 'technical-audio-visual-manager';\n default:\n return 'community-manager';\n }\n}\n\nexport function shouldShowLogo(brandName: string | null) {\n return brandName === BrandNames.WelkinMeraki;\n}\n\nexport function getLocationHighlightName(params: {\n name: string;\n brandName: LocationDto['brandName'];\n t: ReturnType>;\n}) {\n const { name, brandName, t } = params;\n\n if (\n brandName == null ||\n brandName === BrandNames.WelkinMeraki ||\n name.includes(brandName)\n ) {\n return name;\n }\n\n return t('highlight-name', { brandName, locationName: name });\n}\n\nexport function shouldShowOpeningLabel(location: {\n isExternal?: boolean;\n firstDayOfBusinessISO: string | null;\n phase?: LocationPhases;\n hideOpeningDate?: boolean;\n isWaitlisting?: boolean;\n}) {\n return (\n !location.isExternal &&\n location.firstDayOfBusinessISO != null &&\n !location.hideOpeningDate &&\n location.phase != null &&\n !location.isWaitlisting &&\n [\n LocationPhases.Signed,\n LocationPhases.Launch,\n LocationPhases.PostLaunch,\n ].includes(location.phase)\n );\n}\n\nexport const getDayOpeningHours = (\n openingHours: LocationOpeningHoursDto,\n day: string\n): LocationValueOpeningHour | null => {\n const currentDayOfWeek = getAbbreviatedDayName(\n day\n ) as keyof LocationOpeningHoursDto;\n\n return openingHours[currentDayOfWeek] ?? null;\n};\n\nexport function getNextAvailableDay(props: {\n day: string;\n blackoutDates: BlackoutDateDto[];\n openingHours: LocationOpeningHoursDto;\n unavailableDays: string[];\n}) {\n const { day, blackoutDates, openingHours, unavailableDays } = props;\n let isAvailableDay = false;\n let currentDay = day;\n\n while (!isAvailableDay) {\n const dayOpeningHours = getDayOpeningHours(openingHours, currentDay);\n if (\n dayOpeningHours === null ||\n blackoutDates.some((blackoutDate) =>\n isBlackoutDay(currentDay, blackoutDate)\n ) ||\n unavailableDays.includes(currentDay)\n ) {\n currentDay = getNextDay(currentDay);\n continue;\n }\n isAvailableDay = true;\n }\n\n return currentDay;\n}\n\nexport function getValidEndDays(props: {\n startDay: string;\n blackoutDates: BlackoutDateDto[];\n openingHours: LocationOpeningHoursDto;\n unavailableDays: string[];\n}) {\n const { startDay, blackoutDates, openingHours, unavailableDays } = props;\n let currentDay = startDay;\n const possibleEndDays: string[] = [startDay];\n\n while (true) {\n const nextDay = getNextDay(currentDay);\n const nextAvailableDay = getNextAvailableDay({\n day: nextDay,\n blackoutDates,\n openingHours,\n unavailableDays,\n });\n if (nextAvailableDay !== nextDay) {\n break;\n }\n possibleEndDays.push(nextDay);\n currentDay = nextDay;\n }\n\n return possibleEndDays;\n}\n\nexport function getMaxValidEndDay(\n props: Parameters[0]\n) {\n const validEndDays = getValidEndDays(props);\n return validEndDays[validEndDays.length - 1];\n}\n\nfunction isBlackoutDay(day: string, blackoutDate: BlackoutDateDto) {\n const blackoutDay = blackoutDate.date.split('T')[0];\n return day === blackoutDay;\n}\n\nexport async function getNextAvailableDateRange(props: {\n location: LocationDto;\n preferredStartDay?: string;\n preferredEndDay?: string;\n unavailableDays: string[];\n}): Promise<{ startDay: string; endDay: string }> {\n const { location, preferredEndDay, preferredStartDay, unavailableDays } =\n props;\n\n const startDay = getNextAvailableDay({\n day: await getValidDay(preferredStartDay),\n openingHours: location.openingHours,\n blackoutDates: location.blackoutDates,\n unavailableDays,\n });\n\n if (\n startDay !== preferredStartDay ||\n !preferredEndDay ||\n preferredEndDay < preferredStartDay\n ) {\n return getDefaultDateRange(startDay);\n }\n\n const endDay = getNextAvailableDay({\n day: await getValidDay(preferredEndDay),\n openingHours: location.openingHours,\n blackoutDates: location.blackoutDates,\n unavailableDays,\n });\n\n if (endDay !== preferredEndDay) {\n return getDefaultDateRange(startDay);\n }\n\n const validEndDates = await getValidEndDays({\n startDay,\n blackoutDates: location.blackoutDates,\n openingHours: location.openingHours,\n unavailableDays,\n });\n\n if (validEndDates.some((x) => x === endDay)) {\n return { startDay, endDay };\n }\n\n return getDefaultDateRange(startDay);\n}\n\nasync function getValidDay(day: string | undefined): Promise {\n const tomorrowDay = getTomorrowDay();\n const today = new Date();\n const todayAtCutoff = setHours(setMinutes(today, 0), DAY_PASS_CUTOFF_HOUR);\n\n const maxBookingDate = addMonths(today, MAX_BOOKING_MONTHS);\n\n if (day && new Date(day) > maxBookingDate) {\n return tomorrowDay;\n }\n\n if (day == null) {\n return tomorrowDay;\n }\n\n if (isSameDay(createLocalDay(day), today) && !isAfter(today, todayAtCutoff)) {\n return day;\n }\n\n const isValid = await stringDay().isValid(day);\n\n if (!isValid || day < tomorrowDay) {\n return tomorrowDay;\n }\n return day;\n}\n\nexport function getValidDaySync(day: string | undefined): string {\n const tomorrowDay = getTomorrowDay();\n const today = new Date();\n const todayAtCutoff = setHours(setMinutes(today, 0), DAY_PASS_CUTOFF_HOUR);\n\n const maxBookingDate = addMonths(today, MAX_BOOKING_MONTHS);\n\n if (day && new Date(day) > maxBookingDate) {\n return tomorrowDay;\n }\n\n if (day == null) {\n return tomorrowDay;\n }\n\n if (isSameDay(createLocalDay(day), today) && !isAfter(today, todayAtCutoff)) {\n return day;\n }\n\n const isValid = stringDay().isValidSync(day);\n\n if (!isValid || day < tomorrowDay) {\n return tomorrowDay;\n }\n return day;\n}\n\nfunction getDefaultDateRange(startDay: string) {\n return { startDay, endDay: startDay };\n}\n\nexport function isCoworkingDayPassEnabled(location: LocationDto) {\n const {\n canBuyOnline,\n availableAtLocation,\n dailyOnDemandCapacity,\n currentlySellable,\n } = location.products.coworkingDayPass;\n\n return Boolean(\n canBuyOnline &&\n currentlySellable &&\n availableAtLocation &&\n dailyOnDemandCapacity != null &&\n dailyOnDemandCapacity > 0\n );\n}\n\nexport function isSsosEnabled(location: LocationDto) {\n const { canBuyOnline, availableAtLocation, currentlySellable } =\n location.products.dedicatedOffice;\n\n return (\n canBuyOnline === true &&\n currentlySellable === true &&\n availableAtLocation === true\n );\n}\n","import { SelectOption } from '@/components/form/Select/types';\n\nexport function sortByLabel(a: SelectOption, b: SelectOption) {\n return a.label.localeCompare(b.label);\n}\n","export default {\"src\":\"/_next/static/media/markerAltIcon.9db54171.svg\",\"height\":18,\"width\":14,\"blurWidth\":0,\"blurHeight\":0};"],"names":["CircleLoader","param","className","react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__","jsx","svg","clsx","xmlns","width","height","fill","path","fillRule","stroke","d","clipRule","ModalDialogContainer","onClose","children","dataTestId","withoutCloseButton","closable","t","useTranslations","handleCloseModal","jsxs","div","role","tabIndex","aria-modal","aria-labelledby","aria-describedby","data-testid","style","concat","button","type","aria-keyshortcuts","aria-label","onClick","Image","src","closeIcon","alt","aria-hidden","ModalDialog","props","container","document","getElementById","ID_MODAL_CONTAINER","downHandler","key","useEffect","restoreScroll","body","overflowY","window","addEventListener","disableScroll","removeEventListener","ReactDOM","ButtonAsLink","others","PrimaryButton","sm","isLoading","otherProps","SecondaryButton","ArrowButton","isDisabled","direction","jsx_runtime","disabled","ChevronIcon","TertiaryButton","CustomOptionSelect","isFocused","data","isCurrentLocationOption","value","CURRENT_LOCATION_VALUE","components","Option","localizationIcon","p","label","description","getCustomSelectTheme","theme","borderRadius","borderColor","colors","LoepIcon","viewBox","beesIcon","placesIcon","Menu","Input","rest","autoComplete","GroupHeading","icon","Group","Control","leftIndicator","rightIndicator","controlClassName","selectProps","SearchField","placeholder","onChange","onInputChange","options","searchValue","autoFocus","isScrollOnFocus","screenSize","useScreenSize","shouldRenderValue","setShouldRenderValue","useState","selectRef","useRef","current","focus","maxMenuHeight","useMemo","ScreenSize","LG","Select","ref","name","instanceId","unstyled","isMulti","classNames","DropdownIndicator","filterOption","noOptionsMessage","onMenuOpen","onMenuClose","controlShouldRenderValue","onFocus","scrollToFieldAtTop","element","top","getBoundingClientRect","btnLocation","topFromWindow","scrollY","navbarHeight","innerWidth","SM","NAVBAR_HEIGHT_MOBILE","NAVBAR_HEIGHT","test","navigator","userAgent","setTimeout","scrollTo","left","behavior","event","target","LocalizationErrorModal","h3","rich","strong","b","chunks","location","reload","LocationSearchInput","latLng","searchType","defaultSearchValue","onClickResultItem","onClickLocation","searchParams","useSearchParams","showToast","hideToast","useToastError","locale","useLocale","screenWidth","searchText","setSearchText","setSearchValue","createSearchValue","getSearchValueFromQuery","get","setOptions","resultsPlaces","setResultsPlaces","resultsLocations","setResultsLocations","showErrorLocalization","setErrorLocalization","loadingBrowserLocation","setLoadingBrowserLocation","lnglat","userLocalization","getDeviceLocalization","isDeviceLocalizationDenied","isLocalizationFromDevice","isLoadingUserLocalization","useUserLocalization","resetResultsPlaces","previousValue","length","resetResultsAddress","setOptionsAsync","mapResultsToOptions","Promise","all","__webpack_require__","e","then","bind","PlacesIcon","BeesIcon","locations","map","formattedAdr","getFormattedAddressByCountry","addressLine1","addressLine2","slug","fetchMapboxPlacesText","useDebounce","coords","proximity","lng","lat","url","stringifyUrl","language","tryFetchToJson","fetchParams","input","onSuccess","response","onFunctionalError","onTechnicalError","fetchLocations","fetchAllLocations","limit","text","nearTo","longitude","latitude","undefined","withPrivateOffice","SearchType","Location","withCoworkingDayPassOnly","Coworking","withOnlineMeetingRoomReservation","MeetingRoom","center","zoom","MAP_SEARCH_CURRENT_LOCATION","handleOnClickAddress","feature","getPlaceNameArrayFromFeature","placeName","MAP_SEARCH_ADDRESS_ZOOM","bbox","bounds","handleOnClickLocation","option","find","r","id","x","inputValue","query","decodeURIComponent","getLatLngFromQuery","queryParams","centerParam","decodeQueryParamAsString","split","coord","isNaN","getRoute","SEARCH_ROUTES","MEETING_ROOMS","COWORKING","LOCATIONS","createLocalizationQueryParams","coordsBounds","coordsCenter","join","toString","mapBounds","northEastPoint","ne","southWestPoint","sw","func","ms","dependencies","useCallback","debounce","EU_COUNTRIES","UK","US","CA","TransitCategoryType","LocationPriceFormat","SortFilter","LocationPhases","ManagerRoles","GetAllLocationsResponseTypes","fetchIndustriousMicroLocations","fetchAllIndustriousLocations","responseType","params","filters","host","getServerConfig","NEXT_PUBLIC_INVENTORY_API_URL","init","headers","method","JSON","stringify","skipFetchError","onlyInternal","Countries","LocationPrimaryCtaTypes","OFFICE_WINDOW_IMG","OFFICE_INTERIOR_IMG","GOOGLE_SEARCH_API","getLocationPrimaryCtaType","phase","isEarlyInPersonTourEnabled","calendlyLinks","isLaunchLocationWithoutEarlyInPersonTourAvailable","Launch","inPersonTour","Signed","PostLaunch","getGoogleMapsDirectionUrlFromString","encodeURI","getGoogleMapsDirectionUrl","brandName","address","city","state","zipCode","sortMemberExperienceTeam","a","localeCompare","CommunityManager","country","address2","firstPart","Belgium","France","Canada","UnitedKingdom","getPhoneApplicationForm","includes","getGenericPhoneNumberByCountry","FR_GENERIC_NUMBER","UK_GENERIC_APPLICATION_NUMBER","US_GENERIC_NUMBER","phone","US_GENERIC_APPLICATION_NUMBER","getLocationMembershipManagerPhone","locationManagers","membershipManager","manager","MembershipManager","getProductPageLink","productName","OperationsAssociate","SolutionPageSlugs","getProductPageImage","getProductPerksTranslationsKey","isLocationProductPage","BrandNames","stringDay","string","isValidDate","createLocationUrl","isExternal","externalLink","createLocationDayPassUrl","dateRange","startDay","formatToDay","from","endDay","to","isIndustriousLocation","isExternalLocation","getBrandLogo","WelkinMeraki","wmLogo","TheGreatRoom","tgrLogo","mapLocationsToOptions","mapLocationToOption","sort","sortByLabel","getLocationOptionLabel","sfId","getOpeningDate","dateISO","Date","substring","getOpeningLabelTranslationKey","openingDate","differenceInDays","DISPLAY_SEASON_AFTER_NB_DAYS","quarter","getQuarter","NORTH_SEASONS_BY_QUARTER","SOUTH_SEASONS_BY_QUARTER","managerRoleToTranslationKey","ConferenceServicesManager","TechnicalAudioVisualManager","shouldShowLogo","getLocationHighlightName","locationName","shouldShowOpeningLabel","firstDayOfBusinessISO","hideOpeningDate","isWaitlisting","getDayOpeningHours","openingHours","day","getAbbreviatedDayName","getNextAvailableDay","blackoutDates","unavailableDays","isAvailableDay","currentDay","dayOpeningHours","some","blackoutDate","date","getNextDay","getMaxValidEndDay","validEndDays","getValidEndDays","possibleEndDays","nextDay","nextAvailableDay","push","getValidDaySync","tomorrowDay","getTomorrowDay","today","todayAtCutoff","setHours","setMinutes","DAY_PASS_CUTOFF_HOUR","maxBookingDate","addMonths","MAX_BOOKING_MONTHS","isSameDay","createLocalDay","isAfter","isValidSync","__webpack_exports__","Z"],"sourceRoot":""}