File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -5,13 +5,13 @@ import dynamic from "next/dynamic";
55import { harperFetch } from "../../utils/HarperFetch" ;
66
77// Dummy Shape Data
8- // import { shapes } from "../../data/shapes";
8+ import { shapes } from "../../data/shapes" ;
99
1010// loader
1111import Loader from "react-loader-spinner" ;
1212
1313// ShapeListing
14- import { ShapeList } from '..' ;
14+ import { ShapeList , Header } from '..' ;
1515
1616const App = ( props ) => {
1717 const [ data , setData ] = useState ( [ ] ) ;
@@ -22,10 +22,10 @@ const App = (props) => {
2222 setLoading ( true ) ;
2323
2424 // fetching the shape data
25- const shapes = await harperFetch ( {
25+ /* const shapes = await harperFetch({
2626 operation: "sql",
2727 sql: "SELECT * FROM tryshape.shapes",
28- } ) ;
28+ });*/
2929 console . log ( shapes ) ;
3030 let modifiedShapes = shapes . map ( ( shape , index ) => {
3131 shape . showAdvanced = false ;
@@ -42,6 +42,7 @@ const App = (props) => {
4242
4343 return (
4444 < >
45+ < Header { ...props } />
4546 { loading ? (
4647 < Loader
4748 style = { { margin : '20% auto auto 42%' } }
Original file line number Diff line number Diff line change 1+ import React from 'react' ;
2+
3+ import Button from 'react-bootstrap/Button' ;
4+
5+ // Header
6+ import { Header } from '..'
7+
8+ // icon
9+ import { BsLightning } from "react-icons/bs" ;
10+
11+ // link
12+ import Link from "next/link" ;
13+
14+ const Landing = ( { setOpen, user, setUser } ) => {
15+
16+ return (
17+ < div >
18+ < Header setOpen = { setOpen } user = { user } setUser = { setUser } />
19+ < div >
20+ < h1 > Landing</ h1 >
21+ </ div >
22+ < Link href = "/app" >
23+ < a >
24+ < Button >
25+ < div >
26+ Try Now!
27+ < BsLightning />
28+ </ div >
29+ </ Button >
30+ </ a >
31+ </ Link >
32+ </ div >
33+ )
34+ } ;
35+
36+ export default Landing ;
Original file line number Diff line number Diff line change 1+ import React from "react" ;
2+
3+ // icons
4+ import { FaGithub , FaGoogle } from "react-icons/fa" ;
5+
6+ // Button
7+ import Button from "react-bootstrap/Button" ;
8+
9+ // Modal
10+ import Modal from "react-bootstrap/Modal" ;
11+
12+ // sign In providers
13+ import { githubProvider , googleProvider } from "../../utils/Auth/auth-methods" ;
14+ import socialMediaAuth from "../../utils/Auth/auth" ;
15+
16+ const SignInModal = ( { open, setOpen } ) => {
17+ const handleOnClick = async ( provider ) => {
18+ const res = await socialMediaAuth ( provider ) ;
19+ await setOpen ( false ) ;
20+ } ;
21+ return (
22+ < Modal
23+ size = "lg"
24+ aria-labelledby = "contained-modal-title-vcenter"
25+ show = { open }
26+ onHide = { ( ) => setOpen ( false ) }
27+ centered
28+ >
29+ < Modal . Header closeButton >
30+ < Modal . Title id = "contained-modal-title-vcenter" >
31+ Sign In
32+ </ Modal . Title >
33+ </ Modal . Header >
34+ < Modal . Body >
35+ < div className = "flex" >
36+ < Button onClick = { ( ) => handleOnClick ( googleProvider ) } >
37+ Sign In with Google < FaGoogle />
38+ </ Button >
39+
40+ < Button onClick = { ( ) => handleOnClick ( githubProvider ) } >
41+ Sign In with Github
42+ < FaGithub />
43+ </ Button >
44+ </ div >
45+ </ Modal . Body >
46+ </ Modal >
47+ ) ;
48+ } ;
49+
50+ export default SignInModal ;
Original file line number Diff line number Diff line change 1+ // core
12export { default as App } from "./core/App" ;
3+ export { default as Landing } from "./core/Landing" ;
4+ export { default as SignInModal } from "./core/SignInModal" ;
25
6+ // utils
7+ export { default as Header } from "./utils/Header" ;
38export { default as ShapeList } from './utils/ShapeList' ;
Original file line number Diff line number Diff line change 1+ import React , { useState } from "react" ;
2+
3+ // link from next
4+ import Link from "next/link" ;
5+
6+ // auth for signin out
7+ import { auth } from "../../utils/firebase" ;
8+
9+ // toast
10+ import toast from "react-hot-toast" ;
11+
12+ // icon
13+ import { FaShapes } from "react-icons/fa" ;
14+
15+ // Button
16+ import Button from "react-bootstrap/Button" ;
17+
18+ const Header = ( { setOpen, user, setUser } ) => {
19+ console . log ( user ) ;
20+ // sign out function
21+ const signOut = ( ) => {
22+ auth ( )
23+ . signOut ( )
24+ . then ( ( ) => {
25+ setUser ( [ ] ) ;
26+ toast . success ( "Signed Out!" ) ;
27+ } )
28+ . catch ( ( error ) => {
29+ // An error happened.
30+ console . log ( error ) ;
31+ } ) ;
32+ } ;
33+
34+ return (
35+ < div >
36+ < Link href = "/" >
37+ < a >
38+ TryShape
39+ < span >
40+ < FaShapes />
41+ </ span >
42+ </ a >
43+ </ Link >
44+ { ( user . email || user . displayName ) ? (
45+ < >
46+ < div >
47+ < img
48+ src = {
49+ user . photoURL
50+ ? user . photoURL
51+ : `https://unavatar.vercel.app/${ user . email } `
52+ }
53+ alt = "profile"
54+ />
55+ { user . displayName ? user . displayName : "User" }
56+ </ div >
57+
58+ < Button onClick = { signOut } >
59+ < div > Sign Out</ div >
60+ </ Button >
61+ </ >
62+ ) : (
63+ < Button onClick = { ( ) => setOpen ( true ) } >
64+ < div > Sign In</ div >
65+ </ Button >
66+ ) }
67+ </ div >
68+ ) ;
69+ } ;
70+
71+ export default Header ;
Original file line number Diff line number Diff line change 88 "start" : " next start"
99 },
1010 "dependencies" : {
11+ "bootstrap" : " 4.6.0" ,
1112 "downloadjs" : " ^1.4.7" ,
13+ "firebase" : " ^8.6.7" ,
1214 "html-to-image" : " ^1.6.2" ,
1315 "next" : " ^10.0.0" ,
1416 "react" : " 17.0.1" ,
17+ "react-bootstrap" : " ^1.6.1" ,
1518 "react-clip-path" : " ^0.0.6" ,
1619 "react-dom" : " 17.0.1" ,
1720 "react-hot-toast" : " ^2.0.0" ,
1821 "react-icons" : " ^4.2.0" ,
22+ "react-infinite-scroll-component" : " ^6.1.0" ,
1923 "react-loader-spinner" : " ^4.0.0" ,
2024 "react-switch" : " ^6.0.0" ,
2125 "styled-components" : " ^5.3.0"
Original file line number Diff line number Diff line change 1+ import { useEffect , useState } from "react" ;
12
23// styles
34import '../styles/global.css' ;
5+ import 'bootstrap/dist/css/bootstrap.min.css' ;
46
57// toaster
68import { Toaster } from "react-hot-toast" ;
79
10+ // firebase auth
11+ import { auth } from "../utils/firebase" ;
12+
13+ // SignIn modal
14+ import { SignInModal } from '../components' ;
15+
16+
817export default function App ( { Component, pageProps } ) {
18+ // handling auth user
19+ const [ user , setUser ] = useState ( [ ] ) ;
20+ const [ open , setOpen ] = useState ( false ) ;
21+
22+ const props = {
23+ open,
24+ setOpen,
25+ user,
26+ setUser
27+ } ;
28+
29+ // handling auth and storing user if found
30+ auth ( ) . onAuthStateChanged ( ( user ) => {
31+ if ( user ) {
32+ setUser ( user ) ;
33+ }
34+ } ) ;
35+
936 return (
1037 < >
1138 < Toaster position = "top-right" reverseOrder = { false } />
12- < Component { ...pageProps } />
39+ < Component { ...pageProps } { ...props } />
40+ < SignInModal open = { open } setOpen = { setOpen } />
1341 </ >
1442 ) ;
1543}
Original file line number Diff line number Diff line change 1+ import React from "react" ;
2+ import { App } from "../components" ;
3+
4+ const Container = ( props ) => {
5+ return < App { ...props } /> ;
6+ } ;
7+
8+ export default Container ;
Original file line number Diff line number Diff line change 11import React from "react" ;
2- import { App } from "../components" ;
2+ import { App , Landing } from "../components" ;
33
44const index = ( props ) => {
5+ const { user } = props ;
6+ console . log ( user ) ;
57 return (
68 < main >
7- < App { ...props } />
9+ {
10+ user . length === 0 ?
11+ ( < Landing { ...props } /> ) :
12+ ( < App { ...props } /> )
13+ }
814 </ main >
915 ) ;
1016} ;
Original file line number Diff line number Diff line change 1+ import { auth } from "../firebase" ;
2+
3+ export const googleProvider = new auth . GoogleAuthProvider ( ) ;
4+ export const githubProvider = new auth . GithubAuthProvider ( ) ;
You can’t perform that action at this time.
0 commit comments