import {useState} from 'react' import PropTypes from 'prop-types' import IconButton from '@mui/material/IconButton' import Tooltip from '@mui/material/Tooltip' import Snackbar from '@mui/material/Snackbar' import Alert from '@mui/material/Alert' import ShareIcon from '@mui/icons-material/Share' import LinkIcon from '@mui/icons-material/Link' export default function ShareButton({ versionId, versionName = 'Version', size = 'small', hasSnackbarVisible = true, onShareSuccess = null, onShareError = null }) { const [shared, setShared] = useState(false) const [snackbar, setSnackbar] = useState({open: false, message: '', severity: 'success'}) const handleShare = async () => { const url = `${window.location.origin}/dashboard/versions/${versionId}` try { if (navigator.share) { // Use native share API if available await navigator.share({ title: `Version: ${versionName}`, text: 'Découvrez cette version sur Konstitisyon.nu', url }) } else if (navigator.clipboard && window.isSecureContext) { await navigator.clipboard.writeText(url) } else { // Fallback for older browsers const textArea = document.createElement('textarea') textArea.value = url textArea.style.position = 'fixed' textArea.style.left = '-999999px' textArea.style.top = '-999999px' document.body.append(textArea) textArea.focus() textArea.select() const result = document.execCommand('copy') textArea.remove() if (!result) { throw new Error('Copy command failed') } } // Success feedback setShared(true) setTimeout(() => setShared(false), 2000) if (hasSnackbarVisible) { setSnackbar({ open: true, message: navigator.share ? 'Version partagée' : 'Lien copié dans le presse-papier', severity: 'success' }) } if (onShareSuccess) { onShareSuccess() } } catch (error) { console.error('Failed to share:', error) if (hasSnackbarVisible) { setSnackbar({ open: true, message: 'Impossible de partager cette version', severity: 'error' }) } if (onShareError) { onShareError(error) } } } const handleCloseSnackbar = () => { setSnackbar(prev => ({...prev, open: false})) } return ( <> {shared ? : } {hasSnackbarVisible && ( {snackbar.message} )} ) } ShareButton.propTypes = { versionId: PropTypes.string.isRequired, versionName: PropTypes.string, size: PropTypes.oneOf(['small', 'medium', 'large']), hasSnackbarVisible: PropTypes.bool, onShareSuccess: PropTypes.func, onShareError: PropTypes.func }