This commit is contained in:
LucasLassiter
2022-05-11 14:56:59 -07:00
parent fb28b8380d
commit c20b6bea70
7 changed files with 371 additions and 579 deletions

View File

@@ -1,8 +1,10 @@
import Link from 'next/link'; import Link from 'next/link';
import { useContext } from 'react';
import { UserContext } from '../lib/context';
export default function Navbar() { export default function Navbar() {
const user = null;
const username = null; const { user, username } = useContext(UserContext);
return ( return (
<nav className="navbar"> <nav className="navbar">

3
lib/context.js Normal file
View File

@@ -0,0 +1,3 @@
import { createContext } from 'react';
export const UserContext = createContext({user: null, username: null});

View File

@@ -1,7 +1,7 @@
import firebase from 'firebase/compat/app' import * as firebase from "firebase/app";
import 'firebase/compat/auth'; import 'firebase/auth';
import 'firebase/compat/firestore'; import 'firebase/firestore';
import 'firebase/compat/storage'; import 'firebase/storage';
const firebaseConfig = { const firebaseConfig = {

890
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -9,18 +9,19 @@
"lint": "next lint" "lint": "next lint"
}, },
"dependencies": { "dependencies": {
"firebase": "^8.10.1",
"firebase-hooks": "^0.0.1", "firebase-hooks": "^0.0.1",
"firebase-react-hooks": "^0.8.0", "firebase-react-hooks": "^0.8.0",
"next": "12.1.6", "next": "12.1.6",
"react": "18.1.0", "react": "18.1.0",
"react-dom": "18.1.0", "react-dom": "18.1.0",
"react-firebase-hooks": "^5.0.3",
"react-hot-toast": "^2.2.0" "react-hot-toast": "^2.2.0"
}, },
"devDependencies": { "devDependencies": {
"@types/node": "^17.0.31", "@types/node": "^17.0.31",
"@types/react": "^18.0.8", "@types/react": "^18.0.8",
"eslint": "8.14.0", "eslint": "8.14.0",
"eslint-config-next": "12.1.6" "eslint-config-next": "12.1.6",
"firebase": "^8.2.1"
} }
} }

View File

@@ -1,14 +1,39 @@
import '../styles/globals.css' import '../styles/globals.css'
import Navbar from '../components/Navbar'; import Navbar from '../components/Navbar';
import { Toaster } from 'react-hot-toast'; import { Toaster } from 'react-hot-toast';
import { UserContext } from '../lib/context';
import { auth, firestore } from '../lib/firebase';
import { useEffect, useState } from 'react';
import { useAuthState } from 'react-firebase-hooks/auth';
function MyApp({ Component, pageProps }) { function MyApp({ Component, pageProps }) {
const [user] = useAuthState(auth);
const [username, setUsername] = useState(null);
useEffect(() => {
//turn off realtime subscription
let unsubscribe;
if (user) {
const ref = firestore.collection('users').doc(user.uid);
unsubscribe = ref.onSnapshot((doc) => {
setUsername(doc.data()?.username);
});
} else {
setUsername(null);
}
return unsubscribe;
}, [user]);
return ( return (
<> <UserContext.Provider value={{ user, username}}>
<Navbar /> <Navbar />
<Component {...pageProps} /> <Component {...pageProps} />
<Toaster /> <Toaster />
</> </UserContext.Provider>
); );
} }

View File

@@ -1,9 +1,10 @@
import { auth, googleAuthProvider } from '../lib/firebase'; import { auth, googleAuthProvider } from '../lib/firebase';
import { useContext } from 'react';
import { UserContext } from '../lib/context';
export default function EnterPage({ }) { export default function EnterPage({ }) {
const user = null const { user, username } = useContext(UserContext);
const username = null;
// 1. user signed out <SignInButton /> // 1. user signed out <SignInButton />
// 2. user signed in, but missing username <UsernameForm /> // 2. user signed in, but missing username <UsernameForm />