import { MoreVerticalIcon } from "lucide-react"; import { useEffect, useState } from "react"; import { toast } from "react-hot-toast"; import { Link } from "react-router-dom"; import { Button } from "@/components/ui/button"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from "@/components/ui/dropdown-menu"; import { Separator } from "@/components/ui/separator"; import { identityProviderServiceClient } from "@/grpcweb"; import { IdentityProvider } from "@/types/proto/api/v1/idp_service"; import { useTranslate } from "@/utils/i18n"; import CreateIdentityProviderDialog from "../CreateIdentityProviderDialog"; import LearnMore from "../LearnMore"; const SSOSection = () => { const t = useTranslate(); const [identityProviderList, setIdentityProviderList] = useState([]); const [isCreateDialogOpen, setIsCreateDialogOpen] = useState(false); const [editingIdentityProvider, setEditingIdentityProvider] = useState(); useEffect(() => { fetchIdentityProviderList(); }, []); const fetchIdentityProviderList = async () => { const { identityProviders } = await identityProviderServiceClient.listIdentityProviders({}); setIdentityProviderList(identityProviders); }; const handleDeleteIdentityProvider = async (identityProvider: IdentityProvider) => { const confirmed = window.confirm(t("setting.sso-section.confirm-delete", { name: identityProvider.title })); if (confirmed) { try { await identityProviderServiceClient.deleteIdentityProvider({ name: identityProvider.name }); } catch (error: any) { console.error(error); toast.error(error.details); } await fetchIdentityProviderList(); } }; const handleCreateIdentityProvider = () => { setEditingIdentityProvider(undefined); setIsCreateDialogOpen(true); }; const handleEditIdentityProvider = (identityProvider: IdentityProvider) => { setEditingIdentityProvider(identityProvider); setIsCreateDialogOpen(true); }; const handleDialogSuccess = async () => { await fetchIdentityProviderList(); setIsCreateDialogOpen(false); setEditingIdentityProvider(undefined); }; return (
{t("setting.sso-section.sso-list")}
{identityProviderList.map((identityProvider) => (

{identityProvider.title} ({identityProvider.type})

handleEditIdentityProvider(identityProvider)}>{t("common.edit")} handleDeleteIdentityProvider(identityProvider)}>{t("common.delete")}
))} {identityProviderList.length === 0 && (

{t("setting.sso-section.no-sso-found")}

)}

{t("common.learn-more")}:

  • {t("setting.sso-section.single-sign-on")}
); }; export default SSOSection;