"use client"; import { getDocumentIntlLocale } from "@/lib/i18n/browser"; import { useTranslations } from "@/components/i18n/i18n-provider"; import { CheckCircle2, Download, FileEdit, MoreHorizontal, Plus, Send, Trash2 } from "lucide-react"; import { Badge, Button, Card, CardContent } from "poyraz-ui/atoms"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from "poyraz-ui/molecules"; export type InvoiceRow = { id: string; invoice_number: string; amount: number; currency: string; status: "draft" | "sent" | "paid" | "overdue" | "cancelled"; issue_date: string | null; due_date: string | null; clientName: string | null; projectName: string | null; created_at: string; }; export function InvoicesClient({ invoices }: { invoices: InvoiceRow[] }) { const t = useTranslations(); return (

{t("business.invoices.title")}

{t("business.invoices.table.number")}{t("business.common.client")}{t("business.common.amount")}{t("business.common.status")}{t("business.invoices.table.issueDate")}{t("business.invoices.table.dueDate")}{t("business.common.actions")} {invoices.length === 0 ? ( ) : ( invoices.map((invoice) => ( )) )}
{t("business.invoices.empty")}
{invoice.invoice_number} {invoice.projectName ? (
{invoice.projectName}
) : null}
{invoice.clientName || "-"} {formatCurrency(invoice.amount, invoice.currency)} {invoice.issue_date ? formatDate(invoice.issue_date) : "-"} {invoice.due_date ? formatDate(invoice.due_date) : "-"}
); } function InvoiceMenu() { const t = useTranslations(); return ( {t("business.common.edit")} {t("business.invoices.actions.download")} {t("business.invoices.actions.send")} {t("business.invoices.actions.markPaid")} {t("business.common.delete")} ); } function InvoiceStatusBadge({ status }: { status: InvoiceRow["status"] }) { const t = useTranslations(); if (status === "draft") return {t("business.invoices.status.draft")}; if (status === "sent") return {t("business.invoices.status.sent")}; if (status === "paid") return {t("business.invoices.status.paid")}; if (status === "overdue") return {t("business.invoices.status.overdue")}; return {t("business.invoices.status.cancelled")}; } function TableHead({ className = "", children }: { className?: string; children: React.ReactNode }) { return {children}; } function formatCurrency(amount: number, currency: string) { return new Intl.NumberFormat(getDocumentIntlLocale(), { style: "currency", currency }).format(amount); } function formatDate(value: string) { return new Intl.DateTimeFormat(getDocumentIntlLocale(), { day: "2-digit", month: "short", year: "numeric" }).format(new Date(`${value}T00:00:00`)); }