diff --git a/apps/console/src/pages/iam/auth/sign-in/SignInPage.tsx b/apps/console/src/pages/iam/auth/sign-in/SignInPage.tsx index 70e939ac3..b932b8b54 100644 --- a/apps/console/src/pages/iam/auth/sign-in/SignInPage.tsx +++ b/apps/console/src/pages/iam/auth/sign-in/SignInPage.tsx @@ -6,14 +6,14 @@ import { graphql } from "relay-runtime"; import type { SignInPageQuery } from "#/__generated__/iam/SignInPageQuery.graphql"; import { useSafeContinueUrl } from "#/hooks/useSafeContinueUrl"; + import { Divider } from "./_components/Divider"; import { OIDCButtons } from "./_components/OIDCButtons"; const signInPageQuery = graphql` query SignInPageQuery { oidcProviders { - name - loginURL + ...OIDCButtonsFragment } } `; diff --git a/apps/console/src/pages/iam/auth/sign-in/_components/OIDCButtons.tsx b/apps/console/src/pages/iam/auth/sign-in/_components/OIDCButtons.tsx index 9ca5eae2b..f1b16018a 100644 --- a/apps/console/src/pages/iam/auth/sign-in/_components/OIDCButtons.tsx +++ b/apps/console/src/pages/iam/auth/sign-in/_components/OIDCButtons.tsx @@ -1,6 +1,17 @@ import { useTranslate } from "@probo/i18n"; import { Button, Google, Microsoft } from "@probo/ui"; import type { ComponentProps } from "react"; +import { useFragment } from "react-relay"; +import { graphql } from "relay-runtime"; + +import type { OIDCButtonsFragment$key } from "#/__generated__/iam/OIDCButtonsFragment.graphql"; + +const fragment = graphql` + fragment OIDCButtonsFragment on OIDCProviderInfo { + name + loginURL + } +`; const providerIcons: Record< string, @@ -14,38 +25,52 @@ export function OIDCButtons({ providers, safeContinueUrl, }: { - providers: ReadonlyArray<{ readonly name: string; readonly loginURL: string }>; + providers: ReadonlyArray; safeContinueUrl: URL; }) { const { __ } = useTranslate(); - if (providers.length === 0) { - return null; - } - return ( <> - {providers.map((provider) => { - const Icon = providerIcons[provider.name]; - return ( - - ); - })} + {providers.map((providerRef, index) => ( + + ))} ); } + +function OIDCButton({ + providerRef, + safeContinueUrl, + __, +}: { + providerRef: OIDCButtonsFragment$key; + safeContinueUrl: URL; + __: (s: string) => string; +}) { + const provider = useFragment(fragment, providerRef); + const Icon = providerIcons[provider.name]; + + return ( + + ); +}