import React,{useEffect,useRef,useState} from 'react'; import {useApp} from '../../context/AppContext'; import {getToken} from '../../services/auth'; import {accountRequest,requireArray} from '../../services/accountRequest'; export function DeliveryQueue({weekly=false}){ const {isAdmin,authUser}=useApp(); return isAdmin?:null; } function Queue({weekly}){ const endpoint=weekly?'/api/admin/brief/outbox':'/api/admin/notify/outbox'; const [rows,setRows]=useState(null),[error,setError]=useState(null),[busy,setBusy]=useState(false); const alive=useRef(true),locked=useRef(false); const load=async()=>{ const data=await accountRequest(endpoint); const received=requireArray(data,'deliveries'); const rows=received.filter(row=>row && typeof row==='object' && typeof row.id==='string' && row.id.trim() && typeof row.state==='string' && (row.subject == null || typeof row.subject==='string') && (row.to == null || ['string','number'].includes(typeof row.to)) && (row.error == null || typeof row.error==='string') && (row.providerId == null || typeof row.providerId==='string') && (row.review == null || (typeof row.review==='object' && typeof row.review.actor==='string' && typeof row.review.note==='string' && Number.isFinite(Date.parse(row.review.at))))); if(rows.length!==received.length)throw new Error('Sunucu gönderim kayıtlarından birini geçersiz döndürdü. Liste yenilenemedi.'); if(alive.current)setRows(rows); }; const act=async fn=>{if(locked.current)return;locked.current=true;setBusy(true);setError(null);try{await fn();}catch(e){if(alive.current)setError(e.message);}finally{locked.current=false;if(alive.current)setBusy(false);}}; useEffect(()=>{alive.current=true;void act(load);return()=>{alive.current=false;};},[]); return

{weekly?'Haftalık özet gönderim incelemesi':'E-posta gönderim incelemesi'} · Yönetici

{weekly?'Haftalık özetin bekleyen mesajları ve inceleme kararları gösterilir.':'Bekleyen işler ve son inceleme kararları gösterilir (en fazla 50).'} Belirsiz gönderimi sağlayıcı kaydıyla karşılaştırın. Bu işlemler yeni mesaj göndermez.

{busy&&

Gönderim kayıtları işleniyor…

} {error&&

{error}

} {rows?.length===0&&

İncelenecek veya bekleyen gönderim yok.

} {rows?.map(row=>act(async()=>{await accountRequest(endpoint,{method:'POST',body:JSON.stringify({id:row.id,...input})});await load();})}/>)}
; } function Review({row,weekly,busy,resolve}){ const [note,setNote]=useState(''),[providerId,setProviderId]=useState(''),[confirmed,setConfirmed]=useState(false); const labels={pending:'Bekliyor',sending:'Gönderiliyor',uncertain:'Sonuç belirsiz',sent_manual:'Gönderildiği yönetici tarafından doğrulandı',skipped:'Yeniden gönderilmeden kapatıldı'}; return

{row.subject}

{String(row.to)} · {labels[row.state]}

Kayıt: {row.id}

{row.error&&

{row.error}

} {row.providerId&&

Sağlayıcı kaydı: {row.providerId}

} {row.review&&

{row.review.actor} · {new Date(row.review.at).toLocaleString('tr-TR', { timeZone: 'Europe/Istanbul' })} · {row.review.note}

} {row.state==='uncertain'&&