Skip to content

Commit

Permalink
auth 1.0
Browse files Browse the repository at this point in the history
  • Loading branch information
EdgarJMesquita committed Aug 31, 2021
1 parent ad37d92 commit 4fc81d9
Show file tree
Hide file tree
Showing 20 changed files with 2,446 additions and 178 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -32,3 +32,5 @@ yarn-error.log*

# vercel
.vercel

config.js
2,224 changes: 2,087 additions & 137 deletions package-lock.json

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
"lint": "next lint"
},
"dependencies": {
"firebase": "^9.0.0-beta.8",
"js-cookie": "^3.0.0",
"next": "11.1.0",
"react": "17.0.2",
Expand Down
1 change: 1 addition & 0 deletions public/icons/avatar.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
19 changes: 19 additions & 0 deletions service/index.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import { initializeApp } from "firebase/app";
import { getFirestore, getDocs, getDoc, doc } from 'firebase/firestore'
import { getAuth, signInWithPopup, signOut, GithubAuthProvider } from 'firebase/auth';

const FirebaseConfig = {
apiKey: process.env.NEXT_PUBLIC_API_KEY,
authDomain: process.env.NEXT_PUBLIC_AUTH_DOMAIN,
projectId: process.env.NEXT_PUBLIC_PROJECT_ID,
storageBucket: process.env.NEXT_PUBLIC_STORAGE_BUCKET,
messagingSenderId: process.env.NEXT_PUBLIC_MESSAGING_SENDER_ID,
appId: process.env.NEXT_PUBLIC_APP_ID
};

// Initialize Firebase
const app = initializeApp(FirebaseConfig);
const auth = getAuth();
const database = getFirestore();

export { auth, signInWithPopup, GithubAuthProvider, signOut, database, getDocs, getDoc, doc };
2 changes: 1 addition & 1 deletion src/components/ChallengeBox/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ export default function ChallengeBox(){

<main>
<img src={`icons/${currentChallenge.type}.svg`} alt="Body" />
<strong>Novo desafio</strong>
<strong>{currentChallenge.type === 'eye'? 'Mova os olhos':'Exercite-se'}</strong>
<p>{currentChallenge.description}</p>
</main>

Expand Down
1 change: 1 addition & 0 deletions src/components/Countdown/styles.module.scss
Original file line number Diff line number Diff line change
Expand Up @@ -105,5 +105,6 @@
> div {
background: var(--green);
height: inherit;
transition: width 1s linear;
}
}
2 changes: 1 addition & 1 deletion src/components/ExperienceBar/ExperienceBar.module.scss
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@
height: 4px;
border-radius: 4px;
background: var(--green);

transition: width 1s ease;
}

span.currentExperience {
Expand Down
2 changes: 1 addition & 1 deletion src/components/LevelUpModal/styles.module.scss
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
background-color: var(--white);
width: 100%;
max-width: 400px;
padding: 2rem 3rem;
padding: 2.5rem 3.5rem;
border-radius: 5px;
box-shadow: 0 0 60px rgba(0, 0, 0, 0.05);
text-align: center;
Expand Down
12 changes: 11 additions & 1 deletion src/components/NavBar/styles.module.scss
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
padding: 1rem;
height: 4.5rem;
width: 4.5rem;

cursor: pointer;
}

> div {
Expand Down Expand Up @@ -52,11 +54,19 @@
@media screen and (max-width: 800px){
.nav {
width: 100vw;
height: 6rem;
height: 4rem;

flex-direction: row;
> div {
flex-direction: row;

> div {
&.selected::before {
left: initial;
top: - 1.35rem;
transform: rotate(-90deg);
}
}
}
}
}
9 changes: 7 additions & 2 deletions src/components/Profile/index.tsx
Original file line number Diff line number Diff line change
@@ -1,13 +1,18 @@

import { useAuth } from '../../hooks/useAuth';
import useChallenge from '../../hooks/useChallenge';
import styles from './Profile.module.scss';


export default function Profile(){
const { level } = useChallenge();
const { user } = useAuth();

return(
<div className={styles.profileContainer}>
<img src="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/edgarxongas.png" alt="Edgar Jonas" />
<img src={user? user.avatar: 'icons/avatar.svg'} alt={user? user.name: 'avatar'} />
<div>
<strong>Edgar Jonas</strong>
<strong>{user? user.name:'Player 1'}</strong>
<p>
<img src="icons/Up.svg" alt="Up" />
Level {level}
Expand Down
72 changes: 72 additions & 0 deletions src/context/AuthContext.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
import { createContext, ReactNode, useEffect, useState } from 'react';
import { auth, signInWithPopup, GithubAuthProvider } from '../../service';

type ReactChildren = {
children: ReactNode;
}

type UserProps = {
id: string;
name: string;
avatar: string;

}

type AuthContextProps = {
user: UserProps;
signInWithGithub: ()=>void;
}

const AuthContext = createContext({}as AuthContextProps);

function AuthContextProvider({children}:ReactChildren){
const [user, setUser] = useState<UserProps>()

async function signInWithGithub(){
try {
//const auth = getAuth();
const provider = new GithubAuthProvider();
const { user } = await signInWithPopup(auth,provider);
console.log({user});
const _user = {
id: user.uid,
name: user.displayName,
avatar: user.photoURL
}
setUser(_user);
console.log(_user);

} catch (error) {
console.error(error);
}
}

useEffect(() => {
const subscribe = auth.onAuthStateChanged(user=>{
if(user){
const { displayName, photoURL, uid } = user;
const _user = {
id: uid,
name: displayName,
avatar: photoURL
}
setUser(_user);
}
})

return () => {
subscribe();
}
}, [])

return(
<AuthContext.Provider value={{
user,
signInWithGithub
}}>
{children}
</AuthContext.Provider>
)
}

export { AuthContext, AuthContextProvider }
12 changes: 9 additions & 3 deletions src/context/ChallengeContext.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@ import Cookies from 'js-cookie';

type ReactChildrenProps = {
children: ReactNode;
level: number;
currentXP: number;
challengesCompleted: number;
level?: number;
currentXP?: number;
challengesCompleted?: number;
}

type ChallengeProps = {
Expand All @@ -23,6 +23,9 @@ type ChallengeContextProps = {
currentChallenge: ChallengeProps | null;
experienceToNextLevel: number;
isLevelUpModalOpen: boolean;
setLevel:(value:number)=>void;
setCurrentXP: (value:number)=>void;
setChallengesCompleted: (value:number)=>void;
setIsLevelUpModalOpen: (key:boolean)=>void;
levelUp: ()=>void;
startNewChallenge: ()=>void;
Expand Down Expand Up @@ -106,6 +109,9 @@ function ChallengeContextProvider({children, ...rest}:ReactChildrenProps){
currentChallenge,
experienceToNextLevel,
isLevelUpModalOpen,
setChallengesCompleted,
setLevel,
setCurrentXP,
setIsLevelUpModalOpen,
levelUp,
startNewChallenge,
Expand Down
6 changes: 6 additions & 0 deletions src/hooks/useAuth.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import { useContext } from "react";
import { AuthContext } from "../context/AuthContext";

export function useAuth(){
return useContext(AuthContext);
}
15 changes: 11 additions & 4 deletions src/pages/_app.tsx
Original file line number Diff line number Diff line change
@@ -1,12 +1,19 @@
import { NavBar } from '../components/NavBar';
import { CountdownContextProvider } from '../context/CountdownContext';
import { ChallengeContextProvider } from '../context/ChallengeContext';
import '../styles/globals.scss';
import { AuthContextProvider } from '../context/AuthContext';

function MyApp({ Component, pageProps }) {
return(
<>
<NavBar />
<Component {...pageProps} />
</>
<AuthContextProvider>
<ChallengeContextProvider>
<CountdownContextProvider>
<NavBar />
<Component {...pageProps} />
</CountdownContextProvider>
</ChallengeContextProvider>
</AuthContextProvider>
)
}

Expand Down
47 changes: 25 additions & 22 deletions src/pages/index.tsx
Original file line number Diff line number Diff line change
@@ -1,51 +1,54 @@
import { useEffect } from 'react';
import { GetServerSideProps } from 'next';
import ExperienceBar from '../components/ExperienceBar';
import Profile from '../components/Profile';
import CompletedChallenges from '../components/CompletedChallenges';
import Countdown from '../components/Countdown';
import ChallengeBox from '../components/ChallengeBox';
import Head from 'next/head';

import useChallenge from '../hooks/useChallenge';
import styles from '../styles/pages/Home.module.scss';
import { CountdownContextProvider } from '../context/CountdownContext';
import { GetServerSideProps } from 'next';
import { ChallengeContextProvider } from '../context/ChallengeContext';

type HomeProps = {
level: number;
currentXP: number;
challengesCompleted: number;
}
}

export default function Home({level,currentXP,challengesCompleted}:HomeProps) {
export default function Home({level,currentXP, challengesCompleted}:HomeProps) {
const { setLevel, setCurrentXP, setChallengesCompleted} = useChallenge();
useEffect(() => {
setLevel(level)
setCurrentXP(currentXP)
setChallengesCompleted(challengesCompleted)

}, [level,currentXP,challengesCompleted])

return (
<ChallengeContextProvider level={level} currentXP={currentXP} challengesCompleted={challengesCompleted}>
<>
<div className={styles.container}>
<Head>
<title>Home | Moveit</title>
</Head>

<ExperienceBar />

<CountdownContextProvider>
<section>
<div>
<Profile />
<CompletedChallenges />
<Countdown />
</div>
<div>
<ChallengeBox />
</div>
</section>
</CountdownContextProvider>
<section>
<div>
<Profile />
<CompletedChallenges />
<Countdown />
</div>
<div>
<ChallengeBox />
</div>
</section>
</div>
</ChallengeContextProvider>
</>
)
}

export const getServerSideProps:GetServerSideProps = async ({req}) => {
const {level, currentXP, challengesCompleted} = req.cookies;
const { level, currentXP, challengesCompleted } = req.cookies;

return{
props:{
Expand Down
Loading

0 comments on commit 4fc81d9

Please sign in to comment.