"use client"; import { ColumnDef } from "@tanstack/react-table"; import { IdpDataTable } from "@app/components/AdminIdpDataTable"; import { Button } from "@app/components/ui/button"; import { ArrowRight, ArrowUpDown, MoreHorizontal } from "lucide-react"; import { useState } from "react"; import ConfirmDeleteDialog from "@app/components/ConfirmDeleteDialog"; import { toast } from "@app/hooks/useToast"; import { formatAxiosError } from "@app/lib/api"; import { createApiClient } from "@app/lib/api"; import { useEnvContext } from "@app/hooks/useEnvContext"; import { Badge } from "@app/components/ui/badge"; import { useRouter } from "next/navigation"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from "@app/components/ui/dropdown-menu"; import Link from "next/link"; import { useTranslations } from "next-intl"; import IdpTypeBadge from "./IdpTypeBadge"; export type IdpRow = { idpId: number; name: string; type: string; orgCount: number; variant?: string; }; type Props = { idps: IdpRow[]; }; export default function IdpTable({ idps }: Props) { const [isDeleteModalOpen, setIsDeleteModalOpen] = useState(false); const [selectedIdp, setSelectedIdp] = useState(null); const api = createApiClient(useEnvContext()); const router = useRouter(); const [isRefreshing, setIsRefreshing] = useState(false); const t = useTranslations(); 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); } }; const deleteIdp = async (idpId: number) => { try { await api.delete(`/idp/${idpId}`); toast({ title: t("success"), description: t("idpDeletedDescription") }); setIsDeleteModalOpen(false); router.refresh(); } catch (e) { toast({ title: t("error"), description: formatAxiosError(e), variant: "destructive" }); } }; const columns: ColumnDef[] = [ { accessorKey: "idpId", header: ({ column }) => { return ( ); } }, { accessorKey: "name", header: ({ column }) => { return ( ); } }, { accessorKey: "type", header: ({ column }) => { return ( ); }, cell: ({ row }) => { const type = row.original.type; const variant = row.original.variant; return ; } }, { id: "actions", cell: ({ row }) => { const siteRow = row.original; return (
{t("viewSettings")} { setSelectedIdp(siteRow); setIsDeleteModalOpen(true); }} > {t("delete")}
); } } ]; return ( <> {selectedIdp && ( { setIsDeleteModalOpen(val); setSelectedIdp(null); }} dialog={

{t("idpQuestionRemove", { name: selectedIdp.name })}

{t("idpMessageRemove")}

{t("idpMessageConfirm")}

} buttonText={t("idpConfirmDelete")} onConfirm={async () => deleteIdp(selectedIdp.idpId)} string={selectedIdp.name} title={t("idpDelete")} /> )} ); }