fix: refresh notifikacija nakon PDF zahtjeva (cache hit i async polling)
Some checks failed
ERP CI/CD Pipeline / test (push) Has been cancelled
ERP CI/CD Pipeline / Deploy (server git pull + compose) (push) Has been cancelled

Dodan _refreshNotificationsAsync() koji odmah osvjezi notifikacijski feed nakon cache hit PDF downloada, te _schedulePdfNotificationPolling() koji pollingom na 5s/20s/60s hvata Celery completion kad Pusher nije dostupan ili worker kasni.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
mariomitte
2026-07-17 17:21:46 +02:00
parent 13de9e113c
commit ef51036bc7

View File

@@ -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;
}