code-craft-studio
Version:
A comprehensive QR code and barcode scanning/generation library for React. Works with or without Capacitor. Supports 22+ QR data types and 14+ barcode formats (EAN, UPC, Code 128, etc.), with customizable designs, analytics, and React components. Provider
103 lines • 4.29 kB
JavaScript
import { QRType } from '../definitions';
export function formatQRData(data) {
var _a;
switch (data.type) {
case QRType.WEBSITE:
return data.url || '';
case QRType.TEXT:
return data.text || '';
case QRType.EMAIL:
return `mailto:${data.to}${data.subject ? `?subject=${encodeURIComponent(data.subject)}` : ''}${data.body ? `&body=${encodeURIComponent(data.body)}` : ''}`;
case QRType.SMS:
return `sms:${data.phoneNumber}${data.message ? `?body=${encodeURIComponent(data.message)}` : ''}`;
case QRType.PHONE:
return `tel:${data.phoneNumber}`;
case QRType.LOCATION:
return `geo:${data.latitude},${data.longitude}`;
case QRType.WIFI:
return `WIFI:T:${data.security || 'WPA'};S:${data.ssid};P:${data.password || ''};H:${data.hidden ? 'true' : 'false'};;`;
case QRType.EVENT:
const event = [
'BEGIN:VEVENT',
`SUMMARY:${data.title}`,
`DTSTART:${formatDate(data.startDate)}`,
`DTEND:${formatDate(data.endDate)}`,
data.location ? `LOCATION:${data.location}` : '',
data.description ? `DESCRIPTION:${data.description}` : '',
'END:VEVENT'
].filter(Boolean).join('\n');
return `BEGIN:VCALENDAR\nVERSION:2.0\n${event}\nEND:VCALENDAR`;
case QRType.VCARD:
return [
'BEGIN:VCARD',
'VERSION:3.0',
`FN:${data.firstName} ${data.lastName}`,
`N:${data.lastName};${data.firstName};;;`,
data.organization ? `ORG:${data.organization}` : '',
data.phone ? `TEL:${data.phone}` : '',
data.email ? `EMAIL:${data.email}` : '',
data.website ? `URL:${data.website}` : '',
data.address ? `ADR:;;${data.address};;;;` : '',
'END:VCARD'
].filter(Boolean).join('\n');
case QRType.PDF:
return data.url || '';
case QRType.IMAGES:
return data.images ? data.images.map(img => img.url).join(',') : '';
case QRType.VIDEO:
return data.url || '';
case 'audio':
case QRType.MP3:
return data.url || '';
case 'app':
case QRType.APPS:
return data.appStoreUrl || data.playStoreUrl || '';
case QRType.MENU:
// Menu data doesn't have a URL, it has restaurant info
return JSON.stringify({
restaurantName: data.restaurantName,
categories: data.categories,
currency: data.currency
});
case QRType.BUSINESS:
return JSON.stringify({
name: data.name,
type: data.industry,
phone: data.phone,
email: data.email,
website: data.website,
address: data.address,
hours: data.hours
});
case QRType.LINKS_LIST:
return data.links ? data.links.map((link) => `${link.title}: ${link.url}`).join('\n') : '';
case QRType.COUPON:
return JSON.stringify({
code: data.code,
description: data.description,
validUntil: data.validUntil,
terms: data.terms
});
case QRType.FACEBOOK:
return data.pageUrl || '';
case QRType.INSTAGRAM:
return data.profileUrl || '';
case QRType.SOCIAL_MEDIA:
return JSON.stringify({
platform: data.platform,
username: data.username,
profileUrl: data.profileUrl
});
case QRType.WHATSAPP:
return `https://wa.me/${(_a = data.phoneNumber) === null || _a === void 0 ? void 0 : _a.replace(/[^0-9]/g, '')}${data.message ? `?text=${encodeURIComponent(data.message)}` : ''}`;
default:
return JSON.stringify(data);
}
}
function formatDate(date) {
if (!date)
return '';
const d = new Date(date);
return d.toISOString().replace(/[-:]/g, '').split('.')[0] + 'Z';
}
//# sourceMappingURL=qr-formatter.js.map