/*! * Copyright (c) 2024 PLANKA Software GmbH * Licensed under the Fair Use License: https://github.com/plankanban/planka/blob/master/LICENSE.md */ import React, { useCallback } from 'react'; import PropTypes from 'prop-types'; import LinkifyReact from 'linkify-react'; import history from '../../history'; const Linkify = React.memo(({ children, linkStopPropagation, ...props }) => { const handleLinkClick = useCallback( (event) => { if (linkStopPropagation) { event.stopPropagation(); } if (!event.target.getAttribute('target')) { event.preventDefault(); history.push(event.target.href); } }, [linkStopPropagation], ); const linkRenderer = useCallback( ({ attributes: { href, ...linkProps }, content }) => { let url; try { url = new URL(href, window.location); } catch { /* empty */ } const isSameSite = !!url && url.origin === window.location.origin; return ( {isSameSite ? url.pathname : content} ); }, [handleLinkClick], ); return ( {children} ); }); Linkify.propTypes = { children: PropTypes.string.isRequired, linkStopPropagation: PropTypes.bool, }; Linkify.defaultProps = { linkStopPropagation: false, }; export default Linkify;