* Replace element-icons/chat-bubbles.svg with compound Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Replace element-icons/chat-bubbles.svg with compound Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Replace external-link.svg with compound Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Replace element-icons/hide.svg with compound Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Replace element-icons/explore.svg with compound Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Replace element-icons/hash-*.svg with compound Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Replace element-icons/share.svg with compound Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Replace element-icons/group-members.svg with compound Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Replace element-icons/mask-as-*.svg with compound Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Replace element-icons/low-priority.svg with compound Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Replace element-icons/plus-circle.svg with compound Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Replace element-icons/roles.svg with compound Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Update jest snapshots Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Update screenshots Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Update screenshots Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Update screenshot Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --------- Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
52 lines
1.8 KiB
TypeScript
52 lines
1.8 KiB
TypeScript
/*
|
|
Copyright 2024 New Vector Ltd.
|
|
Copyright 2022 The Matrix.org Foundation C.I.C.
|
|
|
|
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial
|
|
Please see LICENSE files in the repository root for full details.
|
|
*/
|
|
|
|
import React, { useEffect, useState } from "react";
|
|
import { type ContentHelpers } from "matrix-js-sdk/src/matrix";
|
|
import { Tooltip } from "@vector-im/compound-web";
|
|
import { PopOutIcon } from "@vector-im/compound-design-tokens/assets/web/icons";
|
|
|
|
import { _t } from "../../../languageHandler";
|
|
import { makeMapSiteLink, parseGeoUri } from "../../../utils/location";
|
|
import CopyableText from "../elements/CopyableText";
|
|
|
|
interface Props {
|
|
latestLocationState?: ContentHelpers.BeaconLocationState;
|
|
}
|
|
|
|
const ShareLatestLocation: React.FC<Props> = ({ latestLocationState }) => {
|
|
const [coords, setCoords] = useState<GeolocationCoordinates | undefined>();
|
|
useEffect(() => {
|
|
if (!latestLocationState?.uri) {
|
|
return;
|
|
}
|
|
const coords = parseGeoUri(latestLocationState.uri);
|
|
setCoords(coords);
|
|
}, [latestLocationState]);
|
|
|
|
if (!latestLocationState || !coords) {
|
|
return null;
|
|
}
|
|
|
|
const latLonString = `${coords.latitude},${coords.longitude}`;
|
|
const mapLink = makeMapSiteLink(coords);
|
|
|
|
return (
|
|
<>
|
|
<Tooltip label={_t("timeline|context_menu|open_in_osm")}>
|
|
<a data-testid="open-location-in-osm" href={mapLink} target="_blank" rel="noreferrer noopener">
|
|
<PopOutIcon className="mx_ShareLatestLocation_icon" />
|
|
</a>
|
|
</Tooltip>
|
|
<CopyableText className="mx_ShareLatestLocation_copy" border={false} getTextToCopy={() => latLonString} />
|
|
</>
|
|
);
|
|
};
|
|
|
|
export default ShareLatestLocation;
|