fix: expose tender detail loading errors and retry
This commit is contained in:
@@ -12,12 +12,27 @@ export async function fetchLiveTenders({ refresh = false } = {}) {
|
||||
return data;
|
||||
}
|
||||
|
||||
export async function fetchTenderDetail(tenderId) {
|
||||
const res = await fetch(`/api/tenders/${tenderId}/detail`);
|
||||
if (!res.ok) throw new Error(`Detay API hatası: HTTP ${res.status}`);
|
||||
const data = await res.json();
|
||||
if (!data.success) throw new Error(data.error || 'Detay alınamadı');
|
||||
return data;
|
||||
export async function fetchTenderDetail(tenderId, {signal, timeoutMs = 30000} = {}) {
|
||||
const controller = new AbortController();
|
||||
const cancel = () => controller.abort();
|
||||
if (signal?.aborted) cancel();
|
||||
else signal?.addEventListener('abort',cancel,{once:true});
|
||||
let timedOut = false;
|
||||
const timer = setTimeout(()=>{timedOut=true;controller.abort();},timeoutMs);
|
||||
try {
|
||||
const res = await fetch(`/api/tenders/${encodeURIComponent(tenderId)}/detail`, {signal:controller.signal});
|
||||
if (!res.ok) throw new Error(`Detay API hatası: HTTP ${res.status}`);
|
||||
const data = await res.json();
|
||||
if (!data.success) throw new Error(data.error || 'Detay alınamadı');
|
||||
if (typeof data.aciklama !== 'string' || !data.aciklama.trim())
|
||||
throw new Error('Kaynak ilan metni alınamadı. Yeniden deneyin veya asıl ilanı kontrol edin.');
|
||||
return data;
|
||||
} catch (error) {
|
||||
if (timedOut) throw new Error('İlan metni yüklenirken zaman aşımı oluştu. Yeniden deneyin.');
|
||||
throw error;
|
||||
} finally {
|
||||
clearTimeout(timer); signal?.removeEventListener('abort',cancel);
|
||||
}
|
||||
}
|
||||
|
||||
// Kullanıcının ihale üzerindeki durumunu (kanban, takip vb.) canlı veriyle birleştirir.
|
||||
|
||||
Reference in New Issue
Block a user