import React, { useEffect, useState } from 'react' import { StyledInput, StyledMessage, StyledModal } from './ShareModal.theme' import Flex from '../../atoms/Flex' import Heading from '../../atoms/Heading' import { IShareModal } from './ShareModal.interface' import Icon from '../../atoms/Icon' import Modal from '../Modal' type mapTypes = { [key: string]: string } const ShareModal = ({ siteTitle, title, label, url, copyText, open, onClose, ...props }: IShareModal) => { const [copied, setCopied] = useState(false) useEffect(() => { const timeOut = setTimeout(() => { setCopied(false) }, 1500) return () => clearTimeout(timeOut) }, [copied]) const escapeHtml = (text: string) => { if (!text) return '' const map: mapTypes = { '&': '&', '<': '<', '>': '>', '"': '"', "'": ''' } return text?.replace(/[&<>"']/g, function (m: string) { return map[m] }) } const copyToClipboard = (text?: string) => { text && navigator.clipboard.writeText(text) } if (!url) return <> url = url.replace(/([^:]\/)\/+/g, '$1') const shareTitle = title && encodeURIComponent(escapeHtml(title)) const shareUrl = url && encodeURIComponent(url) const facebookURL = `https://www.facebook.com/sharer/sharer.php?u=${shareUrl}&t=${shareTitle}` const twitterURL = `https://twitter.com/intent/tweet?text=${shareTitle}&url=${shareUrl}` const linkedInURL = `https://www.linkedin.com/shareArticle?mini=true&url=${shareUrl}&title=${shareTitle}` const whatsappURL = `https://api.whatsapp.com/send?text=${shareUrl}` const emailURL = `mailto:?subject=${siteTitle} - ${shareTitle}&body=${shareUrl}` return (
Facebook
Twitter
LinkedIn
WhatsApp
{ copyToClipboard(url) setCopied(true) }} > {url} {copyText}
) } export default ShareModal