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:
arsam
2026-09-18 23:17:51 +03:30
parent 2316f5ca55
commit c56866f2d9
+71
View File
@@ -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;
}
}