import { Button, Divider, Dropdown, List, ListItem, Menu, MenuButton, MenuItem } from "@mui/joy"; import { useEffect, useState } from "react"; import { toast } from "react-hot-toast"; import { Link } from "react-router-dom"; import { identityProviderServiceClient } from "@/grpcweb"; import { IdentityProvider } from "@/types/proto/api/v1/idp_service"; import { useTranslate } from "@/utils/i18n"; import showCreateIdentityProviderDialog from "../CreateIdentityProviderDialog"; import Icon from "../Icon"; import LearnMore from "../LearnMore"; const SSOSection = () => { const t = useTranslate(); const [identityProviderList, setIdentityProviderList] = 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(); } }; return (
{t("setting.sso-section.sso-list")}
{identityProviderList.map((identityProvider) => (

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

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

No SSO found.

)}

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

Configuring Keycloak for Authentication
); }; export default SSOSection;