Android_Retail/src/Pages/WhatsAppShare/SmsShare.jsx

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;