From 29ba0d881d5035d71a1cf33b49e0df14c391d7b5 Mon Sep 17 00:00:00 2001 From: Gib Date: Tue, 24 Jun 2025 16:59:43 -0500 Subject: [PATCH] Started working on Sign in buttons --- .../default/auth/buttons/client/SignIn.tsx | 15 +++++++ .../auth/buttons/client/SignInWithApple.tsx | 6 +++ src/components/default/auth/index.tsx | 0 .../default/forms/StatusMessage.tsx | 28 +++++++++++++ src/components/default/forms/SubmitButton.tsx | 40 +++++++++++++++++++ src/components/default/forms/index.tsx | 2 + 6 files changed, 91 insertions(+) create mode 100644 src/components/default/auth/buttons/client/SignIn.tsx create mode 100644 src/components/default/auth/buttons/client/SignInWithApple.tsx create mode 100644 src/components/default/auth/index.tsx create mode 100644 src/components/default/forms/StatusMessage.tsx create mode 100644 src/components/default/forms/SubmitButton.tsx create mode 100644 src/components/default/forms/index.tsx diff --git a/src/components/default/auth/buttons/client/SignIn.tsx b/src/components/default/auth/buttons/client/SignIn.tsx new file mode 100644 index 0000000..f28297d --- /dev/null +++ b/src/components/default/auth/buttons/client/SignIn.tsx @@ -0,0 +1,15 @@ +'use client'; +import Link from 'next/link'; +import { Button, type buttonVariants } from '@/components/ui'; +import { type ComponentProps } from 'react'; +import { type VariantProps } from 'class-variance-authority'; + +type SignInProps = ComponentProps<'button'> & VariantProps; + +export const SignInButton = (props: SignInProps) => { + return ( + + ); +}; diff --git a/src/components/default/auth/buttons/client/SignInWithApple.tsx b/src/components/default/auth/buttons/client/SignInWithApple.tsx new file mode 100644 index 0000000..4d45f0c --- /dev/null +++ b/src/components/default/auth/buttons/client/SignInWithApple.tsx @@ -0,0 +1,6 @@ +'use client'; +import { signInWithApple, getProfile, updateProfile } from '@/lib/queries'; +import { StatusMessage, SubmitButton } from '@/components/default/forms'; +import { useAuth } from '@/lib/hooks/context'; +import { useRouter } from 'next/navigation'; +import { useState } from 'react'; diff --git a/src/components/default/auth/index.tsx b/src/components/default/auth/index.tsx new file mode 100644 index 0000000..e69de29 diff --git a/src/components/default/forms/StatusMessage.tsx b/src/components/default/forms/StatusMessage.tsx new file mode 100644 index 0000000..30fab4f --- /dev/null +++ b/src/components/default/forms/StatusMessage.tsx @@ -0,0 +1,28 @@ +type Message = +| { success: string} +| { error: string} +| { message: string} + +export const StatusMessage = (message: Message) => { + return ( +
+ {'success' in message && ( +
+ {message.success} +
+ )} + {'error' in message && ( +
+ {message.error} +
+ )} + {'message' in message && ( +
+ {message.message} +
+ )} +
+ ); +}; diff --git a/src/components/default/forms/SubmitButton.tsx b/src/components/default/forms/SubmitButton.tsx new file mode 100644 index 0000000..ab01a0e --- /dev/null +++ b/src/components/default/forms/SubmitButton.tsx @@ -0,0 +1,40 @@ +'use client'; +import { Button, type buttonVariants } from '@/components/ui'; +import { type ComponentProps } from 'react'; +import { type VariantProps } from 'class-variance-authority'; +import { useFormStatus } from 'react-dom'; +import { Loader2 } from 'lucide-react'; + +type SubmitButtonProps = ComponentProps<'button'> & +VariantProps & { + pendingText?: string; + loaderClassName?: ComponentProps<'div'>['className']; + textClassName?: ComponentProps<'p'>['className']; +}; + +export const SubmitButton = ({ + children, + pendingText = 'Submitting...', + loaderClassName = 'mr-2 h-4 w-4 animate-spin', + textClassName = 'text-sm font-medium', + ...props +}: SubmitButtonProps) => { + const { pending } = useFormStatus(); + return ( + + ); +}; diff --git a/src/components/default/forms/index.tsx b/src/components/default/forms/index.tsx new file mode 100644 index 0000000..e1e1b64 --- /dev/null +++ b/src/components/default/forms/index.tsx @@ -0,0 +1,2 @@ +export { StatusMessage } from './StatusMessage'; +export { SubmitButton } from './SubmitButton';