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