135 lines
4.2 KiB
JavaScript
135 lines
4.2 KiB
JavaScript
import React, { useEffect } from 'react';
|
|
import { isMobile, isAndroid, isIOS } from 'react-device-detect';
|
|
|
|
export const SMSShare = ({ message, mobileNumber, onClose }) => {
|
|
useEffect(() => {
|
|
const encodedMessage = encodeURIComponent(message);
|
|
const number = mobileNumber;
|
|
|
|
const openSMS = () => {
|
|
if (!number) {
|
|
console.error('Mobile number is required');
|
|
if (onClose) onClose();
|
|
return;
|
|
}
|
|
|
|
let smsUrl;
|
|
|
|
if (isIOS) {
|
|
// iOS format
|
|
smsUrl = `sms:${number}&body=${encodedMessage}`;
|
|
} else if (isAndroid) {
|
|
// Android format
|
|
smsUrl = `sms:${number}?body=${encodedMessage}`;
|
|
} else if (isMobile) {
|
|
// Generic mobile format
|
|
smsUrl = `sms:${number}?body=${encodedMessage}`;
|
|
} else {
|
|
// Desktop/Web - try multiple approaches
|
|
const webSMSOptions = [
|
|
`sms:${number}?body=${encodedMessage}`,
|
|
`sms://${number}?body=${encodedMessage}`,
|
|
// Fallback to web SMS services
|
|
`https://web.whatsapp.com/send?phone=${number}&text=${encodedMessage}`,
|
|
`https://messages.google.com/web/conversations/new?recipient=${number}&body=${encodedMessage}`,
|
|
];
|
|
|
|
// Try the first SMS URL
|
|
smsUrl = webSMSOptions[0];
|
|
|
|
// If SMS doesn't work on desktop, provide alternatives
|
|
const tryAlternatives = () => {
|
|
// Try opening web-based messaging
|
|
const userChoice = window.confirm(
|
|
'SMS app not available. Would you like to try WhatsApp Web instead?'
|
|
);
|
|
|
|
if (userChoice) {
|
|
window.open(webSMSOptions[2], '_blank');
|
|
} else {
|
|
// Copy to clipboard as fallback
|
|
const textToCopy = `To: ${number}\nMessage: ${message}`;
|
|
navigator.clipboard
|
|
.writeText(textToCopy)
|
|
.then(() => {
|
|
alert('Message details copied to clipboard!');
|
|
})
|
|
.catch(() => {
|
|
// Fallback for older browsers
|
|
const textArea = document.createElement('textarea');
|
|
textArea.value = textToCopy;
|
|
document.body.appendChild(textArea);
|
|
textArea.select();
|
|
document.execCommand('copy');
|
|
document.body.removeChild(textArea);
|
|
alert('Message details copied to clipboard!');
|
|
});
|
|
}
|
|
};
|
|
|
|
// For desktop, try SMS first, then fallback
|
|
try {
|
|
const newWindow = window.open(smsUrl, '_blank');
|
|
|
|
// Check if window opened successfully
|
|
setTimeout(() => {
|
|
if (
|
|
newWindow &&
|
|
(newWindow.closed || newWindow.location.href === 'about:blank')
|
|
) {
|
|
newWindow.close();
|
|
tryAlternatives();
|
|
}
|
|
}, 1000);
|
|
} catch (error) {
|
|
console.error('SMS open failed:', error);
|
|
tryAlternatives();
|
|
}
|
|
|
|
if (onClose) {
|
|
setTimeout(() => onClose(), 1500);
|
|
}
|
|
return;
|
|
}
|
|
|
|
// For mobile devices
|
|
try {
|
|
// Try to open SMS app
|
|
window.location.href = smsUrl;
|
|
|
|
// Alternative method if location.href doesn't work
|
|
setTimeout(() => {
|
|
try {
|
|
window.open(smsUrl, '_self');
|
|
} catch (error) {
|
|
console.error('Failed to open SMS app:', error);
|
|
// Fallback: copy to clipboard
|
|
navigator.clipboard.writeText(`${number}: ${message}`).then(() => {
|
|
alert('SMS app not available. Message copied to clipboard!');
|
|
});
|
|
}
|
|
}, 100);
|
|
} catch (error) {
|
|
console.error('SMS open failed:', error);
|
|
// Fallback for mobile
|
|
navigator.clipboard.writeText(`${number}: ${message}`).then(() => {
|
|
alert('SMS app not available. Message copied to clipboard!');
|
|
});
|
|
}
|
|
|
|
if (onClose) {
|
|
setTimeout(() => onClose(), 500);
|
|
}
|
|
};
|
|
|
|
// Small delay to ensure component is mounted
|
|
const timer = setTimeout(openSMS, 100);
|
|
|
|
return () => clearTimeout(timer);
|
|
}, [message, mobileNumber, onClose]);
|
|
|
|
return null;
|
|
};
|
|
|
|
export default SMSShare;
|