import { observer } from "mobx-react"; import { FC, RefObject, useEffect, useRef } from "react"; import { useTranslation } from "react-i18next"; import styled, { useTheme } from "styled-components"; import MouseCoords from "../../../ReactViewModels/MouseCoords"; import Box from "../../../Styled/Box"; import { RawButton } from "../../../Styled/Button"; interface ILocationBarProps { mouseCoords: MouseCoords; } const Section = styled(Box).attrs({ paddedHorizontally: true })``; const StyledText = styled.span` font-family: ${(props) => props.theme.fontMono}; color: ${(props) => props.theme.textLight}; white-space: nowrap; font-size: 0.7rem; padding: 0 5px 0 5px; `; const setInnerText = (ref: RefObject, value: string) => { if (ref.current) ref.current.innerText = value; }; export const LocationBar: FC = observer( ({ mouseCoords }) => { const theme = useTheme(); const { t } = useTranslation(); const elevationRef = useRef(null); const longitudeRef = useRef(null); const latitudeRef = useRef(null); const utmZoneRef = useRef(null); const eastRef = useRef(null); const northRef = useRef(null); useEffect(() => { const disposer = mouseCoords.updateEvent.addEventListener(() => { setInnerText(elevationRef, mouseCoords.elevation ?? ""); setInnerText(longitudeRef, mouseCoords.longitude ?? ""); setInnerText(latitudeRef, mouseCoords.latitude ?? ""); setInnerText(utmZoneRef, mouseCoords.utmZone ?? ""); setInnerText(eastRef, mouseCoords.east ?? ""); setInnerText(northRef, mouseCoords.north ?? ""); }); return disposer; }); return ( {!mouseCoords.useProjection ? ( <>
{t("legend.lat")} {mouseCoords.latitude}
{t("legend.lon")} {mouseCoords.longitude}
) : ( <>
{t("legend.zone")} {mouseCoords.utmZone}
{t("legend.e")} {mouseCoords.east}
{t("legend.n")} {mouseCoords.north}
)}
{t("legend.elev")} {mouseCoords.elevation}
); } );