Files
web/packages/design-system/lib/components/StaticMap/index.tsx
Matilda Landström 93a90bef9d Merged in feat/SW-2038-static-map-button (pull request #2715)
feat(SW-2038): refactor and create wrapper for static map and button

* feat(SW-2038): refactor and create wrapper for static map and button

* feature: use button from design-system over creating a new one

* remove unused fragment

* fix(SW-2038): add removed css

* fix(SW-2038): update fake button component

* fix(SW-2038): move FakeButton to design system


Approved-by: Erik Tiekstra
Approved-by: Joakim Jäderberg
2025-09-01 08:16:27 +00:00

75 lines
1.6 KiB
TypeScript

import { getUrlWithSignature } from './utils'
export type StaticMapProps = {
city?: string
country?: string
coordinates?: {
lat: number
lng: number
}
width: number
height: number
zoomLevel?: number
mapType?: 'roadmap' | 'satellite' | 'terrain' | 'hybrid'
altText: string
mapId?: string
googleMapKey: string
googleMapSecret: string
}
function getCenter({
coordinates,
city,
country,
}: {
coordinates?: { lat: number; lng: number }
city?: string
country?: string
}): string | undefined {
if (coordinates) {
return `${coordinates.lat},${coordinates.lng}`
}
if (city && country) {
return `${city}, ${country}`
}
if (country) {
return country
}
return city
}
export default async function StaticMap({
city,
country,
coordinates,
width,
height,
zoomLevel = 14,
mapType = 'roadmap',
altText,
mapId,
googleMapKey,
googleMapSecret,
}: StaticMapProps) {
// const key = env.GOOGLE_STATIC_MAP_KEY
// const secret = env.GOOGLE_STATIC_MAP_SIGNATURE_SECRET
const baseUrl = 'https://maps.googleapis.com/maps/api/staticmap'
const center = getCenter({ coordinates, city, country })
if (!center) {
return null
}
// Google Maps Static API only supports images smaller than 640x640px. Read: https://developers.google.com/maps/documentation/maps-static/start#Largerimagesizes
const url = new URL(
`${baseUrl}?center=${center}&zoom=${zoomLevel}&size=${width}x${height}&maptype=${mapType}&key=${googleMapKey}`
)
if (mapId) {
url.searchParams.append('map_id', mapId)
}
const src = getUrlWithSignature(url, googleMapSecret)
return <img src={src} alt={altText} />
}