import { ReactNode, FC, MouseEvent, AnchorHTMLAttributes } from "react"; import { useTranslation } from "react-i18next"; import styled from "styled-components"; import { useViewState } from "../Context"; import Icon, { StyledIcon } from "../../Styled/Icon"; interface Props { attributes: AnchorHTMLAttributes; children: ReactNode; } export const ExternalLinkWithWarning: FC = (props: Props) => { const viewState = useViewState(); const { t } = useTranslation(); const onClick = (evt: MouseEvent) => { evt.stopPropagation(); evt.preventDefault(); viewState.terria.notificationState.addNotificationToQueue({ title: t("core.unverifiedExternalLink.title"), message: t("core.unverifiedExternalLink.message", { url: props.attributes.href }), confirmText: t("core.unverifiedExternalLink.confirmText"), denyText: t("core.unverifiedExternalLink.denyText"), confirmAction: () => window.open(props.attributes.href, "_blank")?.focus() }); }; if (!props.attributes.href) { return {props.children}; } return ( {props.children} ); }; export const ExternalLinkIcon = styled(StyledIcon).attrs({ glyph: Icon.GLYPHS.externalLink, styledWidth: "10px", styledHeight: "10px", displayInline: true })` margin-left: 5px; fill: currentColor; `;