import type { ElementRef, Signal } from '@angular/core'; import { injectMutation } from '@tanstack/angular-query-experimental'; import { injectStaffService } from '@/core/services/staff.service'; import { injectUIService } from '@/core/services/ui.service'; type PrintBadgeData = { code: string } | { id: number }; export function injectPrintBadge( pdfIframeSignal: Signal | undefined> ) { const staffServ = injectStaffService(); const uiServ = injectUIService(); return injectMutation(() => ({ mutationFn: (data: PrintBadgeData) => { if ('code' in data) { return staffServ.getUserBadgeByCode(data.code); } else { return staffServ.getUserBadgeById(data.id); } }, onError: (error) => uiServ.showErrorAlert(error.message), onSuccess: (pdfBlob) => { const pdfUrl = URL.createObjectURL(pdfBlob); const isMobile = /iPad|iPhone|iPod|Android/.test(navigator.userAgent); if (isMobile) { const pdfWindow = window.open(pdfUrl, '_blank'); pdfWindow?.focus(); pdfWindow?.print(); } else { const pdfIframe = pdfIframeSignal()?.nativeElement; if (!pdfIframe) return; pdfIframe.onload = () => { pdfIframe.contentWindow?.focus(); pdfIframe.contentWindow?.print(); window.focus(); }; pdfIframe.src = pdfUrl; } }, })); }