Import source: src/utils/encodeQR
Import the existing local project snapshot. This commit organizes existing files; it does not represent newly developed functionality.
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
import type { QRState } from '../types';
|
||||
|
||||
export function encodeQR(state: QRState): string | null {
|
||||
const { selectedType, formData } = state;
|
||||
|
||||
switch (selectedType) {
|
||||
case 'url': {
|
||||
const { websiteUrl } = formData.url;
|
||||
return websiteUrl.trim() || null;
|
||||
}
|
||||
case 'text': {
|
||||
const { text } = formData.text;
|
||||
return text.trim() || null;
|
||||
}
|
||||
case 'wifi': {
|
||||
const { networkName, encryption, password } = formData.wifi;
|
||||
if (!networkName.trim()) return null;
|
||||
const pass = encryption === 'None' ? '' : password;
|
||||
return `WIFI:T:${encryption};S:${networkName};P:${pass};;`;
|
||||
}
|
||||
case 'email': {
|
||||
const { emailAddress, subject, message } = formData.email;
|
||||
if (!emailAddress.trim()) return null;
|
||||
const params = new URLSearchParams();
|
||||
if (subject.trim()) params.set('subject', subject);
|
||||
if (message.trim()) params.set('body', message);
|
||||
const qs = params.toString();
|
||||
return `mailto:${emailAddress}${qs ? '?' + qs : ''}`;
|
||||
}
|
||||
case 'sms': {
|
||||
const { phoneNumber, message } = formData.sms;
|
||||
if (!phoneNumber.trim()) return null;
|
||||
return `smsto:${phoneNumber}${message.trim() ? ':' + message : ''}`;
|
||||
}
|
||||
case 'image': {
|
||||
const { imageUrl } = formData.image;
|
||||
return imageUrl.trim() || null;
|
||||
}
|
||||
case 'pdf': {
|
||||
const { pdfUrl } = formData.pdf;
|
||||
return pdfUrl.trim() || null;
|
||||
}
|
||||
case 'mp3': {
|
||||
const { mp3Url } = formData.mp3;
|
||||
return mp3Url.trim() || null;
|
||||
}
|
||||
case 'app': {
|
||||
const { appStoreLink } = formData.app;
|
||||
return appStoreLink.trim() || null;
|
||||
}
|
||||
case 'vcard': {
|
||||
const { firstName, lastName, phone, email, company, jobTitle, website, address } = formData.vcard;
|
||||
if (!firstName.trim() && !lastName.trim()) return null;
|
||||
const lines = [
|
||||
'BEGIN:VCARD', 'VERSION:3.0',
|
||||
`N:${lastName};${firstName};;;`,
|
||||
`FN:${firstName} ${lastName}`.trim(),
|
||||
company ? `ORG:${company}` : '',
|
||||
jobTitle ? `TITLE:${jobTitle}` : '',
|
||||
phone ? `TEL;TYPE=CELL:${phone}` : '',
|
||||
email ? `EMAIL:${email}` : '',
|
||||
website ? `URL:${website}` : '',
|
||||
address ? `ADR:;;${address};;;;` : '',
|
||||
'END:VCARD',
|
||||
].filter(Boolean);
|
||||
return lines.join('\n');
|
||||
}
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user