import { useState } from "react"; import LicenseRequired from "@calcom/features/ee/common/components/v2/LicenseRequired"; import ConfigDialogForm from "@calcom/features/ee/sso/components/ConfigDialogForm"; import { APP_NAME } from "@calcom/lib/constants"; import { useLocale } from "@calcom/lib/hooks/useLocale"; import { trpc } from "@calcom/trpc/react"; import { Alert, Badge, Button, ClipboardCopyIcon, ConfirmationDialogContent, Dialog, DialogContent, DialogTrigger, Icon, Label, Meta, showToast, SkeletonLoader, } from "@calcom/ui"; export default function SAMLConfiguration({ teamId }: { teamId: number | null }) { const { t } = useLocale(); const utils = trpc.useContext(); const [hasError, setHasError] = useState(false); const [errorMessage, setErrorMessage] = useState(""); const [configModal, setConfigModal] = useState(false); const { data: connection, isLoading } = trpc.viewer.saml.get.useQuery( { teamId }, { onError: (err) => { setHasError(true); setErrorMessage(err.message); }, onSuccess: () => { setHasError(false); setErrorMessage(""); }, } ); const mutation = trpc.viewer.saml.delete.useMutation({ async onSuccess() { await utils.viewer.saml.get.invalidate(); showToast(t("saml_config_deleted_successfully"), "success"); }, onError: (err) => { showToast(err.message, "error"); }, }); const deleteConnection = () => { mutation.mutate({ teamId, }); }; if (isLoading) { return ; } if (hasError) { return ( <> ); } return ( <>
{connection && connection.provider ? ( SAML SSO enabled via {connection.provider} ) : ( {t("saml_not_configured_yet")} )}
{/* Service Provider Details */} {connection && connection.provider && ( <>
{t("saml_sp_title")}

{t("saml_sp_description")}

{connection.acsUrl}
{connection.entityId}
)} {/* Danger Zone and Delete Confirmation */} {connection && connection.provider && ( <>
{t("danger_zone")}
{t("delete_saml_configuration_confirmation_message", { appName: APP_NAME })} )} {/* Add/Update SAML Connection */} setConfigModal(false)} teamId={teamId} />
); }