feat(mod-queue): add number column, improve time display, and use edited comments

- Add 'No.' column displaying post number
- Change 'waiting' to 'submitted' column with formatted date + ago format
- Show blinking relative time in parentheses for items awaiting approval
- Use useEditedComment hook to display pending edits
- Make time column width auto to fit content
- Remove unused translation keys (waiting, mod_queue_alert_threshold_tip, view)
- Add 'submitted' translation key in all languages
This commit is contained in:
plebeius
2026-01-11 12:28:21 +01:00
parent a23f5bc238
commit a33b2e5a9a
37 changed files with 105 additions and 148 deletions
+2 -4
View File
@@ -260,14 +260,12 @@
"queue_is_empty": "قائمة الانتظار فارغة",
"approve": "الموافقة",
"reject": "الرفض",
"waiting": "في الانتظار",
"filter_by_board": "تصفية حسب اللوحة",
"mod_queue_alert_threshold": "عتبة تنبيه قائمة انتظار الإشراف",
"mod_queue_alert_threshold_tip": "إظهار مؤشر أحمر وامض عندما تكون العناصر في الانتظار لأكثر من هذا الوقت",
"no_content": "لا يوجد محتوى",
"view": "عرض",
"excerpt": "مقتطف",
"publishing": "نشر",
"approved": "موافق عليه",
"rejected": "مرفوض"
"rejected": "مرفوض",
"submitted": "تم الإرسال"
}
+2 -4
View File
@@ -260,14 +260,12 @@
"queue_is_empty": "সারি খালি",
"approve": "অনুমোদন করুন",
"reject": "প্রত্যাখ্যান করুন",
"waiting": "অপেক্ষা করছে",
"filter_by_board": "বোর্ড অনুযায়ী ফিল্টার করুন",
"mod_queue_alert_threshold": "মডারেশন সারি সতর্কতা থ্রেশহোল্ড",
"mod_queue_alert_threshold_tip": "আইটেমগুলি এই সময়ের চেয়ে বেশি অপেক্ষা করলে একটি ঝলমলে লাল সূচক দেখান",
"no_content": "কোনো বিষয়বস্তু নেই",
"view": "দেখুন",
"excerpt": "উদ্ধৃতি",
"publishing": "প্রকাশনা",
"approved": "অনুমোদিত",
"rejected": "প্রত্যাখ্যান"
"rejected": "প্রত্যাখ্যান",
"submitted": "জমা দেওয়া হয়েছে"
}
+2 -4
View File
@@ -260,14 +260,12 @@
"queue_is_empty": "Fronta je prázdná",
"approve": "Schválit",
"reject": "Odmítnout",
"waiting": "Čeká",
"filter_by_board": "Filtrovat podle desky",
"mod_queue_alert_threshold": "Práh upozornění fronty moderování",
"mod_queue_alert_threshold_tip": "Zobrazit blikající červený indikátor, když položky čekají déle než tento čas",
"no_content": "Žádný obsah",
"view": "Zobrazit",
"excerpt": "Výňatek",
"publishing": "Publikování",
"approved": "Schváleno",
"rejected": "Zamítnuto"
"rejected": "Zamítnuto",
"submitted": "Odesláno"
}
+2 -4
View File
@@ -260,14 +260,12 @@
"queue_is_empty": "Køen er tom",
"approve": "Godkend",
"reject": "Afvis",
"waiting": "Venter",
"filter_by_board": "Filtrer efter tavle",
"mod_queue_alert_threshold": "Tærskel for moderationskø-alarm",
"mod_queue_alert_threshold_tip": "Vis en blinkende rød indikator, når elementer venter længere end denne tid",
"no_content": "Intet indhold",
"view": "Vis",
"excerpt": "Uddrag",
"publishing": "Udgivelse",
"approved": "Godkendt",
"rejected": "Afvist"
"rejected": "Afvist",
"submitted": "Indsendt"
}
+2 -4
View File
@@ -260,14 +260,12 @@
"queue_is_empty": "Warteschlange ist leer",
"approve": "Genehmigen",
"reject": "Ablehnen",
"waiting": "Wartend",
"filter_by_board": "Nach Forum filtern",
"mod_queue_alert_threshold": "Schwellenwert für Moderations-Warteschlangen-Alarm",
"mod_queue_alert_threshold_tip": "Einen blinkenden roten Indikator anzeigen, wenn Elemente länger als diese Zeit warten",
"no_content": "Kein Inhalt",
"view": "Anzeigen",
"excerpt": "Auszug",
"publishing": "Veröffentlichung",
"approved": "Genehmigt",
"rejected": "Abgelehnt"
"rejected": "Abgelehnt",
"submitted": "Eingereicht"
}
+2 -4
View File
@@ -260,14 +260,12 @@
"queue_is_empty": "Η ουρά είναι άδεια",
"approve": "Έγκριση",
"reject": "Απόρριψη",
"waiting": "Αναμονή",
"filter_by_board": "Φίλτρο ανά σανίδα",
"mod_queue_alert_threshold": "Όριο ειδοποίησης ουράς συντονισμού",
"mod_queue_alert_threshold_tip": "Εμφάνιση αναβοσβήνοντος κόκκινου δείκτη όταν τα στοιχεία περιμένουν περισσότερο από αυτόν τον χρόνο",
"no_content": "Χωρίς περιεχόμενο",
"view": "Προβολή",
"excerpt": "Απόσπασμα",
"publishing": "Δημοσίευση",
"approved": "Εγκεκριμένο",
"rejected": "Απορρίφθηκε"
"rejected": "Απορρίφθηκε",
"submitted": "Υποβλήθηκε"
}
+2 -4
View File
@@ -259,14 +259,12 @@
"queue_is_empty": "Queue is empty",
"approve": "Approve",
"reject": "Reject",
"waiting": "Waiting",
"filter_by_board": "Filter by board",
"mod_queue_alert_threshold": "Mod queue alert threshold",
"mod_queue_alert_threshold_tip": "Show a blinking red indicator when items are waiting for longer than this time",
"no_content": "No content",
"view": "View",
"excerpt": "Excerpt",
"publishing": "Publishing",
"approved": "Approved",
"rejected": "Rejected"
"rejected": "Rejected",
"submitted": "Submitted"
}
+2 -4
View File
@@ -260,14 +260,12 @@
"queue_is_empty": "La cola está vacía",
"approve": "Aprobar",
"reject": "Rechazar",
"waiting": "Esperando",
"filter_by_board": "Filtrar por foro",
"mod_queue_alert_threshold": "Umbral de alerta de cola de moderación",
"mod_queue_alert_threshold_tip": "Mostrar un indicador rojo parpadeante cuando los elementos están esperando más de este tiempo",
"no_content": "Sin contenido",
"view": "Ver",
"excerpt": "Extracto",
"publishing": "Publicando",
"approved": "Aprobado",
"rejected": "Rechazado"
"rejected": "Rechazado",
"submitted": "Enviado"
}
+2 -4
View File
@@ -260,14 +260,12 @@
"queue_is_empty": "صف خالی است",
"approve": "تایید",
"reject": "رد",
"waiting": "در انتظار",
"filter_by_board": "فیلتر بر اساس تابلو",
"mod_queue_alert_threshold": "آستانه هشدار صف انتظار نظارت",
"mod_queue_alert_threshold_tip": "نمایش نشانگر قرمز چشمک‌زن زمانی که موارد بیش از این زمان در انتظار هستند",
"no_content": "بدون محتوا",
"view": "مشاهده",
"excerpt": "گزیده",
"publishing": "در حال انتشار",
"approved": "تایید شده",
"rejected": "رد شده"
"rejected": "رد شده",
"submitted": "ارسال شده"
}
+2 -4
View File
@@ -260,14 +260,12 @@
"queue_is_empty": "Jono on tyhjä",
"approve": "Hyväksy",
"reject": "Hylkää",
"waiting": "Odottaa",
"filter_by_board": "Suodata taulun mukaan",
"mod_queue_alert_threshold": "Moderaatiojonon hälytyskynnys",
"mod_queue_alert_threshold_tip": "Näytä vilkkuva punainen indikaattori, kun kohteet odottavat pidempään kuin tämä aika",
"no_content": "Ei sisältöä",
"view": "Näytä",
"excerpt": "Ote",
"publishing": "Julkaiseminen",
"approved": "Hyväksytty",
"rejected": "Hylätty"
"rejected": "Hylätty",
"submitted": "Lähetetty"
}
+2 -4
View File
@@ -260,14 +260,12 @@
"queue_is_empty": "Walang laman ang queue",
"approve": "Aprubahan",
"reject": "Tanggihan",
"waiting": "Naghihintay",
"filter_by_board": "I-filter ayon sa board",
"mod_queue_alert_threshold": "Moderasyon queue alert threshold",
"mod_queue_alert_threshold_tip": "Magpakita ng kumikislap na pulang indicator kapag ang mga item ay naghihintay nang mas mahaba kaysa sa oras na ito",
"no_content": "Walang nilalaman",
"view": "Tingnan",
"excerpt": "Sipi",
"publishing": "Pag-publish",
"approved": "Naaprubado",
"rejected": "Tinanggihan"
"rejected": "Tinanggihan",
"submitted": "Isinumite"
}
+2 -4
View File
@@ -260,14 +260,12 @@
"queue_is_empty": "La file est vide",
"approve": "Approuver",
"reject": "Rejeter",
"waiting": "En attente",
"filter_by_board": "Filtrer par forum",
"mod_queue_alert_threshold": "Seuil d'alerte de la file de modération",
"mod_queue_alert_threshold_tip": "Afficher un indicateur rouge clignotant lorsque les éléments attendent plus longtemps que ce temps",
"no_content": "Aucun contenu",
"view": "Voir",
"excerpt": "Extrait",
"publishing": "Publication",
"approved": "Approuvé",
"rejected": "Rejeté"
"rejected": "Rejeté",
"submitted": "Soumis"
}
+2 -4
View File
@@ -260,14 +260,12 @@
"queue_is_empty": "התור ריק",
"approve": "אשר",
"reject": "דחה",
"waiting": "ממתין",
"filter_by_board": "סנן לפי לוח",
"mod_queue_alert_threshold": "סף התרעה של תור ניהול",
"mod_queue_alert_threshold_tip": "הצג אינדיקטור אדום מהבהב כאשר פריטים ממתינים יותר מזמן זה",
"no_content": "אין תוכן",
"view": "הצג",
"excerpt": "תקציר",
"publishing": "מפרסם",
"approved": "אושר",
"rejected": "נדחה"
"rejected": "נדחה",
"submitted": "נשלח"
}
+2 -4
View File
@@ -260,14 +260,12 @@
"queue_is_empty": "कतार खाली है",
"approve": "अनुमोदन करें",
"reject": "अस्वीकार करें",
"waiting": "प्रतीक्षा कर रहा है",
"filter_by_board": "बोर्ड के अनुसार फ़िल्टर करें",
"mod_queue_alert_threshold": "मॉडरेटर कतार सतर्कता सीमा",
"mod_queue_alert_threshold_tip": "जब आइटम इस समय से अधिक समय तक प्रतीक्षा कर रहे हों तो एक चमकता हुआ लाल संकेतक दिखाएं",
"no_content": "कोई सामग्री नहीं",
"view": "देखें",
"excerpt": "अंश",
"publishing": "प्रकाशन",
"approved": "अनुमोदित",
"rejected": "अस्वीकृत"
"rejected": "अस्वीकृत",
"submitted": "सबमिट किया गया"
}
+2 -4
View File
@@ -260,14 +260,12 @@
"queue_is_empty": "A sor üres",
"approve": "Jóváhagyás",
"reject": "Elutasítás",
"waiting": "Várakozás",
"filter_by_board": "Szűrés tábla szerint",
"mod_queue_alert_threshold": "Moderációs sor riasztási küszöb",
"mod_queue_alert_threshold_tip": "Villogó piros jelző megjelenítése, amikor az elemek ennél hosszabb ideig várakoznak",
"no_content": "Nincs tartalom",
"view": "Megtekintés",
"excerpt": "Kivonat",
"publishing": "Közzététel",
"approved": "Jóváhagyva",
"rejected": "Elutasítva"
"rejected": "Elutasítva",
"submitted": "Beküldve"
}
+2 -4
View File
@@ -260,14 +260,12 @@
"queue_is_empty": "Antrian kosong",
"approve": "Setujui",
"reject": "Tolak",
"waiting": "Menunggu",
"filter_by_board": "Filter berdasarkan papan",
"mod_queue_alert_threshold": "Ambang peringatan antrian moderasi",
"mod_queue_alert_threshold_tip": "Tampilkan indikator merah berkedip ketika item menunggu lebih lama dari waktu ini",
"no_content": "Tidak ada konten",
"view": "Lihat",
"excerpt": "Kutipan",
"publishing": "Menerbitkan",
"approved": "Disetujui",
"rejected": "Ditolak"
"rejected": "Ditolak",
"submitted": "Dikirim"
}
+2 -4
View File
@@ -260,14 +260,12 @@
"queue_is_empty": "La coda è vuota",
"approve": "Approva",
"reject": "Rifiuta",
"waiting": "In attesa",
"filter_by_board": "Filtra per board",
"mod_queue_alert_threshold": "Soglia di allerta coda moderazione",
"mod_queue_alert_threshold_tip": "Mostra un indicatore rosso lampeggiante quando gli elementi attendono più di questo tempo",
"no_content": "Nessun contenuto",
"view": "Visualizza",
"excerpt": "Estratto",
"publishing": "Pubblicazione",
"approved": "Approvato",
"rejected": "Rifiutato"
"rejected": "Rifiutato",
"submitted": "Inviato"
}
+2 -4
View File
@@ -260,14 +260,12 @@
"queue_is_empty": "キューは空です",
"approve": "承認",
"reject": "拒否",
"waiting": "待機中",
"filter_by_board": "ボードでフィルター",
"mod_queue_alert_threshold": "モデレーションキューのアラート閾値",
"mod_queue_alert_threshold_tip": "アイテムがこの時間より長く待機している場合、点滅する赤いインジケーターを表示",
"no_content": "コンテンツなし",
"view": "表示",
"excerpt": "抜粋",
"publishing": "公開中",
"approved": "承認済み",
"rejected": "却下"
"rejected": "却下",
"submitted": "送信済み"
}
+2 -4
View File
@@ -260,14 +260,12 @@
"queue_is_empty": "대기열이 비어 있습니다",
"approve": "승인",
"reject": "거부",
"waiting": "대기 중",
"filter_by_board": "게시판별 필터",
"mod_queue_alert_threshold": "관리자 대기열 알림 임계값",
"mod_queue_alert_threshold_tip": "항목이 이 시간보다 오래 대기 중일 때 깜빡이는 빨간색 표시기 표시",
"no_content": "콘텐츠 없음",
"view": "보기",
"excerpt": "요약",
"publishing": "게시 중",
"approved": "승인됨",
"rejected": "거부됨"
"rejected": "거부됨",
"submitted": "제출됨"
}
+2 -4
View File
@@ -260,14 +260,12 @@
"queue_is_empty": "रांग रिकामी आहे",
"approve": "मंजूर करा",
"reject": "नकार द्या",
"waiting": "प्रतीक्षा करत आहे",
"filter_by_board": "बोर्डनुसार फिल्टर करा",
"mod_queue_alert_threshold": "मॉडरेशन रांग सतर्कता मर्यादा",
"mod_queue_alert_threshold_tip": "जेव्हा आयटम या वेळेपेक्षा जास्त वेळ प्रतीक्षा करत असतात तेव्हा एक चमकणारा लाल सूचक दाखवा",
"no_content": "सामग्री नाही",
"view": "पहा",
"excerpt": "उतारा",
"publishing": "प्रकाशन करत आहे",
"approved": "मंजूर",
"rejected": "नाकारले"
"rejected": "नाकारले",
"submitted": "सबमिट केले"
}
+2 -4
View File
@@ -260,14 +260,12 @@
"queue_is_empty": "Wachtrij is leeg",
"approve": "Goedkeuren",
"reject": "Afwijzen",
"waiting": "Wachten",
"filter_by_board": "Filteren op bord",
"mod_queue_alert_threshold": "Drempelwaarde voor moderatiewachtrijwaarschuwing",
"mod_queue_alert_threshold_tip": "Toon een knipperende rode indicator wanneer items langer dan deze tijd wachten",
"no_content": "Geen inhoud",
"view": "Bekijken",
"excerpt": "Uittreksel",
"publishing": "Publiceren",
"approved": "Goedgekeurd",
"rejected": "Afgewezen"
"rejected": "Afgewezen",
"submitted": "Ingediend"
}
+2 -4
View File
@@ -260,14 +260,12 @@
"queue_is_empty": "Køen er tom",
"approve": "Godkjenn",
"reject": "Avvis",
"waiting": "Venter",
"filter_by_board": "Filtrer etter tavle",
"mod_queue_alert_threshold": "Terskel for modereringskø-varsel",
"mod_queue_alert_threshold_tip": "Vis en blinkende rød indikator når elementer venter lenger enn denne tiden",
"no_content": "Ingen innhold",
"view": "Vis",
"excerpt": "Utdrag",
"publishing": "Publisering",
"approved": "Godkjent",
"rejected": "Avslått"
"rejected": "Avslått",
"submitted": "Sendt inn"
}
+2 -4
View File
@@ -260,14 +260,12 @@
"queue_is_empty": "Kolejka jest pusta",
"approve": "Zatwierdź",
"reject": "Odrzuć",
"waiting": "Oczekiwanie",
"filter_by_board": "Filtruj według tablicy",
"mod_queue_alert_threshold": "Próg alertu kolejki moderacji",
"mod_queue_alert_threshold_tip": "Pokaż migający czerwony wskaźnik, gdy elementy czekają dłużej niż ten czas",
"no_content": "Brak zawartości",
"view": "Zobacz",
"excerpt": "Fragment",
"publishing": "Publikowanie",
"approved": "Zatwierdzone",
"rejected": "Odrzucone"
"rejected": "Odrzucone",
"submitted": "Przesłane"
}
+2 -4
View File
@@ -260,14 +260,12 @@
"queue_is_empty": "A fila está vazia",
"approve": "Aprovar",
"reject": "Rejeitar",
"waiting": "Aguardando",
"filter_by_board": "Filtrar por quadro",
"mod_queue_alert_threshold": "Limite de alerta da fila de moderação",
"mod_queue_alert_threshold_tip": "Mostrar um indicador vermelho piscante quando os itens estão aguardando por mais tempo que este tempo",
"no_content": "Sem conteúdo",
"view": "Ver",
"excerpt": "Trecho",
"publishing": "Publicando",
"approved": "Aprovado",
"rejected": "Rejeitado"
"rejected": "Rejeitado",
"submitted": "Enviado"
}
+2 -4
View File
@@ -260,14 +260,12 @@
"queue_is_empty": "Coada este goală",
"approve": "Aprobă",
"reject": "Respinge",
"waiting": "Așteaptă",
"filter_by_board": "Filtrează după panou",
"mod_queue_alert_threshold": "Prag de alertă pentru coada de moderare",
"mod_queue_alert_threshold_tip": "Afișează un indicator roșu intermitent când elementele așteaptă mai mult decât acest timp",
"no_content": "Fără conținut",
"view": "Vizualizează",
"excerpt": "Fragment",
"publishing": "Publicare",
"approved": "Aprobat",
"rejected": "Respins"
"rejected": "Respins",
"submitted": "Trimis"
}
+2 -4
View File
@@ -260,14 +260,12 @@
"queue_is_empty": "Очередь пуста",
"approve": "Одобрить",
"reject": "Отклонить",
"waiting": "Ожидание",
"filter_by_board": "Фильтр по доске",
"mod_queue_alert_threshold": "Порог предупреждения очереди модерации",
"mod_queue_alert_threshold_tip": "Показывать мигающий красный индикатор, когда элементы ждут дольше этого времени",
"no_content": "Нет содержимого",
"view": "Просмотр",
"excerpt": "Выдержка",
"publishing": "Публикация",
"approved": "Одобрено",
"rejected": "Отклонено"
"rejected": "Отклонено",
"submitted": "Отправлено"
}
+2 -4
View File
@@ -260,14 +260,12 @@
"queue_is_empty": "Radha është e zbrazët",
"approve": "Aprovo",
"reject": "Refuzo",
"waiting": "Duke pritur",
"filter_by_board": "Filtro sipas tabelës",
"mod_queue_alert_threshold": "Pragu i alarmit të radhës së moderimit",
"mod_queue_alert_threshold_tip": "Shfaq një tregues të kuq që blinkon kur elementët po presin më shumë se kjo kohë",
"no_content": "Pa përmbajtje",
"view": "Shiko",
"excerpt": "Fragment",
"publishing": "Publikimi",
"approved": "Aprovuar",
"rejected": "Refuzuar"
"rejected": "Refuzuar",
"submitted": "Dërguar"
}
+2 -4
View File
@@ -260,14 +260,12 @@
"queue_is_empty": "Kön är tom",
"approve": "Godkänn",
"reject": "Avvisa",
"waiting": "Väntar",
"filter_by_board": "Filtrera efter tavla",
"mod_queue_alert_threshold": "Tröskelvärde för modereringskö-varning",
"mod_queue_alert_threshold_tip": "Visa en blinkande röd indikator när objekt väntar längre än denna tid",
"no_content": "Inget innehåll",
"view": "Visa",
"excerpt": "Utdrag",
"publishing": "Publicerar",
"approved": "Godkänd",
"rejected": "Avvisad"
"rejected": "Avvisad",
"submitted": "Inskickat"
}
+2 -4
View File
@@ -260,14 +260,12 @@
"queue_is_empty": "క్యూ ఖాళీగా ఉంది",
"approve": "ఆమోదించు",
"reject": "తిరస్కరించు",
"waiting": "వేచి ఉంది",
"filter_by_board": "బోర్డ్ ద్వారా ఫిల్టర్ చేయి",
"mod_queue_alert_threshold": "మోడరేషన్ క్యూ హెచ్చరిక థ్రెషోల్డ్",
"mod_queue_alert_threshold_tip": "అంశాలు ఈ సమయం కంటే ఎక్కువ సమయం వేచి ఉన్నప్పుడు మెరిసే ఎరుపు సూచికను చూపించు",
"no_content": "కంటెంట్ లేదు",
"view": "చూడు",
"excerpt": "ఎక్సెర్ప్ట్",
"publishing": "ప్రచురించడం",
"approved": "అనుమోదించబడింది",
"rejected": "తిరస్కరించబడింది"
"rejected": "తిరస్కరించబడింది",
"submitted": "సమర్పించబడింది"
}
+2 -4
View File
@@ -260,14 +260,12 @@
"queue_is_empty": "คิวว่างเปล่า",
"approve": "อนุมัติ",
"reject": "ปฏิเสธ",
"waiting": "กำลังรอ",
"filter_by_board": "กรองตามบอร์ด",
"mod_queue_alert_threshold": "เกณฑ์การแจ้งเตือนคิวผู้ดูแล",
"mod_queue_alert_threshold_tip": "แสดงตัวบ่งชี้สีแดงกะพริบเมื่อรายการรอเกินเวลานี้",
"no_content": "ไม่มีเนื้อหา",
"view": "ดู",
"excerpt": "ข้อความย่อ",
"publishing": "กำลังเผยแพร่",
"approved": "อนุมัติแล้ว",
"rejected": "ปฏิเสธ"
"rejected": "ปฏิเสธ",
"submitted": "ส่งแล้ว"
}
+2 -4
View File
@@ -260,14 +260,12 @@
"queue_is_empty": "Kuyruk boş",
"approve": "Onayla",
"reject": "Reddet",
"waiting": "Bekliyor",
"filter_by_board": "Panoya göre filtrele",
"mod_queue_alert_threshold": "Moderasyon kuyruğu uyarı eşiği",
"mod_queue_alert_threshold_tip": "Öğeler bu süreden daha uzun süre beklediğinde yanıp sönen kırmızı bir gösterge göster",
"no_content": "İçerik yok",
"view": "Görüntüle",
"excerpt": "Alıntı",
"publishing": "Yayınlama",
"approved": "Onaylandı",
"rejected": "Reddedildi"
"rejected": "Reddedildi",
"submitted": "Gönderildi"
}
+2 -4
View File
@@ -260,14 +260,12 @@
"queue_is_empty": "Черга порожня",
"approve": "Схвалити",
"reject": "Відхилити",
"waiting": "Очікування",
"filter_by_board": "Фільтр за дошкою",
"mod_queue_alert_threshold": "Поріг попередження черги модерації",
"mod_queue_alert_threshold_tip": "Показувати мигаючий червоний індикатор, коли елементи чекають довше цього часу",
"no_content": "Немає вмісту",
"view": "Перегляд",
"excerpt": "Витяг",
"publishing": "Публікація",
"approved": "Схвалено",
"rejected": "Відхилено"
"rejected": "Відхилено",
"submitted": "Відправлено"
}
+2 -4
View File
@@ -260,14 +260,12 @@
"queue_is_empty": "قطار خالی ہے",
"approve": "منظور کریں",
"reject": "مسترد کریں",
"waiting": "انتظار کر رہا ہے",
"filter_by_board": "بورڈ کے لحاظ سے فلٹر کریں",
"mod_queue_alert_threshold": "نگرانی کی قطار کی انتباہ کی حد",
"mod_queue_alert_threshold_tip": "جب آئٹمز اس وقت سے زیادہ انتظار کر رہے ہوں تو ایک ٹمٹمانے والا سرخ اشارہ دکھائیں",
"no_content": "کوئی مواد نہیں",
"view": "دیکھیں",
"excerpt": "اقتباس",
"publishing": "اشاعت",
"approved": "منظور شدہ",
"rejected": "مسترد"
"rejected": "مسترد",
"submitted": "جمع کرایا گیا"
}
+2 -4
View File
@@ -260,14 +260,12 @@
"queue_is_empty": "Hàng đợi trống",
"approve": "Phê duyệt",
"reject": "Từ chối",
"waiting": "Đang chờ",
"filter_by_board": "Lọc theo bảng",
"mod_queue_alert_threshold": "Ngưỡng cảnh báo hàng đợi kiểm duyệt",
"mod_queue_alert_threshold_tip": "Hiển thị chỉ báo màu đỏ nhấp nháy khi các mục đang chờ lâu hơn thời gian này",
"no_content": "Không có nội dung",
"view": "Xem",
"excerpt": "Trích đoạn",
"publishing": "Đang xuất bản",
"approved": "Đã phê duyệt",
"rejected": "Đã từ chối"
"rejected": "Đã từ chối",
"submitted": "Đã gửi"
}
+2 -4
View File
@@ -260,14 +260,12 @@
"queue_is_empty": "队列为空",
"approve": "批准",
"reject": "拒绝",
"waiting": "等待中",
"filter_by_board": "按板块筛选",
"mod_queue_alert_threshold": "审核队列警报阈值",
"mod_queue_alert_threshold_tip": "当项目等待时间超过此时长时显示闪烁的红色指示器",
"no_content": "无内容",
"view": "查看",
"excerpt": "摘要",
"publishing": "发布中",
"approved": "已批准",
"rejected": "已拒绝"
"rejected": "已拒绝",
"submitted": "已提交"
}
+17 -3
View File
@@ -50,6 +50,12 @@
background: var(--mod-queue-header-background-color);
font-weight: bold;
font-size: 13px;
text-transform: capitalize;
}
.numberHeader {
width: 60px;
flex-shrink: 0;
}
.boardHeader {
@@ -62,9 +68,10 @@
}
.timeHeader {
width: 80px;
width: auto;
text-align: right;
flex-shrink: 0;
white-space: nowrap;
}
.actionsHeader {
@@ -98,6 +105,12 @@
background-color: var(--mod-queue-row-hover-background-color);
}
.number {
width: 60px;
flex-shrink: 0;
font-weight: bold;
}
.board {
width: 50px;
flex-shrink: 0;
@@ -123,13 +136,14 @@
}
.time {
width: 80px;
width: auto;
flex-shrink: 0;
text-align: right;
color: var(--mod-queue-time-color);
white-space: nowrap;
}
.time.alert {
.time .alert {
color: var(--mod-queue-alert-color);
font-weight: bold;
animation: blink 2s infinite;
+18 -5
View File
@@ -1,7 +1,7 @@
import React, { useMemo, useState, useEffect } from 'react';
import { useTranslation } from 'react-i18next';
import { useParams, Link } from 'react-router-dom';
import { useAccountSubplebbits, useFeed, Comment, usePublishCommentModeration } from '@plebbit/plebbit-react-hooks';
import { useAccountSubplebbits, useFeed, Comment, usePublishCommentModeration, useEditedComment } from '@plebbit/plebbit-react-hooks';
import { Virtuoso } from 'react-virtuoso';
import { formatDistanceToNow } from 'date-fns';
import styles from './mod-queue.module.css';
@@ -13,6 +13,7 @@ import { getSubplebbitAddress, getBoardPath } from '../../lib/utils/route-utils'
import { useDefaultSubplebbits, MultisubSubplebbit } from '../../hooks/use-default-subplebbits';
import { useBoardPath } from '../../hooks/use-resolved-subplebbit-address';
import { getHasThumbnail, getCommentMediaInfo } from '../../lib/utils/media-utils';
import { getFormattedDate, getFormattedTimeAgo } from '../../lib/utils/time-utils';
import useFeedResetStore from '../../stores/use-feed-reset-store';
import useChallengesStore from '../../stores/use-challenges-store';
import { alertChallengeVerificationFailed } from '../../lib/utils/challenge-utils';
@@ -50,7 +51,11 @@ const ModQueueRow = ({ comment, showBoardColumn = false }: ModQueueRowProps) =>
const { alertThresholdHours } = useModQueueStore();
const [initiatedAction, setInitiatedAction] = useState<ModerationAction>(null);
const { content, title, timestamp, subplebbitAddress, cid, threadCid, link, thumbnailUrl, linkWidth, linkHeight, removed, approved } = comment;
// handle pending mod or author edit
const { editedComment } = useEditedComment({ comment });
const displayComment = editedComment || comment;
const { content, title, timestamp, subplebbitAddress, cid, threadCid, link, thumbnailUrl, linkWidth, linkHeight, removed, approved, number } = displayComment;
// Check if already moderated (from previous session or API update)
// Note: `approved` and `removed` are direct fields on the comment from CommentUpdate,
@@ -180,6 +185,7 @@ const ModQueueRow = ({ comment, showBoardColumn = false }: ModQueueRowProps) =>
return (
<div className={styles.row}>
<div className={styles.number}>{number ?? '—'}</div>
{showBoardColumn && <div className={styles.board}>{boardPath ? <Link to={`/${boardPath}`}>/{boardPath}/</Link> : <span></span>}</div>}
<div className={styles.excerpt}>
{postUrl ? (
@@ -190,8 +196,14 @@ const ModQueueRow = ({ comment, showBoardColumn = false }: ModQueueRowProps) =>
<span title={excerpt}>{excerpt}</span>
)}
</div>
<div className={`${styles.time} ${isOverThreshold && isAwaitingApproval && !approveSucceeded && !rejectSucceeded ? styles.alert : ''}`}>
{formatDistanceToNow(timestamp * 1000, { addSuffix: false })}
<div className={styles.time}>
{isAwaitingApproval ? (
<>
{getFormattedDate(timestamp)} (<span className={`${isOverThreshold ? styles.alert : ''}`}>{getFormattedTimeAgo(timestamp)}</span>)
</>
) : (
getFormattedDate(timestamp)
)}
</div>
<div className={styles.actions}>{renderActions()}</div>
</div>
@@ -443,9 +455,10 @@ export const ModQueueView = ({ boardIdentifier: propBoardIdentifier }: ModQueueV
) : (
<>
<div className={styles.tableHeader}>
<div className={styles.numberHeader}>No.</div>
{showBoardColumn && <div className={styles.boardHeader}>{t('board')}</div>}
<div className={styles.excerptHeader}>{t('excerpt')}</div>
<div className={styles.timeHeader}>{t('waiting')}</div>
<div className={styles.timeHeader}>{t('submitted')}</div>
<div className={styles.actionsHeader}>{t('actions')}</div>
</div>