diff --git a/frontend/src/stores/fleetDashboardStore.js b/frontend/src/stores/fleetDashboardStore.js index 2786db5..5a8531e 100644 --- a/frontend/src/stores/fleetDashboardStore.js +++ b/frontend/src/stores/fleetDashboardStore.js @@ -737,6 +737,25 @@ export async function createWorkOrderInvoice(workOrderId, data = {}, signal = nu return response; } +async function _refreshNotificationsAsync() { + if (!isBrowser()) return; + try { + const { fetchNotifications } = await import('./notificationStore.js'); + await fetchNotifications(); + } catch (_) { + // silent — ne blokiramo PDF flow zbog notifikacija + } +} + +// Polling za async PDF generiranje: osveži notifikacije na 5s, 20s i 60s +// kako bi uhvatili Celery completion bez ovisnosti o Pusher konekciji. +function _schedulePdfNotificationPolling() { + if (!isBrowser()) return; + [5000, 20000, 60000].forEach((delay) => { + setTimeout(() => _refreshNotificationsAsync(), delay); + }); +} + export async function downloadWorkOrderPdf(workOrderId) { if (!workOrderId) { throw new Error('Work order ID je obavezan.'); @@ -746,9 +765,11 @@ export async function downloadWorkOrderPdf(workOrderId) { if (payload?.status === 'ready' && payload?.download_url) { await downloadGeneratedPdfByUrl(payload.download_url, payload.filename || `${workOrderId}.work-order.pdf`); showToast('PDF putnog naloga je preuzet iz cache-a.', 'success'); + _refreshNotificationsAsync(); return payload; } showToast('PDF putnog naloga se generira u pozadini. Preuzimanje je dostupno kroz notifikaciju.', 'info'); + _schedulePdfNotificationPolling(); return payload; } @@ -761,9 +782,11 @@ export async function downloadWorkOrderInvoicesPdf(workOrderId) { if (payload?.status === 'ready' && payload?.download_url) { await downloadGeneratedPdfByUrl(payload.download_url, payload.filename || `${workOrderId}.work-order-invoices.pdf`); showToast('PDF računa putnog naloga je preuzet iz cache-a.', 'success'); + _refreshNotificationsAsync(); return payload; } showToast('PDF računa se generira u pozadini. Preuzimanje je dostupno kroz notifikaciju.', 'info'); + _schedulePdfNotificationPolling(); return payload; } @@ -776,9 +799,11 @@ export async function downloadWorkOrderServiceRecordsPdf(workOrderId) { if (payload?.status === 'ready' && payload?.download_url) { await downloadGeneratedPdfByUrl(payload.download_url, payload.filename || `${workOrderId}.work-order-service-records.pdf`); showToast('PDF servisnih zapisa je preuzet iz cache-a.', 'success'); + _refreshNotificationsAsync(); return payload; } showToast('PDF servisnih zapisa se generira u pozadini. Preuzimanje je dostupno kroz notifikaciju.', 'info'); + _schedulePdfNotificationPolling(); return payload; }