{"version":3,"file":"SSOConnectionDetailsScreen.mjs","sources":["../../../../../../../../web/src/adminPortal/sso/SSOConnectionDetailsScreen.tsx"],"sourcesContent":["import { ChevronLeft } from '@mui/icons-material';\nimport React, { useCallback, useMemo } from 'react';\n\nimport { Button } from '../components/Button';\nimport { DeleteConfirmModal, useDeleteConnection } from '../components/DeleteConnection';\nimport { FlexBox } from '../components/FlexBox';\nimport { PageLoadingIndicator } from '../components/PageLoadingIndicator';\nimport { Tag } from '../components/Tag';\nimport { Typography } from '../components/Typography';\nimport { useAdminPortalSSOUIConfig } from '../StytchClientContext';\nimport { useOrgInfo } from '../utils/useOrgInfo';\nimport { useRbac } from '../utils/useRbac';\nimport { useSsoConnections } from '../utils/useSsoConnections';\nimport { useStytchClient } from '../utils/useStytchClient';\nimport { DetailsSection } from './DetailsSection';\nimport { OrganizationUpdatesSection } from './OrganizationUpdatesSection';\nimport { RoleAssignmentsSection } from './RoleAssignmentsSection';\nimport { useSsoRouterController } from './SSORouter';\n\nexport const SSOConnectionDetailsScreen = ({ connectionId }: { connectionId: string }) => {\n  const { navigate } = useSsoRouterController();\n  const client = useStytchClient();\n  const uiConfig = useAdminPortalSSOUIConfig();\n\n  const { data: canGetConnection } = useRbac('stytch.sso', 'get');\n  const { data: canDeleteConnection } = useRbac('stytch.sso', 'delete');\n  const { data: canUpdateConnection } = useRbac('stytch.sso', 'update');\n\n  const { data: connections, isLoading } = useSsoConnections({ shouldFetch: !!canGetConnection });\n  const { data: orgInfo } = useOrgInfo();\n  const defaultConnectionId = orgInfo?.sso_default_connection_id;\n  const defaultConnectionName = useMemo(\n    () =>\n      connections\n        ? [...connections.oidc_connections, ...connections.saml_connections].find(\n            (connection) => connection.connection_id === defaultConnectionId,\n          )?.display_name\n        : undefined,\n    [connections, defaultConnectionId],\n  );\n\n  const connection = useMemo(() => {\n    const oidcMatch = connections?.oidc_connections?.find(({ connection_id }) => connection_id === connectionId);\n    if (oidcMatch) {\n      return { ...oidcMatch, connectionType: 'oidc' as const };\n    }\n\n    const samlMatch = connections?.saml_connections?.find(({ connection_id }) => connection_id === connectionId);\n    if (samlMatch) {\n      return { ...samlMatch, connectionType: 'saml' as const };\n    }\n\n    const externalMatch = connections?.external_connections?.find(\n      ({ connection_id }) => connection_id === connectionId,\n    );\n    if (externalMatch) {\n      return { ...externalMatch, connectionType: 'external' as const };\n    }\n\n    return null;\n  }, [connectionId, connections?.external_connections, connections?.oidc_connections, connections?.saml_connections]);\n\n  const connectionType = connection?.connectionType;\n  const connectionName = connection?.display_name;\n\n  const isDefaultConnection = connection?.connection_id === defaultConnectionId;\n\n  const isOnlyConnection =\n    (connections?.oidc_connections.length ?? 0) + (connections?.saml_connections.length ?? 0) === 1;\n\n  const connectionSupportsRoleAssignments = connectionType === 'saml' || connectionType === 'external';\n\n  const { handleRequestDelete, modalProps } = useDeleteConnection({\n    onConfirm: () => {\n      navigate({ screen: 'connectionsList' });\n    },\n  });\n\n  const handleDeleteClick = useCallback(() => {\n    if (connectionId && connectionName && connectionType) {\n      handleRequestDelete({ id: connectionId, displayName: connectionName, connectionType });\n    }\n  }, [connectionId, connectionName, connectionType, handleRequestDelete]);\n\n  const handleTestClick = useCallback(() => {\n    if (connection?.connection_id) {\n      try {\n        client.sso.start({\n          connection_id: connection.connection_id,\n          login_redirect_url: uiConfig?.testLoginRedirectURL,\n          signup_redirect_url: uiConfig?.testSignupRedirectURL,\n        });\n      } catch {\n        // noop\n      }\n    }\n  }, [client.sso, connection?.connection_id, uiConfig?.testLoginRedirectURL, uiConfig?.testSignupRedirectURL]);\n\n  const isActive = connection?.status === 'active';\n\n  return (\n    <FlexBox flexDirection=\"column\" gap={3}>\n      <Button\n        compact\n        variant=\"ghost\"\n        onClick={() => {\n          navigate({ screen: 'connectionsList' });\n        }}\n        startIcon={<ChevronLeft />}\n      >\n        Back to all SSO connections\n      </Button>\n      <DeleteConfirmModal {...modalProps} />\n      {connection ? (\n        <>\n          <FlexBox alignItems=\"center\" justifyContent=\"space-between\">\n            <FlexBox alignItems=\"center\" justifyContent=\"flex-start\" gap={1}>\n              <Typography variant=\"h2\">{connectionName}</Typography>\n              {isDefaultConnection && <Tag size=\"small\">Default</Tag>}\n            </FlexBox>\n            {isActive && <Button onClick={handleTestClick}>Test connection</Button>}\n          </FlexBox>\n          <FlexBox flexDirection=\"column\" gap={3}>\n            <OrganizationUpdatesSection\n              connection={connection}\n              defaultConnectionName={defaultConnectionName}\n              isDefaultConnection={isDefaultConnection}\n            />\n            {connectionSupportsRoleAssignments && (\n              <RoleAssignmentsSection canUpdateConnection={!!canUpdateConnection} connection={connection} />\n            )}\n            <DetailsSection canUpdateConnection={!!canUpdateConnection} connection={connection} />\n          </FlexBox>\n          {canDeleteConnection && (!isDefaultConnection || isOnlyConnection) && (\n            <Button compact variant=\"ghost\" warning onClick={handleDeleteClick}>\n              Delete connection\n            </Button>\n          )}\n        </>\n      ) : (\n        isLoading && <PageLoadingIndicator />\n      )}\n    </FlexBox>\n  );\n};\n"],"names":["SSOConnectionDetailsScreen","connectionId","navigate","useSsoRouterController","client","useStytchClient","uiConfig","useAdminPortalSSOUIConfig","data","canGetConnection","useRbac","canDeleteConnection","canUpdateConnection","connections","isLoading","useSsoConnections","shouldFetch","orgInfo","useOrgInfo","defaultConnectionId","sso_default_connection_id","defaultConnectionName","useMemo","oidc_connections","saml_connections","find","connection","connection_id","display_name","undefined","oidcMatch","connectionType","samlMatch","externalMatch","external_connections","connectionName","isDefaultConnection","isOnlyConnection","length","connectionSupportsRoleAssignments","handleRequestDelete","modalProps","useDeleteConnection","onConfirm","screen","handleDeleteClick","useCallback","id","displayName","handleTestClick","sso","start","login_redirect_url","testLoginRedirectURL","signup_redirect_url","testSignupRedirectURL","isActive","status","React","FlexBox","flexDirection","gap","Button","compact","variant","onClick","startIcon","ChevronLeft","DeleteConfirmModal","alignItems","justifyContent","Typography","Tag","size","OrganizationUpdatesSection","RoleAssignmentsSection","DetailsSection","warning","PageLoadingIndicator"],"mappings":"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"}