From bd2e5bf4b87c01661c6ae71e8d1b3cae051a58e6 Mon Sep 17 00:00:00 2001 From: Darcy Ye Date: Tue, 28 Nov 2023 11:51:27 +0800 Subject: [PATCH] refactor(console,phrases): remove SSO guide on creation and switch tab order (#4972) --- packages/console/src/consts/page-tabs.ts | 2 +- .../src/containers/ConsoleContent/index.tsx | 3 +- .../EnterpriseSso/Guide/index.module.scss | 135 ------------ .../src/pages/EnterpriseSso/Guide/index.tsx | 193 ------------------ .../console/src/pages/EnterpriseSso/index.tsx | 61 ++---- .../Connection}/BasicInfo/index.module.scss | 0 .../Connection}/BasicInfo/index.tsx | 0 .../ParsedConfigPreview/index.module.scss | 0 .../ParsedConfigPreview/index.tsx | 0 .../OidcMetadataForm/index.module.scss | 0 .../Connection}/OidcMetadataForm/index.tsx | 30 +-- .../SamlAttributeMapping/index.module.scss | 0 .../SamlAttributeMapping/index.tsx | 8 +- .../ParsedConfigPreview/index.module.scss | 0 .../ParsedConfigPreview/index.tsx | 0 .../SwitchFormatButton/index.module.scss | 0 .../SwitchFormatButton/index.tsx | 0 .../SamlMetadataForm/index.module.scss | 0 .../Connection}/SamlMetadataForm/index.tsx | 37 +--- .../Connection}/SamlMetadataForm/utils.ts | 0 .../XmlFileReader/index.module.scss | 0 .../Connection}/XmlFileReader/index.tsx | 2 +- .../EnterpriseSsoDetails/Connection/index.tsx | 10 +- .../src/pages/EnterpriseSsoDetails/index.tsx | 30 +-- .../admin-console/enterprise-sso-details.ts | 2 +- .../admin-console/enterprise-sso-details.ts | 2 +- .../admin-console/enterprise-sso-details.ts | 2 +- .../admin-console/enterprise-sso-details.ts | 2 +- .../admin-console/enterprise-sso-details.ts | 2 +- .../admin-console/enterprise-sso-details.ts | 2 +- .../admin-console/enterprise-sso-details.ts | 2 +- .../admin-console/enterprise-sso-details.ts | 2 +- .../admin-console/enterprise-sso-details.ts | 2 +- .../admin-console/enterprise-sso-details.ts | 2 +- .../admin-console/enterprise-sso-details.ts | 2 +- .../admin-console/enterprise-sso-details.ts | 2 +- .../admin-console/enterprise-sso-details.ts | 2 +- .../admin-console/enterprise-sso-details.ts | 2 +- .../admin-console/enterprise-sso-details.ts | 2 +- 39 files changed, 74 insertions(+), 467 deletions(-) delete mode 100644 packages/console/src/pages/EnterpriseSso/Guide/index.module.scss delete mode 100644 packages/console/src/pages/EnterpriseSso/Guide/index.tsx rename packages/console/src/pages/{EnterpriseSso/Guide => EnterpriseSsoDetails/Connection}/BasicInfo/index.module.scss (100%) rename packages/console/src/pages/{EnterpriseSso/Guide => EnterpriseSsoDetails/Connection}/BasicInfo/index.tsx (100%) rename packages/console/src/pages/{EnterpriseSso/Guide => EnterpriseSsoDetails/Connection}/OidcMetadataForm/ParsedConfigPreview/index.module.scss (100%) rename packages/console/src/pages/{EnterpriseSso/Guide => EnterpriseSsoDetails/Connection}/OidcMetadataForm/ParsedConfigPreview/index.tsx (100%) rename packages/console/src/pages/{EnterpriseSso/Guide => EnterpriseSsoDetails/Connection}/OidcMetadataForm/index.module.scss (100%) rename packages/console/src/pages/{EnterpriseSso/Guide => EnterpriseSsoDetails/Connection}/OidcMetadataForm/index.tsx (73%) rename packages/console/src/pages/{EnterpriseSso/Guide => EnterpriseSsoDetails/Connection}/SamlAttributeMapping/index.module.scss (100%) rename packages/console/src/pages/{EnterpriseSso/Guide => EnterpriseSsoDetails/Connection}/SamlAttributeMapping/index.tsx (90%) rename packages/console/src/pages/{EnterpriseSso/Guide => EnterpriseSsoDetails/Connection}/SamlMetadataForm/ParsedConfigPreview/index.module.scss (100%) rename packages/console/src/pages/{EnterpriseSso/Guide => EnterpriseSsoDetails/Connection}/SamlMetadataForm/ParsedConfigPreview/index.tsx (100%) rename packages/console/src/pages/{EnterpriseSso/Guide => EnterpriseSsoDetails/Connection}/SamlMetadataForm/SwitchFormatButton/index.module.scss (100%) rename packages/console/src/pages/{EnterpriseSso/Guide => EnterpriseSsoDetails/Connection}/SamlMetadataForm/SwitchFormatButton/index.tsx (100%) rename packages/console/src/pages/{EnterpriseSso/Guide => EnterpriseSsoDetails/Connection}/SamlMetadataForm/index.module.scss (100%) rename packages/console/src/pages/{EnterpriseSso/Guide => EnterpriseSsoDetails/Connection}/SamlMetadataForm/index.tsx (84%) rename packages/console/src/pages/{EnterpriseSso/Guide => EnterpriseSsoDetails/Connection}/SamlMetadataForm/utils.ts (100%) rename packages/console/src/pages/{EnterpriseSso/Guide => EnterpriseSsoDetails/Connection}/XmlFileReader/index.module.scss (100%) rename packages/console/src/pages/{EnterpriseSso/Guide => EnterpriseSsoDetails/Connection}/XmlFileReader/index.tsx (98%) diff --git a/packages/console/src/consts/page-tabs.ts b/packages/console/src/consts/page-tabs.ts index d788f1aae..912bfd595 100644 --- a/packages/console/src/consts/page-tabs.ts +++ b/packages/console/src/consts/page-tabs.ts @@ -42,6 +42,6 @@ export enum TenantSettingsTabs { } export enum EnterpriseSsoDetailsTabs { - Settings = 'settings', Connection = 'connection', + Experience = 'experience', } diff --git a/packages/console/src/containers/ConsoleContent/index.tsx b/packages/console/src/containers/ConsoleContent/index.tsx index dc407ae11..fda835b27 100644 --- a/packages/console/src/containers/ConsoleContent/index.tsx +++ b/packages/console/src/containers/ConsoleContent/index.tsx @@ -121,11 +121,10 @@ function ConsoleContent() { } /> } /> - } /> } + element={} /> } /> diff --git a/packages/console/src/pages/EnterpriseSso/Guide/index.module.scss b/packages/console/src/pages/EnterpriseSso/Guide/index.module.scss deleted file mode 100644 index 3c2a40f11..000000000 --- a/packages/console/src/pages/EnterpriseSso/Guide/index.module.scss +++ /dev/null @@ -1,135 +0,0 @@ -@use '@/scss/underscore' as _; - -.samlMetadataForm { - > div:not(:first-child) { - margin-top: _.unit(6); - } -} - -.container { - display: flex; - flex-direction: column; - background-color: var(--color-base); - height: 100vh; - overflow-x: auto; - - .header { - display: flex; - align-items: center; - background: none; - height: 64px; - padding: 0 _.unit(21) 0 _.unit(2); - - button { - margin-left: _.unit(4); - } - - .separator { - @include _.vertical-bar; - height: 20px; - margin: 0 _.unit(5) 0 _.unit(4); - } - - .closeIcon { - color: var(--color-text-secondary); - } - } - - .content { - flex: 1; - display: flex; - overflow: auto; - justify-content: center; - min-width: min-content; - padding: _.unit(2) _.unit(6) _.unit(6); - - > * { - flex: 1; - max-width: 800px; - min-width: 400px; - } - - .readme { - display: flex; - flex-direction: column; - background-color: var(--color-layer-1); - border: 1.5px solid var(--color-focused-variant); - border-radius: 16px; - margin: 0 _.unit(6) 0 0; - overflow-y: auto; - position: sticky; - top: 0; - - .readmeTitle { - font: var(--font-title-2); - padding: _.unit(5) _.unit(6) _.unit(4); - border-bottom: 1px solid var(--color-focused-variant); - } - - .readmeContent { - flex: 1; - padding: 0 _.unit(6) _.unit(4); - - h2 { - color: var(--color-text); - } - - h3 { - color: var(--color-text-secondary); - } - } - } - - .setup { - padding-bottom: _.unit(6); - - .block { - background-color: var(--color-layer-1); - border-radius: 16px; - padding: 0 _.unit(6) _.unit(6); - margin-bottom: _.unit(4); - - .blockTitle { - font: var(--font-title-2); - padding: _.unit(5) 0 _.unit(6); - display: flex; - flex-direction: column; - gap: _.unit(2); - - .numberedTitle { - display: flex; - align-items: center; - flex-direction: row; - gap: _.unit(4); - } - - .number { - width: 28px; - height: 28px; - border-radius: 50%; - background-color: var(--color-focused-variant); - color: var(--color-primary); - font: var(--font-title-2); - text-align: center; - line-height: 28px; - } - - .blockSubtitle { - font: var(--font-body-2); - color: var(--color-text-secondary); - } - } - } - - .footer { - padding-bottom: _.unit(10); - display: flex; - justify-content: right; - } - } - - form + div { - margin-top: _.unit(6); - } - } -} diff --git a/packages/console/src/pages/EnterpriseSso/Guide/index.tsx b/packages/console/src/pages/EnterpriseSso/Guide/index.tsx deleted file mode 100644 index 8b8477a3b..000000000 --- a/packages/console/src/pages/EnterpriseSso/Guide/index.tsx +++ /dev/null @@ -1,193 +0,0 @@ -import { type AdminConsoleKey } from '@logto/phrases'; -import { SsoProviderName, type SsoConnectorWithProviderConfig } from '@logto/schemas'; -import cleanDeep from 'clean-deep'; -import type { ReactNode } from 'react'; -import { FormProvider, useForm } from 'react-hook-form'; -import Modal from 'react-modal'; - -import Close from '@/assets/icons/close.svg'; -import Markdown from '@/components/Markdown'; -import Button from '@/ds-components/Button'; -import CardTitle from '@/ds-components/CardTitle'; -import DangerousRaw from '@/ds-components/DangerousRaw'; -import DynamicT from '@/ds-components/DynamicT'; -import IconButton from '@/ds-components/IconButton'; -import OverlayScrollbar from '@/ds-components/OverlayScrollbar'; -import useApi from '@/hooks/use-api'; -import * as modalStyles from '@/scss/modal.module.scss'; -import { trySubmitSafe } from '@/utils/form'; - -import { splitMarkdownByTitle } from '../../Connectors/utils.js'; -import { type GuideFormType, type SsoConnectorWithProviderConfigWithGeneric } from '../types.js'; - -import BasicInfo from './BasicInfo'; -import OidcMetadataForm from './OidcMetadataForm'; -import SamlAttributeMapping from './SamlAttributeMapping'; -import SamlMetadataForm from './SamlMetadataForm'; -import * as styles from './index.module.scss'; - -type Props = { - isOpen: boolean; - connector: SsoConnectorWithProviderConfigWithGeneric; - onClose: (ssoConnectorId?: string) => void; -}; - -type GuideCardProps = { - cardOrder: number; - children: ReactNode; - title: AdminConsoleKey; - description: AdminConsoleKey; - className?: string; -}; - -function GuideCard({ cardOrder, title, description, children, className }: GuideCardProps) { - return ( -
-
-
-
{cardOrder}
- -
-
- -
-
-
{children}
-
- ); -} - -function Guide({ isOpen, connector, onClose }: Props) { - const { - id: ssoConnectorId, - connectorName: ssoConnectorName, - providerName, - providerConfig, - } = connector; - - const api = useApi(); - - const methods = useForm>(); - - const { - formState: { isSubmitting }, - handleSubmit, - } = methods; - - // TODO: @darcyYe Add SSO connector README. - const { title, content } = splitMarkdownByTitle( - '# SSO connector guide\n\nThis is a guide for Logto Enterprise SSO connector.' - ); - - const onSubmit = handleSubmit( - trySubmitSafe(async (formData) => { - if (isSubmitting) { - return; - } - - await api - .patch(`api/sso-connectors/${ssoConnectorId}/config`, { - json: cleanDeep(formData), - // Do not check whether the config is complete on guide page. - searchParams: new URLSearchParams({ partialValidateConfig: 'true' }), - }) - .json(); - - onClose(ssoConnectorId); - }) - ); - - return ( - { - onClose(); - }} - > -
-
- { - onClose(ssoConnectorId); - }} - > - - -
- {ssoConnectorName}} - subtitle="enterprise_sso.guide.subtitle" - /> -
-
- -
README: {title}
- {content} -
-
- -
- - - - {[ - SsoProviderName.OIDC, - SsoProviderName.GOOGLE_WORKSPACE, - SsoProviderName.OKTA, - ].includes(providerName) ? ( - - - - ) : ( - <> - - - - - - - - )} -
-
-
-
-
-
-
- - ); -} - -export default Guide; diff --git a/packages/console/src/pages/EnterpriseSso/index.tsx b/packages/console/src/pages/EnterpriseSso/index.tsx index ca16aabe1..2db6af91b 100644 --- a/packages/console/src/pages/EnterpriseSso/index.tsx +++ b/packages/console/src/pages/EnterpriseSso/index.tsx @@ -1,9 +1,8 @@ import { withAppInsights } from '@logto/app-insights/react'; import { type SsoConnectorWithProviderConfig, SsoProviderName } from '@logto/schemas'; import { conditional } from '@silverhand/essentials'; -import { useEffect, useState } from 'react'; import { useTranslation } from 'react-i18next'; -import { useLocation, useParams } from 'react-router-dom'; +import { useLocation } from 'react-router-dom'; import useSWR from 'swr'; import Plus from '@/assets/icons/plus.svg'; @@ -20,24 +19,19 @@ import useSearchParametersWatcher from '@/hooks/use-search-parameters-watcher'; import useTenantPathname from '@/hooks/use-tenant-pathname'; import { buildUrl } from '@/utils/url'; -import Guide from './Guide'; import SsoConnectorLogo from './SsoConnectorLogo'; import SsoCreationModal from './SsoCreationModal'; import * as styles from './index.module.scss'; -import { type SsoConnectorWithProviderConfigWithGeneric } from './types'; const pageSize = defaultPageSize; const enterpriseSsoPathname = '/enterprise-sso'; const createEnterpriseSsoPathname = `${enterpriseSsoPathname}/create`; const buildDetailsPathname = (id: string) => `${enterpriseSsoPathname}/${id}`; -const buildGuidePathname = (id: string) => `${buildDetailsPathname(id)}/guide`; function EnterpriseSsoConnectors() { const { pathname } = useLocation(); const { navigate } = useTenantPathname(); - const { ssoConnectorId: id } = useParams(); const { t } = useTranslation(undefined, { keyPrefix: 'admin_console' }); - const [connectorForGuide, setConnectorForGuide] = useState(); const [{ page }, updateSearchParameters] = useSearchParametersWatcher({ page: 1, }); @@ -54,15 +48,6 @@ function EnterpriseSsoConnectors() { const isLoading = !data && !error; const [ssoConnectors, totalCount] = data ?? []; - useEffect(() => { - const selectedSsoConnector = ssoConnectors?.find( - ({ id: ssoConnectorId }) => ssoConnectorId === id - ); - if (selectedSsoConnector) { - setConnectorForGuide(selectedSsoConnector); - } - }, [id, ssoConnectors]); - return ( mutate(undefined, true), }} widgets={ - <> - { - if (ssoConnector) { - await mutate([[...(ssoConnectors ?? []), ssoConnector], totalCount ?? 0 + 1]); - navigate(buildGuidePathname(ssoConnector.id)); - return; - } + { + if (ssoConnector) { + void mutate(); + navigate(buildDetailsPathname(ssoConnector.id)); + return; + } - navigate(enterpriseSsoPathname); - }} - /> - { - /** Add this filter to make TypeScript happy, if `connectorForGuide` does not exist, the route will not come to this path. */ - connectorForGuide && ( - - } - onClose={async (connectorId) => { - if (connectorId) { - navigate(buildDetailsPathname(connectorId), { replace: true }); - return; - } - - navigate(enterpriseSsoPathname); - }} - /> - ) - } - + navigate(enterpriseSsoPathname); + }} + /> } /> ); diff --git a/packages/console/src/pages/EnterpriseSso/Guide/BasicInfo/index.module.scss b/packages/console/src/pages/EnterpriseSsoDetails/Connection/BasicInfo/index.module.scss similarity index 100% rename from packages/console/src/pages/EnterpriseSso/Guide/BasicInfo/index.module.scss rename to packages/console/src/pages/EnterpriseSsoDetails/Connection/BasicInfo/index.module.scss diff --git a/packages/console/src/pages/EnterpriseSso/Guide/BasicInfo/index.tsx b/packages/console/src/pages/EnterpriseSsoDetails/Connection/BasicInfo/index.tsx similarity index 100% rename from packages/console/src/pages/EnterpriseSso/Guide/BasicInfo/index.tsx rename to packages/console/src/pages/EnterpriseSsoDetails/Connection/BasicInfo/index.tsx diff --git a/packages/console/src/pages/EnterpriseSso/Guide/OidcMetadataForm/ParsedConfigPreview/index.module.scss b/packages/console/src/pages/EnterpriseSsoDetails/Connection/OidcMetadataForm/ParsedConfigPreview/index.module.scss similarity index 100% rename from packages/console/src/pages/EnterpriseSso/Guide/OidcMetadataForm/ParsedConfigPreview/index.module.scss rename to packages/console/src/pages/EnterpriseSsoDetails/Connection/OidcMetadataForm/ParsedConfigPreview/index.module.scss diff --git a/packages/console/src/pages/EnterpriseSso/Guide/OidcMetadataForm/ParsedConfigPreview/index.tsx b/packages/console/src/pages/EnterpriseSsoDetails/Connection/OidcMetadataForm/ParsedConfigPreview/index.tsx similarity index 100% rename from packages/console/src/pages/EnterpriseSso/Guide/OidcMetadataForm/ParsedConfigPreview/index.tsx rename to packages/console/src/pages/EnterpriseSsoDetails/Connection/OidcMetadataForm/ParsedConfigPreview/index.tsx diff --git a/packages/console/src/pages/EnterpriseSso/Guide/OidcMetadataForm/index.module.scss b/packages/console/src/pages/EnterpriseSsoDetails/Connection/OidcMetadataForm/index.module.scss similarity index 100% rename from packages/console/src/pages/EnterpriseSso/Guide/OidcMetadataForm/index.module.scss rename to packages/console/src/pages/EnterpriseSsoDetails/Connection/OidcMetadataForm/index.module.scss diff --git a/packages/console/src/pages/EnterpriseSso/Guide/OidcMetadataForm/index.tsx b/packages/console/src/pages/EnterpriseSsoDetails/Connection/OidcMetadataForm/index.tsx similarity index 73% rename from packages/console/src/pages/EnterpriseSso/Guide/OidcMetadataForm/index.tsx rename to packages/console/src/pages/EnterpriseSsoDetails/Connection/OidcMetadataForm/index.tsx index dd9b3a2d5..338deff9b 100644 --- a/packages/console/src/pages/EnterpriseSso/Guide/OidcMetadataForm/index.tsx +++ b/packages/console/src/pages/EnterpriseSsoDetails/Connection/OidcMetadataForm/index.tsx @@ -16,50 +16,39 @@ import ParsedConfigPreview from './ParsedConfigPreview'; import * as styles from './index.module.scss'; type Props = { - isGuidePage?: boolean; providerConfig?: ParsedSsoIdentityProviderConfig; config?: SsoConnectorConfig; providerName: SsoProviderName; }; // Do not show inline notification and parsed config preview if it is on guide page. -function OidcMetadataForm({ isGuidePage, providerConfig, config, providerName }: Props) { +function OidcMetadataForm({ providerConfig, config, providerName }: Props) { const { t } = useTranslation(undefined, { keyPrefix: 'admin_console' }); const { register, formState: { errors }, } = useFormContext(); - const isFieldCheckRequired = !isGuidePage; const isConfigEmpty = !config || Object.keys(config).length === 0; return ( <> - {isFieldCheckRequired && !providerConfig && isConfigEmpty && ( + {!providerConfig && isConfigEmpty && ( {t('enterprise_sso_details.upload_oidc_idp_info_text')} )} - - + + - + {providerName === SsoProviderName.GOOGLE_WORKSPACE ? ( @@ -72,13 +61,12 @@ function OidcMetadataForm({ isGuidePage, providerConfig, config, providerName }: ) : ( )} - {isFieldCheckRequired && - providerConfig && + {providerConfig && (config?.issuer ?? providerName === SsoProviderName.GOOGLE_WORKSPACE) && ( (); // eslint-disable-next-line react-hooks/exhaustive-deps const attributeMapping = watch(primaryKey) ?? {}; diff --git a/packages/console/src/pages/EnterpriseSso/Guide/SamlMetadataForm/ParsedConfigPreview/index.module.scss b/packages/console/src/pages/EnterpriseSsoDetails/Connection/SamlMetadataForm/ParsedConfigPreview/index.module.scss similarity index 100% rename from packages/console/src/pages/EnterpriseSso/Guide/SamlMetadataForm/ParsedConfigPreview/index.module.scss rename to packages/console/src/pages/EnterpriseSsoDetails/Connection/SamlMetadataForm/ParsedConfigPreview/index.module.scss diff --git a/packages/console/src/pages/EnterpriseSso/Guide/SamlMetadataForm/ParsedConfigPreview/index.tsx b/packages/console/src/pages/EnterpriseSsoDetails/Connection/SamlMetadataForm/ParsedConfigPreview/index.tsx similarity index 100% rename from packages/console/src/pages/EnterpriseSso/Guide/SamlMetadataForm/ParsedConfigPreview/index.tsx rename to packages/console/src/pages/EnterpriseSsoDetails/Connection/SamlMetadataForm/ParsedConfigPreview/index.tsx diff --git a/packages/console/src/pages/EnterpriseSso/Guide/SamlMetadataForm/SwitchFormatButton/index.module.scss b/packages/console/src/pages/EnterpriseSsoDetails/Connection/SamlMetadataForm/SwitchFormatButton/index.module.scss similarity index 100% rename from packages/console/src/pages/EnterpriseSso/Guide/SamlMetadataForm/SwitchFormatButton/index.module.scss rename to packages/console/src/pages/EnterpriseSsoDetails/Connection/SamlMetadataForm/SwitchFormatButton/index.module.scss diff --git a/packages/console/src/pages/EnterpriseSso/Guide/SamlMetadataForm/SwitchFormatButton/index.tsx b/packages/console/src/pages/EnterpriseSsoDetails/Connection/SamlMetadataForm/SwitchFormatButton/index.tsx similarity index 100% rename from packages/console/src/pages/EnterpriseSso/Guide/SamlMetadataForm/SwitchFormatButton/index.tsx rename to packages/console/src/pages/EnterpriseSsoDetails/Connection/SamlMetadataForm/SwitchFormatButton/index.tsx diff --git a/packages/console/src/pages/EnterpriseSso/Guide/SamlMetadataForm/index.module.scss b/packages/console/src/pages/EnterpriseSsoDetails/Connection/SamlMetadataForm/index.module.scss similarity index 100% rename from packages/console/src/pages/EnterpriseSso/Guide/SamlMetadataForm/index.module.scss rename to packages/console/src/pages/EnterpriseSsoDetails/Connection/SamlMetadataForm/index.module.scss diff --git a/packages/console/src/pages/EnterpriseSso/Guide/SamlMetadataForm/index.tsx b/packages/console/src/pages/EnterpriseSsoDetails/Connection/SamlMetadataForm/index.tsx similarity index 84% rename from packages/console/src/pages/EnterpriseSso/Guide/SamlMetadataForm/index.tsx rename to packages/console/src/pages/EnterpriseSsoDetails/Connection/SamlMetadataForm/index.tsx index 6ef282333..d44482584 100644 --- a/packages/console/src/pages/EnterpriseSso/Guide/SamlMetadataForm/index.tsx +++ b/packages/console/src/pages/EnterpriseSsoDetails/Connection/SamlMetadataForm/index.tsx @@ -22,18 +22,15 @@ import * as styles from './index.module.scss'; type SamlMetadataFormFieldsProps = Pick & { identityProviderConfig?: ParsedSsoIdentityProviderConfig['identityProvider']; formFormat: FormFormat; - isFieldCheckRequired?: boolean; }; type SamlMetadataFormProps = { config?: SsoConnectorConfig; - isGuidePage?: boolean; providerConfig?: ParsedSsoIdentityProviderConfig; }; function SamlMetadataFormFields({ formFormat, - isFieldCheckRequired, identityProviderConfig, config, }: SamlMetadataFormFieldsProps) { @@ -48,30 +45,21 @@ function SamlMetadataFormFields({ case FormFormat.Manual: { return ( <> - + - + - +