import { swrFetcher } from "@/api/api" import { deleteDDNSProfiles, getDDNSProviders } from "@/api/ddns" import { ActionButtonGroup } from "@/components/action-button-group" import { DDNSCard } from "@/components/ddns" import { HeaderButtonGroup } from "@/components/header-button-group" import { Checkbox } from "@/components/ui/checkbox" import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table" import { ModelDDNSProfile } from "@/types" import { ColumnDef, flexRender, getCoreRowModel, useReactTable } from "@tanstack/react-table" import { useEffect, useMemo, useState } from "react" import { useTranslation } from "react-i18next" import { toast } from "sonner" import useSWR from "swr" export default function DDNSPage() { const { t } = useTranslation() const { data, mutate, error, isLoading } = useSWR( "/api/v1/ddns", swrFetcher, ) const [providers, setProviders] = useState([]) useEffect(() => { const fetchProviders = async () => { const fetchedProviders = await getDDNSProviders() setProviders(fetchedProviders) } fetchProviders() }, []) useEffect(() => { if (error) toast(t("Error"), { description: t("Results.ErrorFetchingResource", { error: error.message, }), }) // eslint-disable-next-line react-hooks/exhaustive-deps }, [error]) const columns: ColumnDef[] = [ { id: "select", header: ({ table }) => ( table.toggleAllPageRowsSelected(!!value)} aria-label="Select all" /> ), cell: ({ row }) => ( row.toggleSelected(!!value)} aria-label="Select row" /> ), enableSorting: false, enableHiding: false, }, { header: "ID", accessorKey: "id", accessorFn: (row) => row.id, }, { header: t("Name"), accessorKey: "name", accessorFn: (row) => row.name, cell: ({ row }) => { const s = row.original return
{s.name}
}, }, { header: "IPv4", accessorKey: "enableIPv4", accessorFn: (row) => row.enable_ipv4 ?? false, }, { header: "IPv6", accessorKey: "enableIPv6", accessorFn: (row) => row.enable_ipv6 ?? false, }, { header: t("Provider"), accessorKey: "provider", accessorFn: (row) => row.provider, }, { header: t("Domains"), accessorKey: "domains", accessorFn: (row) => row.domains, cell: ({ row }) => { const s = row.original return
{s.domains}
}, }, { header: t("MaximumRetryAttempts"), accessorKey: "maxRetries", accessorFn: (row) => row.max_retries, }, { id: "actions", header: t("Actions"), cell: ({ row }) => { const s = row.original return ( ) }, }, ] const dataCache = useMemo(() => { return data ?? [] }, [data]) const table = useReactTable({ data: dataCache, columns, getCoreRowModel: getCoreRowModel(), }) const selectedRows = table.getSelectedRowModel().rows return (

{t("DDNS")}

r.original.id!), mutate: mutate, }} >
{table.getHeaderGroups().map((headerGroup) => ( {headerGroup.headers.map((header) => { return ( {header.isPlaceholder ? null : flexRender( header.column.columnDef.header, header.getContext(), )} ) })} ))} {isLoading ? ( {t("Loading")}... ) : table.getRowModel().rows?.length ? ( table.getRowModel().rows.map((row) => ( {row.getVisibleCells().map((cell) => ( {flexRender(cell.column.columnDef.cell, cell.getContext())} ))} )) ) : ( {t("NoResults")} )}
) }