"use client"; import { ColumnDef } from "@tanstack/react-table"; import { ExtendedColumnDef } from "@app/components/ui/data-table"; import { ShareLinksDataTable } from "@app/components/ShareLinksDataTable"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from "@app/components/ui/dropdown-menu"; import { Button } from "@app/components/ui/button"; import { Copy, ArrowRight, ArrowUpDown, MoreHorizontal, Check, ArrowUpRight, ShieldOff, ShieldCheck } from "lucide-react"; import Link from "next/link"; import { useRouter } from "next/navigation"; // import CreateResourceForm from "./CreateResourceForm"; import { useState } from "react"; import ConfirmDeleteDialog from "@app/components/ConfirmDeleteDialog"; import { formatAxiosError } from "@app/lib/api"; import { toast } from "@app/hooks/useToast"; import { createApiClient } from "@app/lib/api"; import { useEnvContext } from "@app/hooks/useEnvContext"; import { ArrayElement } from "@server/types/ArrayElement"; import { ListAccessTokensResponse } from "@server/routers/accessToken"; import moment from "moment"; import CreateShareLinkForm from "@app/components/CreateShareLinkForm"; import { constructShareLink } from "@app/lib/shareLinks"; import { useTranslations } from "next-intl"; export type ShareLinkRow = { accessTokenId: string; resourceId: number; resourceName: string; resourceNiceId: string; title: string | null; createdAt: number; expiresAt: number | null; }; type ShareLinksTableProps = { shareLinks: ShareLinkRow[]; orgId: string; }; export default function ShareLinksTable({ shareLinks, orgId }: ShareLinksTableProps) { const router = useRouter(); const t = useTranslations(); const api = createApiClient(useEnvContext()); const [isCreateModalOpen, setIsCreateModalOpen] = useState(false); const [rows, setRows] = useState(shareLinks); const [isRefreshing, setIsRefreshing] = useState(false); const refreshData = async () => { console.log("Data refreshed"); setIsRefreshing(true); try { await new Promise((resolve) => setTimeout(resolve, 200)); router.refresh(); } catch (error) { toast({ title: t("error"), description: t("refreshError"), variant: "destructive" }); } finally { setIsRefreshing(false); } }; function formatLink(link: string) { return link.substring(0, 20) + "..." + link.substring(link.length - 20); } async function deleteSharelink(id: string) { await api.delete(`/access-token/${id}`).catch((e) => { toast({ title: t("shareErrorDelete"), description: formatAxiosError(e, t("shareErrorDeleteMessage")) }); }); const newRows = rows.filter((r) => r.accessTokenId !== id); setRows(newRows); toast({ title: t("shareDeleted"), description: t("shareDeletedDescription") }); } const columns: ExtendedColumnDef[] = [ { accessorKey: "title", friendlyName: t("title"), header: ({ column }) => { return ( ); } }, { accessorKey: "resourceName", enableHiding: false, friendlyName: t("resource"), header: ({ column }) => { return ( ); }, cell: ({ row }) => { const r = row.original; return ( ); } }, // { // accessorKey: "domain", // header: "Link", // cell: ({ row }) => { // const r = row.original; // // const link = constructShareLink( // r.resourceId, // r.accessTokenId, // r.tokenHash // ); // // return ( //
// // {formatLink(link)} // // //
// ); // } // }, { accessorKey: "createdAt", friendlyName: t("created"), header: ({ column }) => { return ( ); }, cell: ({ row }) => { const r = row.original; return moment(r.createdAt).format("lll"); } }, { accessorKey: "expiresAt", friendlyName: t("expires"), header: ({ column }) => { return ( ); }, cell: ({ row }) => { const r = row.original; if (r.expiresAt) { return moment(r.expiresAt).format("lll"); } return t("never"); } }, { id: "delete", enableHiding: false, header: () => , cell: ({ row }) => { const resourceRow = row.original; return (
{/* */} {/* */} {/* */} {/* */} {/* */} {/* { */} {/* deleteSharelink( */} {/* resourceRow.accessTokenId */} {/* ); */} {/* }} */} {/* > */} {/* */} {/* */} {/* */} {/* */}
); } } ]; return ( <> { setRows([val, ...rows]); }} /> { setIsCreateModalOpen(true); }} onRefresh={refreshData} isRefreshing={isRefreshing} /> ); }