From 68abae6730b7042c8f34a40dfdf2859505799ca4 Mon Sep 17 00:00:00 2001 From: Bryan Frimin Date: Mon, 23 Mar 2026 09:37:09 +0100 Subject: [PATCH] Use Relay fragment for OIDC buttons in ConnectPage Signed-off-by: Bryan Frimin --- apps/trust/src/pages/auth/ConnectPage.tsx | 74 +++++++++++++++-------- 1 file changed, 50 insertions(+), 24 deletions(-) diff --git a/apps/trust/src/pages/auth/ConnectPage.tsx b/apps/trust/src/pages/auth/ConnectPage.tsx index ccd785329..54ef9148d 100644 --- a/apps/trust/src/pages/auth/ConnectPage.tsx +++ b/apps/trust/src/pages/auth/ConnectPage.tsx @@ -5,6 +5,7 @@ import { Button, Field, Google, Microsoft, useToast } from "@probo/ui"; import { type ComponentProps, useEffect, useRef, useState } from "react"; import { type PreloadedQuery, + useFragment, useMutation, usePreloadedQuery, } from "react-relay"; @@ -16,6 +17,7 @@ import { useSafeContinueUrl } from "#/hooks/useSafeContinueUrl"; import { getPathPrefix } from "#/utils/pathPrefix"; import type { ConnectPageMutation, SendMagicLinkInput } from "./__generated__/ConnectPageMutation.graphql"; +import type { ConnectPageOIDCButtonFragment$key } from "./__generated__/ConnectPageOIDCButtonFragment.graphql"; import type { ConnectPageQuery } from "./__generated__/ConnectPageQuery.graphql"; export const connectPageQuery = graphql` @@ -26,8 +28,7 @@ export const connectPageQuery = graphql` } } oidcProviders { - name - loginURL + ...ConnectPageOIDCButtonFragment } } `; @@ -40,6 +41,13 @@ const sendMagicLinkMutation = graphql` } `; +const oidcButtonFragment = graphql` + fragment ConnectPageOIDCButtonFragment on OIDCProviderInfo { + name + loginURL + } +`; + const providerIcons: Record< string, (props: ComponentProps<"svg">) => React.ReactNode @@ -71,7 +79,7 @@ function OIDCButtons({ providers, safeContinueUrl, }: { - providers: ReadonlyArray<{ readonly name: string; readonly loginURL: string }>; + providers: ReadonlyArray; safeContinueUrl: URL; }) { const { __ } = useTranslate(); @@ -82,32 +90,50 @@ function OIDCButtons({ return ( <> - {providers.map((provider) => { - const Icon = providerIcons[provider.name]; - return ( - - ); - })} + {providers.map((providerRef, index) => ( + + ))} {__("Or")} ); } +function OIDCButton({ + providerRef, + safeContinueUrl, + __, +}: { + providerRef: ConnectPageOIDCButtonFragment$key; + safeContinueUrl: URL; + __: (s: string) => string; +}) { + const provider = useFragment(oidcButtonFragment, providerRef); + const Icon = providerIcons[provider.name]; + + return ( + + ); +} + export function ConnectPage(props: { queryRef: PreloadedQuery; }) {