11import React , { useState , useEffect } from "react" ;
2+ import { useSelector } from "react-redux" ;
3+ import {
4+ Navbar ,
5+ Badge ,
6+ Offcanvas ,
7+ Nav ,
8+ Accordion ,
9+ NavDropdown ,
10+ Button ,
11+ } from "react-bootstrap" ;
212
13+ // icons
314import { BiUser , BiMenu } from "react-icons/bi" ;
415import {
516 AiOutlineHeart ,
@@ -14,31 +25,39 @@ import {
1425 FaFacebookF ,
1526 FaChevronDown ,
1627} from "react-icons/fa" ;
17- import {
18- Navbar ,
19- Badge ,
20- Offcanvas ,
21- Nav ,
22- Accordion ,
23- NavDropdown ,
24- Button ,
25- } from "react-bootstrap" ;
26- import { useSelector } from "react-redux" ;
28+
29+ //styles
30+ import "./index.scss" ;
31+ //components
2732import Cart from "../../molecules/Cart" ;
33+ import User from "../../molecules/User" ;
2834import Love from "../../molecules/Love" ;
2935import LogIn from "../Login" ;
30- import "./index.scss" ;
3136import logo from "../../../images/icons/logo.png" ;
32- import LoginSuccess from "../../molecules/LoginSuccess" ;
37+ import firebase from "../../../service/firebase" ;
38+
39+
3340const Layout = ( { children } ) => {
34- const [ show , setShow ] = useState ( false ) ;
41+ const [ showMenuMobile , setShowMenuMobile ] = useState ( false ) ;
3542 const [ login , setLogin ] = useState ( false ) ;
43+
44+ // state xử lý popup menu
3645 const [ showCart , setShowCart ] = useState ( false ) ;
3746 const [ showLove , setShowLove ] = useState ( false ) ;
38- const [ showLoginSuccess , setShowLoginSuccess ] = useState ( false ) ;
39- const user = useSelector ( ( state ) => state . user [ 0 ] ) ;
47+ const [ showUser , setShowUser ] = useState ( false ) ;
48+
49+ // gọi data redux cart
4050 const dataCart = useSelector ( ( state ) => state . cart ) ;
41- // console.log(dataCart);
51+
52+ // gọi data login
53+ const [ userSucsecss , setUserSucsecss ] = useState ( null ) ;
54+ useEffect ( ( ) => {
55+ firebase . auth ( ) . onAuthStateChanged ( ( user ) => {
56+ setUserSucsecss ( user ) ;
57+ } ) ;
58+ } , [ ] ) ;
59+
60+ // xử lý click
4261 const onClickCloseLove = ( ) => {
4362 setShowLove ( ! showLove ) ;
4463 setShowCart ( false ) ;
@@ -49,19 +68,19 @@ const Layout = ({ children }) => {
4968 } ;
5069
5170 const handleUserClick = ( ) => {
52- setLogin ( true ) ;
53- if ( user ) {
54- setShowLoginSuccess ( ! showLoginSuccess ) ;
71+ if ( userSucsecss ) {
72+ setShowUser ( ! showUser ) ;
73+ } else {
74+ setLogin ( true ) ;
5575 }
5676 } ;
5777
58-
5978 ///sticky
6079 const [ sticky , setSticky ] = useState ( false ) ;
6180 useEffect ( ( ) => {
6281 const scrollCallBack = window . addEventListener ( "scroll" , ( ) => {
6382 if ( window . pageYOffset > 160 ) {
64- setSticky ( true )
83+ setSticky ( true ) ;
6584 } else {
6685 setSticky ( false ) ;
6786 }
@@ -74,14 +93,18 @@ const Layout = ({ children }) => {
7493 < >
7594 < div >
7695 < div className = { `${ sticky ? "d-block" : "d-none" } menuboi` } > </ div >
77- < Navbar bg = "light" expanded = { show } id = "myHeader" className = { `${ sticky ? "sticky" : "" } myHeader` } >
96+ < Navbar
97+ bg = "light"
98+ expanded = { showMenuMobile }
99+ id = "myHeader"
100+ className = { `${ sticky ? "sticky" : "" } myHeader` }
101+ >
78102 < div className = "container" >
79-
80103 < div className = "menu row" >
81104 < div className = "menuLeft col-8 col-md-10 col-xl-9 " >
82105 < button
83106 className = { `burger d-block d-md-none` }
84- onClick = { ( ) => setShow ( true ) }
107+ onClick = { ( ) => showMenuMobile ( true ) }
85108 >
86109 < BiMenu style = { { fontSize : "30px" } } />
87110 </ button >
@@ -132,6 +155,13 @@ const Layout = ({ children }) => {
132155 >
133156 < BiUser style = { { fontSize : "20px" } } />
134157 </ Button >
158+ { showUser && userSucsecss && (
159+ < User
160+ data = { userSucsecss }
161+ ClickClose = { ( ) => setShowUser ( false ) }
162+
163+ />
164+ ) }
135165 < div className = "positon-relative" >
136166 < Button
137167 className = "btnheart"
@@ -164,12 +194,17 @@ const Layout = ({ children }) => {
164194 { dataCart . length - 1 }
165195 </ Badge >
166196 </ Button >
167- { showCart && < Cart ClickClose = { ( ) => setShowCart ( false ) } data = { dataCart } /> }
197+ { showCart && (
198+ < Cart
199+ ClickClose = { ( ) => setShowCart ( false ) }
200+ data = { dataCart }
201+ />
202+ ) }
168203 </ div >
169204 </ div >
170205 </ div >
171206 </ div >
172- { show && (
207+ { showMenuMobile && (
173208 < Navbar . Offcanvas
174209 id = "offcanvasNavbar"
175210 aria-labelledby = "offcanvasNavbarLabel"
@@ -181,8 +216,8 @@ const Layout = ({ children }) => {
181216 < img width = { 100 } src = { logo } alt = "logo" />
182217 </ Offcanvas . Title >
183218 < button
184- className = { `burger ${ show ? "toggle" : "" } ` }
185- onClick = { ( ) => setShow ( false ) }
219+ className = { `burger ${ showMenuMobile ? "toggle" : "" } ` }
220+ onClick = { ( ) => showMenuMobile ( false ) }
186221 >
187222 < GrFormClose style = { { fontSize : "30px" } } />
188223 </ button >
@@ -267,14 +302,8 @@ const Layout = ({ children }) => {
267302 </ Navbar >
268303 { children }
269304 </ div >
270- < LogIn show = { login } handleClose = { ( ) => setLogin ( false ) } />
271-
272- { showLoginSuccess && (
273- < LoginSuccess
274- name = { user . name }
275- src = { user . imageUrl }
276- ClickClose = { ( ) => setShowLoginSuccess ( false ) }
277- />
305+ { ! userSucsecss && (
306+ < LogIn show = { login } handleClose = { ( ) => setLogin ( false ) } />
278307 ) }
279308 </ >
280309 ) ;
0 commit comments