import { Search } from "lucide-react"; import { StatusBadge, TableActionGroup, i18nMessage, type DataGridColumn, type DataGridListOption } from "@govoplan/core-webui"; import type { MockMailboxMessage } from "../../../api/mail"; import type { CampaignMessagePreviewAttachment } from "../components/MessagePreviewOverlay"; import { asArray, asRecord, stringifyPreview } from "../utils/campaignView"; import { SEND_STATUS_OPTIONS, IMAP_STATUS_OPTIONS, deliveryStatusLabel } from "../utils/deliveryStatusOptions"; import { builtMessageState } from "./builtMessageState"; import { countResolvedAttachments, formatAddressList } from "./reviewFormatters"; const MESSAGE_STATE_OPTIONS: DataGridListOption[] = [ { value: "ready", label: "i18n:govoplan-campaign.message_state_ready" }, { value: "needs_review", label: "i18n:govoplan-campaign.message_state_needs_review" }, { value: "blocked", label: "i18n:govoplan-campaign.message_state_blocked_label" }, { value: "excluded", label: "i18n:govoplan-campaign.message_state_excluded_label" }]; export function builtMessageColumns( openMessage: (row: Record) => void, reviewedKeys: Set, inspectionComplete = false) : DataGridColumn>[] { return [ { id: "number", header: "#", width: 70, sortable: true, filterType: "integer", sticky: "start", value: (row, index) => Number(row.entry_index ?? index + 1) }, { id: "recipient", header: "i18n:govoplan-campaign.recipient.90343260", width: 250, resizable: true, sortable: true, filterable: true, value: (row) => formatAddressList(asRecord(row.resolved_recipients).to) || String(row.recipient_email ?? "—") }, { id: "subject", header: "i18n:govoplan-campaign.subject.8d183dbd", width: "minmax(260px, 1fr)", maxWidth: 640, resizable: true, sortable: true, filterable: true, value: (row) => String(row.subject ?? "—") }, { id: "messageState", header: "i18n:govoplan-campaign.message_state_heading", width: 145, sortable: true, filterable: true, columnType: "from-list", list: { options: MESSAGE_STATE_OPTIONS, display: "pill" }, value: (row, index) => builtMessageState(row, index, reviewedKeys, inspectionComplete).state }, { id: "postboxTargets", header: "Postbox targets", width: 145, align: "right", sortable: true, filterType: "integer", value: (row) => Number(row.postbox_target_count ?? 0), render: (row) => { const count = Number(row.postbox_target_count ?? 0); return count > 0 ? ( ) : ( ); } }, { id: "attachments", header: "i18n:govoplan-campaign.attachments.6771ade6", width: 125, sortable: true, filterable: true, filterType: "integer", align: "right", value: (row) => Number(row.attachment_count ?? countResolvedAttachments(row.attachments)) }, { id: "stateExplanation", header: "i18n:govoplan-campaign.message_state_explanation_heading", width: "minmax(220px, 1fr)", maxWidth: 480, resizable: true, value: (row, index) => builtMessageState(row, index, reviewedKeys, inspectionComplete).explanationLabel }, { id: "actions", header: "i18n:govoplan-campaign.actions.c3cd636a", width: 72, sticky: "end", render: (row) =>