import { Table, TableHeader, TableColumn, TableBody, TableRow, TableCell, } from "@heroui/react"; import { useTranslation } from "react-i18next"; import { type NewsItem, type NewsTranslation } from "./adminNewsTypes"; const resolveLocale = (field: NewsTranslation | null | undefined, lang: string) => { if (!field) return ""; if (typeof field === "string") return field; return field[lang] ?? field["en"] ?? Object.values(field)[0] ?? ""; }; const formatDate = (value: string | null | undefined, lang: string) => { if (!value) return ""; const date = new Date(value); if (Number.isNaN(date.getTime())) return ""; return new Intl.DateTimeFormat(lang, { day: "2-digit", month: "2-digit", year: "numeric", }).format(date); }; type AdminNewsTableProps = { items: NewsItem[]; locale: string; loading: boolean; error: string | null; onEdit: (item: NewsItem) => void; }; export default function AdminNewsTable({ items, locale, loading, error, onEdit, }: AdminNewsTableProps) { const { t } = useTranslation("common"); const valuePlaceholder = t("value_na") ?? "—"; if (loading) { return
{t("admin_news_loading") ?? "Načítám novinky…"}
; } if (error) { return
{error}
; } return ( {t("admin_news_title_cs") ?? "Název (cs)"} {t("admin_news_title_en") ?? "Title (en)"} {t("admin_news_published_at") ?? "Publikováno"} {t("admin_news_published_flag") ?? "Zveřejněno"} {(item) => ( {resolveLocale(item.title, "cs")} {resolveLocale(item.title, "en")} {(() => { if (!item.published_at) return valuePlaceholder; const date = new Date(item.published_at); if (Number.isNaN(date.getTime())) return valuePlaceholder; const isFuture = date.getTime() > Date.now(); const className = isFuture ? "italic" : "font-semibold"; return ( {formatDate(item.published_at, locale)} ); })()} {item.is_published ? t("yes") ?? "Ano" : t("no") ?? "Ne"} )}
); }