diff --git a/apps/mobile/src/app/menu/qr.tsx b/apps/mobile/src/app/menu/qr.tsx index 9c480cf..623696a 100644 --- a/apps/mobile/src/app/menu/qr.tsx +++ b/apps/mobile/src/app/menu/qr.tsx @@ -45,24 +45,44 @@ export default function QrScreen() { const currentSvgRaw = MOBILE_SVG_TEMPLATES[selectedKey] || MOBILE_SVG_TEMPLATES["qr-4"] || Object.values(MOBILE_SVG_TEMPLATES)[0] || ""; // Inject the live QR code image directly into the SVG's #qr-placeholder group - // SVG içeriğine başka hiçbir şey dokunulmaz, sadece #qr-placeholder replace edilir + // Yorum satırlarını temizle + iç içe taglarını doğru saymak için depth tracking kullan function buildSvgWithQr(svgRaw: string, pngBase64: string): string { - // react-native-svg XML parser desteklemez, parse hatası verir - const withoutComments = svgRaw.replace(//g, ""); + // react-native-svg XML parser desteklemez + const clean = svgRaw.replace(//g, ""); - const qrImgTag = ` + const startMarker = ' taglarını sayarak doğru kapanış 'yi bul + let depth = 0; + let i = startIdx; + let endIdx = -1; + while (i < clean.length - 3) { + if (clean[i] === "<") { + if (clean[i + 1] === "g" && (clean[i + 2] === " " || clean[i + 2] === ">")) { + depth++; + } else if (clean[i + 1] === "/" && clean[i + 2] === "g" && clean[i + 3] === ">") { + depth--; + if (depth === 0) { + endIdx = i + 4; // uzunluğu = 4 + break; + } + } + } + i++; + } + + if (endIdx === -1) return clean; + + const qrGroup = ` `; - return withoutComments.replace( - //, - qrImgTag - ); + return clean.substring(0, startIdx) + qrGroup + clean.substring(endIdx); } - - useEffect(() => { (async () => { const activeRest = await getActiveRestaurant(); @@ -334,10 +354,9 @@ export default function QrScreen() { xml={buildSvgWithQr(currentSvgRaw, qr.pngBase64)} width={300} height={487.5} - viewBox="0 0 400 650" - preserveAspectRatio="xMidYMid meet" /> ) : null} +