mirror of
https://github.com/fosrl/pangolin.git
synced 2026-02-11 15:36:38 +00:00
125 lines
3.6 KiB
TypeScript
125 lines
3.6 KiB
TypeScript
"use client";
|
|
|
|
import { ColumnDef } from "@tanstack/react-table";
|
|
import { ExtendedColumnDef } from "@app/components/ui/data-table";
|
|
import { useTranslations } from "next-intl";
|
|
import { Badge } from "@app/components/ui/badge";
|
|
import { DNSRecordsDataTable } from "./DNSRecordsDataTable";
|
|
import CopyToClipboard from "@app/components/CopyToClipboard";
|
|
import { useEnvContext } from "@app/hooks/useEnvContext";
|
|
|
|
export type DNSRecordRow = {
|
|
id: string;
|
|
recordType: string; // "NS" | "CNAME" | "A" | "TXT"
|
|
baseDomain: string | null;
|
|
value: string;
|
|
verified?: boolean;
|
|
};
|
|
|
|
type Props = {
|
|
records: DNSRecordRow[];
|
|
type: string | null;
|
|
};
|
|
|
|
export default function DNSRecordsTable({
|
|
records,
|
|
type
|
|
}: Props) {
|
|
const t = useTranslations();
|
|
const env = useEnvContext();
|
|
|
|
const statusColumn: ColumnDef<DNSRecordRow> = {
|
|
accessorKey: "verified",
|
|
header: ({ column }) => {
|
|
return <div>{t("status")}</div>;
|
|
},
|
|
cell: ({ row }) => {
|
|
const verified = row.original.verified;
|
|
return verified ? (
|
|
type === "wildcard" ? (
|
|
<Badge variant="outlinePrimary">
|
|
{t("manual", { fallback: "Manual" })}
|
|
</Badge>
|
|
) : (
|
|
<Badge variant="green">{t("verified")}</Badge>
|
|
)
|
|
) : (
|
|
<Badge variant="yellow">
|
|
{t("pending", { fallback: "Pending" })}
|
|
</Badge>
|
|
);
|
|
}
|
|
};
|
|
|
|
const columns: ExtendedColumnDef<DNSRecordRow>[] = [
|
|
{
|
|
accessorKey: "baseDomain",
|
|
friendlyName: t("recordName", { fallback: "Record name" }),
|
|
header: ({ column }) => {
|
|
return (
|
|
<div>{t("recordName", { fallback: "Record name" })}</div>
|
|
);
|
|
},
|
|
cell: ({ row }) => {
|
|
const baseDomain = row.original.baseDomain;
|
|
return baseDomain ? (
|
|
<CopyToClipboard
|
|
text={baseDomain}
|
|
displayText={baseDomain}
|
|
isLink={false}
|
|
/>
|
|
) : (
|
|
<div>-</div>
|
|
);
|
|
}
|
|
},
|
|
{
|
|
accessorKey: "recordType",
|
|
friendlyName: t("type"),
|
|
header: ({ column }) => {
|
|
return <div>{t("type")}</div>;
|
|
},
|
|
cell: ({ row }) => {
|
|
const type = row.original.recordType;
|
|
return <div className="">{type}</div>;
|
|
}
|
|
},
|
|
{
|
|
accessorKey: "ttl",
|
|
friendlyName: t("TTL"),
|
|
header: ({ column }) => {
|
|
return <div>{t("TTL")}</div>;
|
|
},
|
|
cell: ({ row }) => {
|
|
return <div>{t("auto")}</div>;
|
|
}
|
|
},
|
|
{
|
|
accessorKey: "value",
|
|
friendlyName: t("value"),
|
|
header: () => {
|
|
return <div>{t("value")}</div>;
|
|
},
|
|
cell: ({ row }) => {
|
|
const value = row.original.value;
|
|
return (
|
|
<CopyToClipboard
|
|
text={value}
|
|
displayText={value}
|
|
isLink={false}
|
|
/>
|
|
);
|
|
}
|
|
},
|
|
...(env.env.flags.usePangolinDns ? [statusColumn] : [])
|
|
];
|
|
|
|
return (
|
|
<DNSRecordsDataTable
|
|
columns={columns}
|
|
data={records}
|
|
type={type}
|
|
/>
|
|
);
|
|
}
|