"use client"; import { ColumnDef } from "@tanstack/react-table"; import { ResourcesDataTable } from "./ResourcesDataTable"; 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 { set } from "zod"; import { formatAxiosError } from "@app/lib/api"; import { useToast } from "@app/hooks/useToast"; import { createApiClient } from "@app/lib/api"; import { useEnvContext } from "@app/hooks/useEnvContext"; import CopyToClipboard from "@app/components/CopyToClipboard"; export type ResourceRow = { id: number; name: string; orgId: string; domain: string; site: string; siteId: string; hasAuth: boolean; http: boolean; protocol: string; proxyPort: number | null; }; type ResourcesTableProps = { resources: ResourceRow[]; orgId: string; }; export default function SitesTable({ resources, orgId }: ResourcesTableProps) { const router = useRouter(); const { toast } = useToast(); const api = createApiClient(useEnvContext()); const [isCreateModalOpen, setIsCreateModalOpen] = useState(false); const [isDeleteModalOpen, setIsDeleteModalOpen] = useState(false); const [selectedResource, setSelectedResource] = useState(); const deleteResource = (resourceId: number) => { api.delete(`/resource/${resourceId}`) .catch((e) => { console.error("Error deleting resource", e); toast({ variant: "destructive", title: "Error deleting resource", description: formatAxiosError(e, "Error deleting resource") }); }) .then(() => { router.refresh(); setIsDeleteModalOpen(false); }); }; const columns: ColumnDef[] = [ { accessorKey: "dots", header: "", cell: ({ row }) => { const resourceRow = row.original; const router = useRouter(); return ( View settings { setSelectedResource(resourceRow); setIsDeleteModalOpen(true); }} > Delete ); } }, { accessorKey: "name", header: ({ column }) => { return ( ); } }, { accessorKey: "site", header: ({ column }) => { return ( ); }, cell: ({ row }) => { const resourceRow = row.original; return ( ); } }, { accessorKey: "protocol", header: "Protocol", cell: ({ row }) => { const resourceRow = row.original; return ( {resourceRow.protocol.toUpperCase()} ); } }, { accessorKey: "domain", header: "Access", cell: ({ row }) => { const resourceRow = row.original; return (
{!resourceRow.http ? ( ) : ( )}
); } }, { accessorKey: "hasAuth", header: ({ column }) => { return ( ); }, cell: ({ row }) => { const resourceRow = row.original; return (
{!resourceRow.http ? ( -- ) : resourceRow.hasAuth ? ( Protected ) : ( Not Protected ) }
); } }, { id: "actions", cell: ({ row }) => { const resourceRow = row.original; return (
); } } ]; return ( <> {selectedResource && ( { setIsDeleteModalOpen(val); setSelectedResource(null); }} dialog={

Are you sure you want to remove the resource{" "} {selectedResource?.name || selectedResource?.id} {" "} from the organization?

Once removed, the resource will no longer be accessible. All targets attached to the resource will be removed.

To confirm, please type the name of the resource below.

} buttonText="Confirm Delete Resource" onConfirm={async () => deleteResource(selectedResource!.id)} string={selectedResource.name} title="Delete Resource" /> )} { setIsCreateModalOpen(true); }} /> ); }