{"version":3,"file":"static/js/OfficeListingPage.8c2b40db.js","mappings":"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","sources":["components/Filter/FilterLoader.tsx","components/GoogleMap/GoogleMapLoader.tsx","components/Office/OfficeLoader.tsx","pages/OfficeListingPage/OfficeListingPage.styled.ts","pages/OfficeListingPage/OfficeListingPage.tsx","utils/getMapsCoordinates.ts"],"sourcesContent":["import loadable, { DefaultComponent } from \"@loadable/component\";\nimport React, { ReactElement } from \"react\";\n\nimport FilterProps from \"./FilterProps\";\n\nconst Filter = loadable(\n    (): Promise<DefaultComponent<FilterProps>> =>\n        import(/* webpackChunkName: \"Filter\" */ \"./Filter\"),\n);\nconst FilterLoader = (props: FilterProps): ReactElement => (\n    <Filter {...props} />\n);\nexport default FilterLoader;\n","import loadable, { DefaultComponent } from \"@loadable/component\";\nimport React, { ReactElement } from \"react\";\n\nimport GoogleMapProps from \"./GoogleMapProps\";\n\nconst GoogleMap = loadable(\n    (): Promise<DefaultComponent<GoogleMapProps>> =>\n        import(/* webpackChunkName: \"GoogleMap\" */ \"./GoogleMap\"),\n);\nconst GoogleMapLoader = (props: GoogleMapProps): ReactElement => (\n    <GoogleMap {...props} />\n);\nexport default GoogleMapLoader;\n","import loadable, { DefaultComponent } from \"@loadable/component\";\nimport React, { ReactElement } from \"react\";\n\nimport OfficeProps from \"./OfficeProps\";\n\nconst Office = loadable(\n    (): Promise<DefaultComponent<OfficeProps>> =>\n        import(/* webpackChunkName: \"Office\" */ \"./Office\"),\n);\nconst OfficeLoader = (props: OfficeProps): ReactElement => (\n    <Office {...props} />\n);\nexport default OfficeLoader;\n","/* stylelint-disable declaration-block-no-redundant-longhand-properties */\nimport { styled, css } from \"styled-components\";\nimport theme from \"styled-theming\";\n\nimport Button from \"components/Button\";\nimport GoogleMap from \"components/GoogleMap\";\nimport { styledLink } from \"components/Link/Link.styled\";\nimport TextField from \"components/TextField\";\nimport { Container as GridContainer } from \"style/components/Page\";\nimport {\n    styleBodyS,\n    styleBodyM,\n    styleBodyL,\n    styleHeadingXL,\n    styleHeadingXXL,\n} from \"style/components/Typography\";\nimport { columnGap } from \"style/grid\";\nimport { MQ } from \"style/mediaQueries\";\n\nconst buttonColorDisabled = theme(\"theme\", {\n    lightgray: \"--text-on-neutral-disabled\",\n    blue: \"--text-on-blue-disabled\",\n    cyan: \"--text-on-cyan-disabled\",\n});\n\nconst buttonColor = theme(\"theme\", {\n    lightgray: \"--text-on-neutral-primary\",\n    blue: \"--text-on-blue-primary\",\n    cyan: \"--text-on-cyan-primary\",\n});\n\nconst errorColor = theme(\"theme\", {\n    lightgray: \"--label-on-neutral-error\",\n    blue: \"--label-on-blue-error\",\n    cyan: \"--label-on-cyan-error\",\n});\n\nexport const Container = styled(GridContainer)`\n    ${columnGap};\n    align-items: stretch;\n    display: grid;\n    grid-template-columns: repeat(4, [col-start] 1fr) [col-end];\n    padding-bottom: 0;\n    padding-top: 7.875rem;\n\n    ${MQ.FROM_M} {\n        grid-template-columns: repeat(12, [col-start] 1fr) [col-end];\n        min-height: 100vh;\n        padding-top: 10.5rem;\n    }\n\n    ${MQ.FROM_XL} {\n        padding-top: 14.4375rem;\n    }\n`;\n\nexport const ContentWrapper = styled.div`\n    ${columnGap};\n    align-self: flex-start;\n    display: grid;\n    grid-column: col-start 1 / span 4;\n    grid-template-columns: repeat(4, [col-start] 1fr) [col-end];\n    grid-template-rows: auto auto 1fr;\n\n    ${MQ.FROM_M} {\n        grid-column: col-start 1 / span 12;\n        grid-template-columns: repeat(12, [col-start] 1fr) [col-end];\n    }\n\n    ${MQ.FROM_L} {\n        grid-column: col-start 1 / span 5;\n        grid-template-columns: repeat(5, [col-start] 1fr) [col-end];\n        min-height: calc(100vh - 10.5rem);\n    }\n\n    ${MQ.FROM_XL} {\n        min-height: calc(100vh - 14.4375rem);\n    }\n`;\n\nexport const Header = styled.h1.attrs<{\n    $headingSize: string;\n}>(() => ({}))`\n    ${(props) =>\n        props.$headingSize === \"XXL\"\n            ? css`\n                  ${styleHeadingXXL}\n              `\n            : css`\n                  ${styleHeadingXL}\n              `};\n    grid-column: col-start / col-end;\n    margin: 0;\n    margin-bottom: 0.875rem;\n`;\n\nexport const FilterButtons = styled.div`\n    display: flex;\n    flex-flow: row wrap;\n    gap: 0.875rem;\n    grid-column: col-start / col-end;\n    justify-content: flex-start;\n\n    ${MQ.FROM_M} {\n        margin-bottom: 0.875rem;\n    }\n\n    ${MQ.FROM_XL} {\n        margin-bottom: 1.75rem;\n    }\n`;\n\nexport const StyledForm = styled.form`\n    ${columnGap};\n    grid-column: col-start / col-end;\n    margin-bottom: 2.1875rem;\n    margin-top: 2.1875rem;\n    position: relative;\n\n    ${MQ.FROM_M} {\n        margin-bottom: 1.75rem;\n        margin-top: 1.75rem;\n    }\n`;\n\nexport const SearchButton = styled(Button)`\n    color: var(${buttonColor});\n\n    &:hover {\n        color: var(${buttonColor});\n    }\n\n    &.disabled {\n        color: var(${buttonColorDisabled});\n    }\n`;\n\nexport const SearchField = styled(TextField)`\n    margin-bottom: 1.3125rem;\n\n    ${MQ.FROM_L} {\n        margin-bottom: 1.75rem;\n    }\n`;\n\nexport const GpsWrapper = styled.div`\n    grid-column: col-start / col-end;\n    ${styleBodyM};\n`;\n\nexport const GpsButton = styled.button.attrs<{\n    $hoverSpan?: boolean;\n}>(() => ({}))`\n    all: unset;\n    ${styledLink};\n    grid-column: col-start / col-end;\n    justify-self: flex-start;\n\n    svg {\n        margin-right: 0.875rem;\n    }\n`;\n\nexport const GpsError = styled.div`\n    ${styleBodyS}\n    color: var(${errorColor});\n    grid-column: col-start 1 / span 3;\n    margin: 0;\n    margin-bottom: 0;\n    margin-top: 0.875rem;\n\n    ${MQ.FROM_M} {\n        grid-column: col-start 1 / span 4;\n    }\n\n    ${MQ.FROM_L} {\n        grid-column: col-start 1 / span 3;\n    }\n\n    ${MQ.FROM_XL} {\n        grid-column: col-start 1 / span 2;\n    }\n`;\n\nexport const Description = styled.div`\n    ${styleBodyS}\n    align-self: flex-end;\n    display: none;\n    font-style: italic;\n    margin: 0;\n\n    ${MQ.FROM_L} {\n        display: block;\n        grid-column: col-start 1 / span 3;\n        margin-bottom: 2.1875rem;\n    }\n\n    ${MQ.FROM_XL} {\n        grid-column: col-start 1 / span 3;\n        margin-bottom: 3.0625rem;\n    }\n`;\n\nexport const ResultWrapper = styled.div`\n    grid-column: col-start / col-end;\n\n    ${MQ.FROM_L} {\n        ${columnGap};\n        display: grid;\n        grid-column: col-start 6 / col-end;\n        grid-template-columns: repeat(6, [col-start] 1fr) [col-end];\n        grid-template-rows: auto 1fr;\n    }\n`;\n\nexport const ResultButtons = styled.div`\n    align-self: flex-start;\n    display: flex;\n    flex-direction: row;\n    gap: 0.875rem;\n    grid-column: col-start / col-end;\n    justify-content: flex-end;\n    margin-bottom: 1.75rem;\n\n    ${MQ.FROM_XL} {\n        margin-bottom: 4.375rem;\n    }\n`;\n\nexport const ResultList = styled.div`\n    display: flex;\n    flex-flow: column;\n    grid-column: 2 / col-end;\n    padding-bottom: 4.375rem;\n    row-gap: 2.625rem;\n\n    ${MQ.FROM_M} {\n        padding-bottom: 6.125rem;\n    }\n\n    ${MQ.FROM_XL} {\n        padding-bottom: 8.75rem;\n    }\n`;\n\nexport const ResultMap = styled(GoogleMap)`\n    grid-column: col-start / col-end;\n    min-height: calc(80vh);\n\n    ${MQ.FROM_L} {\n        min-height: auto;\n    }\n`;\n\nexport const NoResults = styled.div`\n    ${styleBodyL};\n    font-style: italic;\n`;\n","import { useGTMDispatch } from \"@elgorditosalsero/react-gtm-hook\";\nimport { InputAdornment } from \"@mui/material\";\nimport React, { ReactElement, useEffect, useState } from \"react\";\nimport isEqual from \"react-fast-compare\";\nimport { FieldValues, SubmitHandler, useForm } from \"react-hook-form\";\nimport { useHistory, useLocation } from \"react-router\";\nimport { ThemeProvider } from \"styled-components\";\n\nimport Filter from \"components/Filter\";\nimport Icon from \"components/Icon\";\nimport Office from \"components/Office\";\nimport Section from \"components/Section\";\nimport TextBlock from \"components/TextBlock\";\nimport {\n    useBreakpoint,\n    useDebounce,\n    useIsomorphicLayoutEffect,\n    useGoogleMapsKey,\n} from \"hooks\";\nimport { Wrapper } from \"style/components/Page\";\nimport { LocationChangeState } from \"types/state/LocationChangeState\";\nimport { addEditAttributes } from \"utils/episerver\";\nimport { getMapCoordinates } from \"utils/getMapsCoordinates\";\n\nimport {\n    Container,\n    Header,\n    SearchField,\n    GpsButton,\n    StyledForm,\n    Description,\n    SearchButton,\n    GpsError,\n    GpsWrapper,\n    NoResults,\n    ContentWrapper,\n    ResultList,\n    ResultMap,\n    ResultWrapper,\n    ResultButtons,\n    FilterButtons,\n} from \"./OfficeListingPage.styled\";\nimport OfficeListingPageProps from \"./OfficeListingPageProps\";\n\nconst OfficeListingPage = ({\n    hero,\n    heading,\n    result: { filters, items },\n    headingSize = \"XL\",\n    theme = \"blue\",\n    contentTheme = \"blue\",\n    actionTheme,\n    searchHelp,\n    l18n: {\n        findUs,\n        listButton,\n        mapButton,\n        noResults,\n        searchLabel,\n        searchPlaceholder,\n        searchByLocationButton,\n        searchByLocationErrorMessage,\n    },\n}: OfficeListingPageProps): ReactElement => {\n    const { control, handleSubmit, reset } = useForm();\n    const [canGetLocation, setCanGetLocation] = useState(true);\n    const [view, setView] = useState<\"map\" | \"list\">(\"list\");\n    const [searchTerm, setSearchTerm] = useState<string | undefined>();\n    const debouncedSearchTerm = useDebounce<string | undefined>(\n        searchTerm,\n        500,\n    );\n    const googleMapsKey = useGoogleMapsKey();\n    const [markers, setMarkers] = useState<google.maps.MarkerOptions[]>([]);\n    const history = useHistory();\n    const location = useLocation<LocationChangeState>();\n    const sendDataToGTM = useGTMDispatch();\n    const hasOffices = items && items.length > 0;\n\n    heading = heading || hero?.heading;\n\n    const handleOnSubmit: SubmitHandler<FieldValues> = (data) => {\n        history.push({ search: `?oq=${data.oq}` });\n    };\n\n    const triggerSubmit = () => {\n        handleOnSubmit({ oq: searchTerm });\n    };\n\n    useIsomorphicLayoutEffect(() => {\n        if (debouncedSearchTerm !== undefined) triggerSubmit;\n    }, [triggerSubmit, debouncedSearchTerm]);\n\n    const handleGeoSearchClick = async () => {\n        if (!navigator.geolocation) {\n            setCanGetLocation(false);\n            return;\n        }\n        const geoloc = await navigator.permissions.query({\n            name: \"geolocation\",\n        });\n\n        if (geoloc.state !== \"granted\") {\n            setCanGetLocation(false);\n        }\n        navigator.geolocation.getCurrentPosition((pos: GeolocationPosition) => {\n            reset();\n            if (pos.coords.latitude && pos.coords.longitude) {\n                setCanGetLocation(true);\n            }\n            history.push({\n                search: `?lat=${pos.coords.latitude}&lng=${pos.coords.longitude}`,\n            });\n        });\n    };\n\n    useEffect(() => {\n        const query = new URLSearchParams(location.search);\n        const queryTerm = query.get(\"oq\");\n        const isGeoSearch = query.has(\"lat\") && query.has(\"lng\");\n\n        if (queryTerm) setSearchTerm(queryTerm);\n        if (queryTerm || isGeoSearch) {\n            sendDataToGTM({\n                event: \"office_search\",\n                search_text: queryTerm || \"(geo)\",\n            });\n        }\n    }, [location, sendDataToGTM]);\n\n    let searchIcon: string;\n\n    useEffect(() => {\n        const fetchMarkers = async () => {\n            if (!items) return;\n\n            const markerOptionsPromises = items.map(async (item) => {\n                let lat = item.latitude;\n                let lng = item.longitude;\n\n                if (!lat || !lng) {\n                    try {\n                        const coordinates = await getMapCoordinates(\n                            item.addressRow1 || \"\",\n                            item.city || \"\",\n                            item.postalCode || \"\",\n                            googleMapsKey,\n                        );\n                        lat = coordinates.lat;\n                        lng = coordinates.lng;\n                    } catch (error) {\n                        process.env.NODE_ENV === \"development\" &&\n                            console.error(\"Error fetching coordinates:\", error);\n                    }\n                }\n\n                return {\n                    title: item.officeName || \"\",\n                    position: { lat: lat || 0, lng: lng || 0 },\n                    ...item,\n                } as google.maps.MarkerOptions;\n            });\n\n            const markerOptions = await Promise.all(markerOptionsPromises);\n\n            const validMarkers = markerOptions.filter((marker) => {\n                if (\n                    marker.position &&\n                    marker.position.lat !== undefined &&\n                    marker.position.lng !== undefined\n                ) {\n                    return (\n                        marker.position.lat !== 0 && marker.position.lng !== 0\n                    );\n                }\n                return false;\n            });\n\n            setMarkers(validMarkers);\n        };\n\n        fetchMarkers();\n    }, [items, googleMapsKey]);\n\n    const hasMarkers = markers.length > 0;\n\n    const map =\n        hasOffices && hasMarkers\n            ? {\n                  l18n: { findUs: findUs },\n                  useCluster: true,\n                  markers: markers,\n                  options: {\n                      zoom: 18,\n                      zoomControl: true,\n                      disableDefaultUI: false,\n                      mapTypeControl: false,\n                      center: {\n                          lat: 59.326613552284655,\n                          lng: 18.065554634562183,\n                      },\n                  },\n              }\n            : undefined;\n\n    switch (useBreakpoint([\"XL\"])) {\n        case \"XL\":\n            searchIcon = \"enter56\";\n            break;\n        default:\n            searchIcon = \"enter42\";\n    }\n\n    return (\n        <Wrapper id=\"maincontent\">\n            <ThemeProvider\n                theme={{\n                    theme: theme,\n                    contentTheme: contentTheme,\n                    actionTheme: actionTheme || contentTheme,\n                }}\n            >\n                <Section theme={theme} alignItems=\"center\">\n                    <Container>\n                        <ContentWrapper>\n                            {heading && (\n                                <Header\n                                    $headingSize={headingSize}\n                                    {...addEditAttributes(\"Heading\")}\n                                >\n                                    {heading}\n                                </Header>\n                            )}\n                            {filters && filters.length > 1 && (\n                                <FilterButtons>\n                                    {filters.map((filter, index) => (\n                                        <Filter\n                                            key={`Filter${index}`}\n                                            selected={filter.selected}\n                                            disabled={\n                                                typeof filter.count !==\n                                                    \"undefined\" &&\n                                                filter.count <= 0\n                                            }\n                                            url={filter.url}\n                                        >\n                                            {filter.linkText}\n                                        </Filter>\n                                    ))}\n                                </FilterButtons>\n                            )}\n                            <StyledForm\n                                onSubmit={handleSubmit(handleOnSubmit)}\n                                method=\"get\"\n                            >\n                                <SearchField\n                                    control={control}\n                                    elementName=\"oq\"\n                                    label={searchLabel}\n                                    placeHolder={searchPlaceholder}\n                                    predefinedValue={searchTerm}\n                                    onChange={(e) =>\n                                        setSearchTerm(e.target.value || \"\")\n                                    }\n                                    endAdornment={\n                                        <InputAdornment position=\"end\">\n                                            <SearchButton\n                                                key={`SearchIcon-${searchIcon}`}\n                                                icon={searchIcon}\n                                                a11y={true}\n                                                iconOnly={true}\n                                                type=\"submit\"\n                                            >\n                                                {searchLabel}\n                                            </SearchButton>\n                                        </InputAdornment>\n                                    }\n                                />\n                                <GpsWrapper>\n                                    <GpsButton\n                                        onClick={handleGeoSearchClick}\n                                        $hoverSpan={true}\n                                    >\n                                        <Icon icon=\"gps28\" />\n                                        <span>{searchByLocationButton}</span>\n                                    </GpsButton>\n                                    {!canGetLocation && (\n                                        <GpsError>\n                                            {searchByLocationErrorMessage}\n                                        </GpsError>\n                                    )}\n                                </GpsWrapper>\n                            </StyledForm>\n\n                            <Description {...addEditAttributes(\"SearchHelp\")}>\n                                {searchHelp && (\n                                    <TextBlock content={searchHelp} />\n                                )}\n                            </Description>\n                        </ContentWrapper>\n                        <ResultWrapper>\n                            <ResultButtons>\n                                <Filter\n                                    selected={view === \"list\"}\n                                    onClick={() => setView(\"list\")}\n                                >\n                                    <Icon icon=\"list28\" />\n                                    {listButton || \"List\"}\n                                </Filter>\n                                <Filter\n                                    selected={view === \"map\"}\n                                    onClick={() => setView(\"map\")}\n                                    disabled={!hasMarkers}\n                                >\n                                    <Icon icon=\"map28\" />\n                                    {mapButton || \"Map\"}\n                                </Filter>\n                            </ResultButtons>\n                            {hasOffices && hasMarkers && view === \"map\" ? (\n                                <ResultMap {...map} />\n                            ) : (\n                                <ResultList>\n                                    {hasOffices ? (\n                                        items?.map((item, index) => (\n                                            <Office\n                                                key={`Office${index}`}\n                                                {...item}\n                                            />\n                                        ))\n                                    ) : (\n                                        <NoResults>{noResults}</NoResults>\n                                    )}\n                                </ResultList>\n                            )}\n                        </ResultWrapper>\n                    </Container>\n                </Section>\n            </ThemeProvider>\n        </Wrapper>\n    );\n};\n\nexport default React.memo(OfficeListingPage, isEqual);\n","export async function getMapCoordinates(\n    address: string,\n    city: string,\n    postalCode: string,\n    googleMapsKey: string,\n) {\n    const fullAddress = `${address}, ${postalCode}, ${city}`;\n    const response = await fetch(\n        `https://maps.googleapis.com/maps/api/geocode/json?address=${encodeURIComponent(\n            fullAddress,\n        )}&key=${googleMapsKey}`,\n    );\n    const data = await response.json();\n\n    if (data.status === \"OK\" && data.results.length > 0) {\n        const location = data.results[0].geometry.location;\n        return {\n            lat: location.lat,\n            lng: location.lng,\n        };\n    } else {\n        throw new Error(\"Unable to retrieve coordinates from address\");\n    }\n}\n"],"names":["Filter","loadable","resolved","chunkName","isReady","props","key","resolve","__webpack_modules__","importAsync","requireAsync","then","requireSync","id","__webpack_require__","FilterLoader","_jsx","GoogleMap","GoogleMapLoader","Office","OfficeLoader","buttonColorDisabled","theme","lightgray","blue","cyan","buttonColor","errorColor","Container","styled","GridContainer","withConfig","componentId","columnGap","MQ","FROM_M","FROM_XL","ContentWrapper","div","FROM_L","Header","h1","attrs","$headingSize","css","styleHeadingXXL","styleHeadingXL","FilterButtons","StyledForm","form","SearchButton","Button","SearchField","TextField","GpsWrapper","styleBodyM","GpsButton","button","styledLink","GpsError","styleBodyS","Description","ResultWrapper","ResultButtons","ResultList","ResultMap","NoResults","styleBodyL","OfficeListingPage","hero","heading","result","filters","items","headingSize","contentTheme","actionTheme","searchHelp","l18n","findUs","listButton","mapButton","noResults","searchLabel","searchPlaceholder","searchByLocationButton","searchByLocationErrorMessage","control","handleSubmit","reset","useForm","canGetLocation","setCanGetLocation","useState","view","setView","searchTerm","setSearchTerm","debouncedSearchTerm","useDebounce","googleMapsKey","useGoogleMapsKey","markers","setMarkers","history","useHistory","location","useLocation","sendDataToGTM","useGTMDispatch","hasOffices","length","handleOnSubmit","data","push","search","oq","triggerSubmit","useIsomorphicLayoutEffect","searchIcon","useEffect","query","URLSearchParams","queryTerm","get","isGeoSearch","has","event","search_text","async","markerOptionsPromises","map","lat","item","latitude","lng","longitude","coordinates","getMapCoordinates","addressRow1","city","postalCode","error","title","officeName","position","validMarkers","Promise","all","filter","marker","undefined","fetchMarkers","hasMarkers","useCluster","options","zoom","zoomControl","disableDefaultUI","mapTypeControl","center","useBreakpoint","Wrapper","children","ThemeProvider","Section","alignItems","_jsxs","addEditAttributes","index","selected","disabled","count","url","linkText","onSubmit","method","elementName","label","placeHolder","predefinedValue","onChange","e","target","value","endAdornment","InputAdornment","icon","a11y","iconOnly","type","onClick","navigator","geolocation","permissions","name","state","getCurrentPosition","pos","coords","$hoverSpan","Icon","TextBlock","content","React","isEqual","address","fullAddress","response","fetch","encodeURIComponent","json","status","results","geometry","Error"],"sourceRoot":""}