{"version":3,"file":"SSONewConnectionScreen.mjs","sources":["../../../../../../../../web/src/adminPortal/sso/SSONewConnectionScreen.tsx"],"sourcesContent":["import { ChevronLeft } from '@mui/icons-material';\nimport React, { useCallback, useState } from 'react';\nimport { useSWRConfig } from 'swr';\n\nimport { extractErrorMessage } from '../../utils/extractErrorMessage';\nimport { Button } from '../components/Button';\nimport { FlexBox } from '../components/FlexBox';\nimport { Input } from '../components/Input';\nimport { Select } from '../components/Select';\nimport { useToast } from '../components/Toast';\nimport { Typography } from '../components/Typography';\nimport { useRevalidateConnectionList } from '../utils/useRevalidateConnectionList';\nimport { useStytchClient } from '../utils/useStytchClient';\nimport { idpOptions, idpSelectItems, IdpSelectValue } from './IdpSelect';\nimport { useSsoRouterController } from './SSORouter';\nimport { OIDCTaggedConnection, SAMLTaggedConnection } from './TaggedConnection';\n\nexport const SSONewConnectionScreen = () => {\n  const { navigate } = useSsoRouterController();\n  const { openToast } = useToast();\n\n  const [displayName, setDisplayName] = useState('');\n\n  const [isExternalConnection, setIsExternalConnection] = useState(false);\n\n  const [idp, setIdp] = useState<IdpSelectValue>();\n\n  const [sourceOrgId, setSourceOrgId] = useState('');\n  const [sourceConnectionId, setSourceConnectionId] = useState('');\n\n  const isNewConnectionReadyToCreate = !!idp;\n  const isExternalConnectionReadyToCreate = sourceOrgId && sourceConnectionId;\n\n  const isReadyToCreate =\n    displayName && (isExternalConnection ? isExternalConnectionReadyToCreate : isNewConnectionReadyToCreate);\n\n  const client = useStytchClient();\n  const { mutate } = useSWRConfig();\n  const revalidateConnectionList = useRevalidateConnectionList();\n  const handleSubmit = useCallback<React.FormEventHandler<HTMLFormElement>>(\n    async (e) => {\n      e.preventDefault();\n\n      if (isExternalConnection) {\n        if (!isExternalConnectionReadyToCreate) {\n          return;\n        }\n\n        const response = await mutate('sso_create', async () => {\n          try {\n            return await client.sso.external.createConnection({\n              display_name: displayName,\n              external_organization_id: sourceOrgId,\n              external_connection_id: sourceConnectionId,\n            });\n          } catch (e) {\n            const message = extractErrorMessage(e);\n            openToast({ text: message || 'Unable to create connection', type: 'error' });\n          }\n        });\n\n        if (response) {\n          await revalidateConnectionList();\n          navigate({\n            screen: 'connectionsList',\n          });\n        }\n      } else {\n        if (!isNewConnectionReadyToCreate) {\n          return;\n        }\n\n        const { idpName, type } = idpOptions[idp];\n\n        const response = await mutate('sso_create', async () => {\n          const params = { display_name: displayName, identity_provider: idpName };\n\n          try {\n            if (type === 'oidc') {\n              return await client.sso.oidc.createConnection(params);\n            }\n            if (type === 'saml') {\n              return await client.sso.saml.createConnection(params);\n            }\n          } catch (e) {\n            const message = extractErrorMessage(e);\n            openToast({ text: message || 'Unable to create connection', type: 'error' });\n          }\n        });\n\n        if (response) {\n          await revalidateConnectionList();\n          navigate({\n            screen: 'newConnectionConfigure',\n            params: {\n              connection: {\n                ...response.connection,\n                connectionType: type,\n              } as SAMLTaggedConnection | OIDCTaggedConnection,\n            },\n          });\n        }\n      }\n    },\n    [\n      isExternalConnection,\n      isExternalConnectionReadyToCreate,\n      mutate,\n      client.sso.external,\n      client.sso.oidc,\n      client.sso.saml,\n      displayName,\n      sourceOrgId,\n      sourceConnectionId,\n      openToast,\n      revalidateConnectionList,\n      navigate,\n      isNewConnectionReadyToCreate,\n      idp,\n    ],\n  );\n\n  return (\n    <form onSubmit={handleSubmit}>\n      <FlexBox flexDirection=\"column\" gap={3}>\n        <Button\n          variant=\"ghost\"\n          compact\n          onClick={() => {\n            navigate({ screen: 'connectionsList' });\n          }}\n          startIcon={<ChevronLeft />}\n        >\n          Back to all SSO connections\n        </Button>\n        <Typography variant=\"h2\">New SSO Connection</Typography>\n        <FlexBox flexDirection=\"column\" gap={1}>\n          <Typography>Set a display name for your connection.</Typography>\n          <Input\n            placeholder=\"Text\"\n            value={displayName}\n            onChange={setDisplayName}\n            caption=\"You will be able to edit this again in the future.\"\n          />\n        </FlexBox>\n        <FlexBox flexDirection=\"column\" gap={1}>\n          {isExternalConnection ? (\n            <>\n              <Typography>\n                Add an existing SSO connection from another organization by inputting the Source Organization ID and\n                desired SSO Connection ID.\n              </Typography>\n              <FlexBox gap={1}>\n                <Input\n                  label=\"Source Organization ID\"\n                  placeholder=\"organization-live-12345678-9012-3456-7890-123456789012\"\n                  value={sourceOrgId}\n                  onChange={setSourceOrgId}\n                />\n                <Input\n                  label=\"Source Connection ID\"\n                  placeholder=\"abcd-connection-live-12345678-9012-3456-7890-123456789012\"\n                  value={sourceConnectionId}\n                  onChange={setSourceConnectionId}\n                />\n              </FlexBox>\n            </>\n          ) : (\n            <>\n              <Typography>\n                Select your identity provider or choose to configure a custom SAML / OIDC connection.\n              </Typography>\n              <Select placeholder=\"Select\" selectItems={idpSelectItems} value={idp} onChange={setIdp} />\n            </>\n          )}\n          <Button variant=\"ghost\" onClick={() => setIsExternalConnection(!isExternalConnection)}>\n            {isExternalConnection ? 'Add connection by IdP' : 'Add an external connection'}\n          </Button>\n        </FlexBox>\n        <Typography>\n          Once you click “Create” the SSO connection will be created. If you need to change the connection type after\n          this, you will need to start over.\n        </Typography>\n        <FlexBox justifyContent=\"space-between\">\n          <Button\n            variant=\"ghost\"\n            onClick={() => {\n              navigate({ screen: 'connectionsList' });\n            }}\n          >\n            Cancel\n          </Button>\n          <Button type=\"submit\" disabled={!isReadyToCreate}>\n            Create\n          </Button>\n        </FlexBox>\n      </FlexBox>\n    </form>\n  );\n};\n"],"names":["SSONewConnectionScreen","navigate","useSsoRouterController","openToast","useToast","displayName","setDisplayName","useState","isExternalConnection","setIsExternalConnection","idp","setIdp","sourceOrgId","setSourceOrgId","sourceConnectionId","setSourceConnectionId","isNewConnectionReadyToCreate","isExternalConnectionReadyToCreate","isReadyToCreate","client","useStytchClient","mutate","useSWRConfig","revalidateConnectionList","useRevalidateConnectionList","handleSubmit","useCallback","e","preventDefault","response","sso","external","createConnection","display_name","external_organization_id","external_connection_id","message","extractErrorMessage","text","type","screen","idpName","idpOptions","params","identity_provider","oidc","saml","connection","connectionType","React","form","onSubmit","FlexBox","flexDirection","gap","Button","variant","compact","onClick","startIcon","ChevronLeft","Typography","Input","placeholder","value","onChange","caption","label","Select","selectItems","idpSelectItems","justifyContent","disabled"],"mappings":"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"}