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;
|
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) {
|
export async function downloadWorkOrderPdf(workOrderId) {
|
||||||
if (!workOrderId) {
|
if (!workOrderId) {
|
||||||
throw new Error('Work order ID je obavezan.');
|
throw new Error('Work order ID je obavezan.');
|
||||||
@@ -746,9 +765,11 @@ export async function downloadWorkOrderPdf(workOrderId) {
|
|||||||
if (payload?.status === 'ready' && payload?.download_url) {
|
if (payload?.status === 'ready' && payload?.download_url) {
|
||||||
await downloadGeneratedPdfByUrl(payload.download_url, payload.filename || `${workOrderId}.work-order.pdf`);
|
await downloadGeneratedPdfByUrl(payload.download_url, payload.filename || `${workOrderId}.work-order.pdf`);
|
||||||
showToast('PDF putnog naloga je preuzet iz cache-a.', 'success');
|
showToast('PDF putnog naloga je preuzet iz cache-a.', 'success');
|
||||||
|
_refreshNotificationsAsync();
|
||||||
return payload;
|
return payload;
|
||||||
}
|
}
|
||||||
showToast('PDF putnog naloga se generira u pozadini. Preuzimanje je dostupno kroz notifikaciju.', 'info');
|
showToast('PDF putnog naloga se generira u pozadini. Preuzimanje je dostupno kroz notifikaciju.', 'info');
|
||||||
|
_schedulePdfNotificationPolling();
|
||||||
return payload;
|
return payload;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -761,9 +782,11 @@ export async function downloadWorkOrderInvoicesPdf(workOrderId) {
|
|||||||
if (payload?.status === 'ready' && payload?.download_url) {
|
if (payload?.status === 'ready' && payload?.download_url) {
|
||||||
await downloadGeneratedPdfByUrl(payload.download_url, payload.filename || `${workOrderId}.work-order-invoices.pdf`);
|
await downloadGeneratedPdfByUrl(payload.download_url, payload.filename || `${workOrderId}.work-order-invoices.pdf`);
|
||||||
showToast('PDF računa putnog naloga je preuzet iz cache-a.', 'success');
|
showToast('PDF računa putnog naloga je preuzet iz cache-a.', 'success');
|
||||||
|
_refreshNotificationsAsync();
|
||||||
return payload;
|
return payload;
|
||||||
}
|
}
|
||||||
showToast('PDF računa se generira u pozadini. Preuzimanje je dostupno kroz notifikaciju.', 'info');
|
showToast('PDF računa se generira u pozadini. Preuzimanje je dostupno kroz notifikaciju.', 'info');
|
||||||
|
_schedulePdfNotificationPolling();
|
||||||
return payload;
|
return payload;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -776,9 +799,11 @@ export async function downloadWorkOrderServiceRecordsPdf(workOrderId) {
|
|||||||
if (payload?.status === 'ready' && payload?.download_url) {
|
if (payload?.status === 'ready' && payload?.download_url) {
|
||||||
await downloadGeneratedPdfByUrl(payload.download_url, payload.filename || `${workOrderId}.work-order-service-records.pdf`);
|
await downloadGeneratedPdfByUrl(payload.download_url, payload.filename || `${workOrderId}.work-order-service-records.pdf`);
|
||||||
showToast('PDF servisnih zapisa je preuzet iz cache-a.', 'success');
|
showToast('PDF servisnih zapisa je preuzet iz cache-a.', 'success');
|
||||||
|
_refreshNotificationsAsync();
|
||||||
return payload;
|
return payload;
|
||||||
}
|
}
|
||||||
showToast('PDF servisnih zapisa se generira u pozadini. Preuzimanje je dostupno kroz notifikaciju.', 'info');
|
showToast('PDF servisnih zapisa se generira u pozadini. Preuzimanje je dostupno kroz notifikaciju.', 'info');
|
||||||
|
_schedulePdfNotificationPolling();
|
||||||
return payload;
|
return payload;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user