mirror of
https://github.com/supabase/supabase.git
synced 2026-09-22 13:37:53 +08:00
ee3f78ff37
## What kind of change does this PR introduce? Bug fix. Resolves [FE-4264](https://linear.app/supabase/issue/FE-4264/hide-social-sign-in-options-after-email-sign-up). ## What is the current behavior? After a successful email and password sign-up, GitHub and ChatGPT sign-in options remain visible even though they do not confirm or link the new account. The success state is presented in a bespoke `Alert` with verbose copywriting. ## What is the new behavior? The social sign-in options and divider are hidden after email sign-up succeeds. The email confirmation message and link back to sign in remain available. The success state is presented in a standard `success` `Admonition` with clearer copywriting. | Before | After | | --- | --- | | <img width="2576" height="1700" alt="CleanShot 2026-08-26 at 13 47 41@2x" src="https://github.com/user-attachments/assets/a29547b9-7949-4ff3-a1d4-db8bfb3beee6" /> | <img width="2576" height="1704" alt="CleanShot 2026-08-26 at 13 47 00@2x" src="https://github.com/user-attachments/assets/4f778571-74fe-4c20-b76e-a87e0391e4a9" /> | ## To test 1. Open `/sign-up` and complete an email and password sign-up. 2. Confirm the success message is shown without the GitHub, ChatGPT, or `or` options. 3. Open `/sign-in` and confirm GitHub and ChatGPT remain available there. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Added shared provider options across sign-in and sign-up flows, including custom providers, external identity providers, and optional SSO. - Added an SSO sign-in button that preserves the current page context. - After successful email signup, alternative signup options are hidden and confirmation messaging appears. - **Bug Fixes** - Improved signup form spacing, submission state, and animated password guidance. - **Tests** - Added coverage for signup behavior across standard and focused-provider configurations. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: Joshen Lim <joshenlimek@gmail.com>
81 lines
2.9 KiB
TypeScript
81 lines
2.9 KiB
TypeScript
import Link from 'next/link'
|
|
import { useState } from 'react'
|
|
import { Button, cn } from 'ui'
|
|
|
|
import { SignInOptions } from '@/components/interfaces/SignIn/SignInOptions'
|
|
import { SignInWithExternalProvider } from '@/components/interfaces/SignIn/SignInWithExternalProvider'
|
|
import { SignUpForm } from '@/components/interfaces/SignIn/SignUpForm'
|
|
import { SignInLayout } from '@/components/layouts/SignInLayout/SignInLayout'
|
|
import { UnknownInterface } from '@/components/ui/UnknownInterface'
|
|
import { useEnabledIdentityProviders } from '@/hooks/misc/useEnabledIdentityProviders'
|
|
import { useInboundBranding } from '@/hooks/misc/useInboundBranding'
|
|
import { useIsFeatureEnabled } from '@/hooks/misc/useIsFeatureEnabled'
|
|
import type { NextPageWithLayout } from '@/types'
|
|
|
|
const SignUpPage: NextPageWithLayout = () => {
|
|
const [showOtherOptions, setShowOtherOptions] = useState(false)
|
|
const [isSubmitted, setIsSubmitted] = useState(false)
|
|
const { dashboardAuthSignUp: signUpEnabled } = useIsFeatureEnabled(['dashboard_auth:sign_up'])
|
|
|
|
const { focusProvider } = useInboundBranding('sign-up')
|
|
const signUpProviders = useEnabledIdentityProviders().filter((provider) => provider.showOnSignUp)
|
|
|
|
if (!signUpEnabled) {
|
|
return <UnknownInterface fullHeight={false} urlBack="/sign-in" />
|
|
}
|
|
|
|
return (
|
|
<>
|
|
{focusProvider ? (
|
|
<div className="flex flex-col gap-5">
|
|
{!isSubmitted && <SignInWithExternalProvider provider={focusProvider} />}
|
|
{showOtherOptions ? (
|
|
<>
|
|
{!isSubmitted && (
|
|
<SignInOptions
|
|
providers={signUpProviders.filter((provider) => provider.id !== focusProvider.id)}
|
|
dividerBgClass="bg-surface-100"
|
|
/>
|
|
)}
|
|
<SignUpForm onSuccess={() => setIsSubmitted(true)} />
|
|
</>
|
|
) : (
|
|
<Button
|
|
block
|
|
variant="text"
|
|
size="large"
|
|
className="-mt-2 text-foreground-light"
|
|
onClick={() => setShowOtherOptions(true)}
|
|
>
|
|
Show other options
|
|
</Button>
|
|
)}
|
|
</div>
|
|
) : (
|
|
<div className="flex flex-col gap-5">
|
|
{!isSubmitted && <SignInOptions providers={signUpProviders} />}
|
|
<SignUpForm onSuccess={() => setIsSubmitted(true)} />
|
|
</div>
|
|
)}
|
|
|
|
<div className={cn('self-center text-center text-sm mb-8', isSubmitted ? 'mt-2' : 'mt-8')}>
|
|
<span className="text-foreground-light">Have an account?</span>{' '}
|
|
<Link
|
|
href="/sign-in"
|
|
className="underline text-foreground hover:text-foreground-light transition"
|
|
>
|
|
Sign in
|
|
</Link>
|
|
</div>
|
|
</>
|
|
)
|
|
}
|
|
|
|
SignUpPage.getLayout = (page) => (
|
|
<SignInLayout heading="Get started" subheading="Create a new account" inboundFlow="sign-up">
|
|
{page}
|
|
</SignInLayout>
|
|
)
|
|
|
|
export default SignUpPage
|