--- template/app/src/landing-page/components/Examples/Auth.tsx +++ opensaas-sh/app/src/landing-page/components/Examples/Auth.tsx @@ -0,0 +1,130 @@ +import { useState } from 'react'; +import { FaDiscord, FaGithub, FaGoogle, FaSlack } from 'react-icons/fa'; +import { Button } from '../../../components/ui/button'; +import { Card, CardContent, CardHeader } from '../../../components/ui/card'; +import { Input } from '../../../components/ui/input'; +import { DocsUrl } from '../../../shared/common'; +import HighlightedFeature from '../HighlightedFeature'; + +const SupportedAuthProviders = ['google', 'github', 'discord', 'slack'] as const; +type AuthProvider = (typeof SupportedAuthProviders)[number]; + +const providers: { name: AuthProvider; icon: React.ComponentType<{ className?: string }> }[] = [ + { + name: 'google', + icon: FaGoogle, + }, + { + name: 'github', + icon: FaGithub, + }, + { + name: 'discord', + icon: FaDiscord, + }, + { + name: 'slack', + icon: FaSlack, + }, +]; + +export default function Auth() { + const [selectedProviders, setSelectedProviders] = useState(['google', 'github']); + + const toggleProvider = (provider: AuthProvider) => { + setSelectedProviders((prev) => + prev.includes(provider) ? prev.filter((p) => p !== provider) : [...prev, provider] + ); + }; + + return ( + } + highlightedComponent={} + tilt='left' + className='h-[400px]' + /> + ); +} + +const AuthPlayground = ({ + toggleProvider, + selectedProviders, +}: { + toggleProvider: (provider: AuthProvider) => void; + selectedProviders: AuthProvider[]; +}) => { + return ( +
+

Pre-configured full-stack Auth that you own.

+
+ {providers.map((provider) => { + const IconComponent = provider.icon; + return ( + + ); + })} +
+
+ ); +}; + +const Divider = () => { + return ( +
+
+

Or continue with

+
+
+ ); +}; + +const AuthExample = ({ selectedProviders }: { selectedProviders: AuthProvider[] }) => { + return ( + + +

Log in to your account

+
+ +
+
+ {selectedProviders.length > 0 ?

Log in with

: null} +
+ {selectedProviders.map((provider) => { + const providerData = providers.find((p) => p.name === provider); + const IconComponent = providerData?.icon; + return ( + + + + ); + })} +
+
+ {selectedProviders.length > 0 ? : null} +
+ + + +
+
+
+
+ ); +};