fix: refresh notifikacija nakon PDF zahtjeva (cache hit i async polling)
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:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user