Allow users to sign in from /account
SQ
This commit is contained in:
		
							parent
							
								
									cecccbe94d
								
							
						
					
					
						commit
						e9c183a493
					
				|  | @ -65,6 +65,7 @@ export function listenForLogin(onUser: (_user: User | null) => void) { | ||||||
|     } else { |     } else { | ||||||
|       // User logged out; reset to null
 |       // User logged out; reset to null
 | ||||||
|       onUser(null) |       onUser(null) | ||||||
|  |       localStorage.removeItem(CACHED_USER_KEY) | ||||||
|     } |     } | ||||||
|   }) |   }) | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -1,5 +1,4 @@ | ||||||
| import { useRouter } from 'next/router' | import { firebaseLogin, firebaseLogout, User } from '../lib/firebase/users' | ||||||
| import { firebaseLogout } from '../lib/firebase/users' |  | ||||||
| import { Header } from '../components/header' | import { Header } from '../components/header' | ||||||
| import { useUser } from '../hooks/use-user' | import { useUser } from '../hooks/use-user' | ||||||
| import { useState, useEffect } from 'react' | import { useState, useEffect } from 'react' | ||||||
|  | @ -7,11 +6,62 @@ import { Contract, listContracts } from '../lib/firebase/contracts' | ||||||
| import { ContractsList } from '../components/contracts-list' | import { ContractsList } from '../components/contracts-list' | ||||||
| import { Title } from '../components/title' | import { Title } from '../components/title' | ||||||
| 
 | 
 | ||||||
|  | function UserCard(props: { user: User }) { | ||||||
|  |   const { user } = props | ||||||
|  |   return ( | ||||||
|  |     <div className="card glass lg:card-side shadow-xl hover:shadow-xl text-neutral-content bg-green-600 hover:bg-green-600 transition-all max-w-sm mx-auto my-12"> | ||||||
|  |       <figure className="p-6"> | ||||||
|  |         {user?.avatarUrl && ( | ||||||
|  |           <img src={user.avatarUrl} className="rounded-lg shadow-lg" /> | ||||||
|  |         )} | ||||||
|  |       </figure> | ||||||
|  |       <div className="max-w-md card-body"> | ||||||
|  |         <h2 className="card-title font-major-mono">{user?.name}</h2> | ||||||
|  |         <p>{user?.email}</p> | ||||||
|  |         <p>M$ {user?.balance}</p> | ||||||
|  |         <div className="card-actions"> | ||||||
|  |           <button | ||||||
|  |             className="btn glass rounded-full hover:bg-green-500" | ||||||
|  |             onClick={firebaseLogout} | ||||||
|  |           > | ||||||
|  |             Sign Out | ||||||
|  |           </button> | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |     </div> | ||||||
|  |   ) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function SignInCard() { | ||||||
|  |   return ( | ||||||
|  |     <div className="card glass lg:card-side shadow-xl hover:shadow-xl text-neutral-content bg-green-600 hover:bg-green-600 transition-all max-w-sm mx-auto my-12"> | ||||||
|  |       <figure className="p-6"> | ||||||
|  |         <img | ||||||
|  |           src="/logo-icon-white-bg.png" | ||||||
|  |           className="rounded-lg shadow-lg w-20 h-20" | ||||||
|  |         /> | ||||||
|  |       </figure> | ||||||
|  |       <div className="max-w-md card-body"> | ||||||
|  |         <h2 className="card-title font-major-mono">Welcome!</h2> | ||||||
|  |         <p>Sign in to get started</p> | ||||||
|  |         <div className="card-actions"> | ||||||
|  |           <button | ||||||
|  |             className="btn glass rounded-full hover:bg-green-500" | ||||||
|  |             onClick={firebaseLogin} | ||||||
|  |           > | ||||||
|  |             Sign in with Google | ||||||
|  |           </button> | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |     </div> | ||||||
|  |   ) | ||||||
|  | } | ||||||
|  | 
 | ||||||
| export default function Account() { | export default function Account() { | ||||||
|   const user = useUser() |   const user = useUser() | ||||||
|   const router = useRouter() |  | ||||||
|   const [contracts, setContracts] = useState<Contract[]>([]) |   const [contracts, setContracts] = useState<Contract[]>([]) | ||||||
|   useEffect(() => { |   useEffect(() => { | ||||||
|  |     console.log('Fetching contracts', user?.id) | ||||||
|     if (user?.id) { |     if (user?.id) { | ||||||
|       listContracts(user?.id).then(setContracts) |       listContracts(user?.id).then(setContracts) | ||||||
|     } |     } | ||||||
|  | @ -21,34 +71,15 @@ export default function Account() { | ||||||
|     <div> |     <div> | ||||||
|       <Header /> |       <Header /> | ||||||
|       <div className="max-w-4xl py-8 mx-auto"> |       <div className="max-w-4xl py-8 mx-auto"> | ||||||
|         <div> |         {user ? ( | ||||||
|           <div className="card glass lg:card-side shadow-xl hover:shadow-xl text-neutral-content bg-green-600 hover:bg-green-600 transition-all max-w-sm mx-auto my-12"> |           <div> | ||||||
|             <figure className="p-6"> |             <UserCard user={user} /> | ||||||
|               {user?.avatarUrl && ( |             <Title text="Your markets" /> | ||||||
|                 <img src={user.avatarUrl} className="rounded-lg shadow-lg" /> |             <ContractsList contracts={contracts} /> | ||||||
|               )} |  | ||||||
|             </figure> |  | ||||||
|             <div className="max-w-md card-body"> |  | ||||||
|               <h2 className="card-title font-major-mono">{user?.name}</h2> |  | ||||||
|               <p>{user?.email}</p> |  | ||||||
|               <p>M${user?.balance}</p> |  | ||||||
|               <div className="card-actions"> |  | ||||||
|                 <button |  | ||||||
|                   className="btn glass rounded-full hover:bg-green-500" |  | ||||||
|                   onClick={() => { |  | ||||||
|                     firebaseLogout() |  | ||||||
|                     router.push('/') |  | ||||||
|                   }} |  | ||||||
|                 > |  | ||||||
|                   Sign Out |  | ||||||
|                 </button> |  | ||||||
|               </div> |  | ||||||
|             </div> |  | ||||||
|           </div> |           </div> | ||||||
|         </div> |         ) : ( | ||||||
| 
 |           <SignInCard /> | ||||||
|         <Title text="Your markets" /> |         )} | ||||||
|         <ContractsList contracts={contracts} /> |  | ||||||
|       </div> |       </div> | ||||||
|     </div> |     </div> | ||||||
|   ) |   ) | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user