import { Avatar, AvatarImage, Box, Button, Text } from 'folds'; import { IIdentityProvider, SSOAction, createClient } from 'matrix-js-sdk'; import React, { useMemo } from 'react'; import { useAutoDiscoveryInfo } from '../../hooks/useAutoDiscoveryInfo'; type SSOLoginProps = { providers?: IIdentityProvider[]; redirectUrl: string; action?: SSOAction; saveScreenSpace?: boolean; }; export function SSOLogin({ providers, redirectUrl, action, saveScreenSpace }: SSOLoginProps) { const discovery = useAutoDiscoveryInfo(); const baseUrl = discovery['m.homeserver'].base_url; const mx = useMemo(() => createClient({ baseUrl }), [baseUrl]); const getSSOIdUrl = (ssoId?: string): string => mx.getSsoLoginUrl(redirectUrl, 'sso', ssoId, action); const withoutIcon = providers ? providers.find( (provider) => !provider.icon || !mx.mxcUrlToHttp(provider.icon, 96, 96, 'crop', false) ) : true; const renderAsIcons = withoutIcon ? false : saveScreenSpace && providers && providers.length > 2; return ( {providers ? ( providers.map((provider) => { const { id, name, icon } = provider; const iconUrl = icon && mx.mxcUrlToHttp(icon, 96, 96, 'crop', false); const buttonTitle = `Continue with ${name}`; if (renderAsIcons) { return ( ); } return ( ); }) ) : ( )} ); }