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';