diff --git a/packages/console/src/pages/EnterpriseSso/SsoConnectorLogo/index.tsx b/packages/console/src/pages/EnterpriseSso/SsoConnectorLogo/index.tsx index c60b81ccb..bd19a0a16 100644 --- a/packages/console/src/pages/EnterpriseSso/SsoConnectorLogo/index.tsx +++ b/packages/console/src/pages/EnterpriseSso/SsoConnectorLogo/index.tsx @@ -13,15 +13,22 @@ type Props = { data: Pick; }; +/** + * Prioritize `branding` configuration: + * - Even if it's in light mode and have `branding.darkLogo` configured, use `branding.darkLogo`. + */ const pickLogoForCurrentTheme = ( isDarkMode: boolean, { logo, logoDark }: { logo: string; logoDark: string }, branding: SsoConnectorWithProviderConfig['branding'] ): string => { - if (isDarkMode) { - return branding.darkLogo ?? logoDark; - } - return branding.logo ?? logo; + // Need to use `||` here since `??` operator can not avoid empty strings. + // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing + const configuredLogo = isDarkMode ? branding.darkLogo : branding.logo || branding.darkLogo; + const builtInLogo = isDarkMode ? logoDark : logo || logoDark; + + // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing + return configuredLogo || builtInLogo; }; function SsoConnectorLogo({ className, containerClassName, data }: Props) { diff --git a/packages/console/src/pages/EnterpriseSsoDetails/Settings/index.tsx b/packages/console/src/pages/EnterpriseSsoDetails/Settings/index.tsx index 063c5b8e5..f35d55aa5 100644 --- a/packages/console/src/pages/EnterpriseSsoDetails/Settings/index.tsx +++ b/packages/console/src/pages/EnterpriseSsoDetails/Settings/index.tsx @@ -6,6 +6,7 @@ import { } from '@logto/schemas'; import { generateStandardShortId } from '@logto/shared/universal'; import { conditional, conditionalArray, conditionalString } from '@silverhand/essentials'; +import cleanDeep from 'clean-deep'; import { t as globalTranslate } from 'i18next'; import { HTTPError } from 'ky'; import { useForm, Controller, FormProvider } from 'react-hook-form'; @@ -107,7 +108,10 @@ function Settings({ data, isDeleted, onUpdated }: Props) { try { const updatedSsoConnector = await api - .patch(`api/sso-connectors/${data.id}`, { json: formDataToSsoConnectorParser(formData) }) + // Only keep non-empty values since PATCH operation performs a merge scheme. + .patch(`api/sso-connectors/${data.id}`, { + json: cleanDeep(formDataToSsoConnectorParser(formData)), + }) .json(); reset(dataToFormParser(updatedSsoConnector));