Skip to content

Commit cea2477

Browse files
add context click add cart neet login
1 parent 455d104 commit cea2477

File tree

5 files changed

+89
-41
lines changed

5 files changed

+89
-41
lines changed

src/App.js

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,20 @@
1-
import React from "react";
1+
import React, { useState } from "react";
22
import Layout from "./component/organisms/Layout";
33
import Banner from "./component/organisms/Banner";
44
import MenuBot from "./component/organisms/MenuBot";
55
import "./App.scss";
6+
import { LoginContex } from './component/context'
67

78
function App() {
9+
const [login, setLogin] = useState(false)
10+
const [userSucsecss, setUserSucsecss] = useState(null);
811
return (
9-
<Layout>
10-
<Banner />
11-
<MenuBot />
12-
</Layout>
12+
<LoginContex.Provider value={{ login, userSucsecss, setUserSucsecss, setLogin }}>
13+
<Layout>
14+
<Banner />
15+
<MenuBot />
16+
</Layout>
17+
</LoginContex.Provider>
1318
);
1419
}
1520

src/component/context.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import { createContext } from 'react'
2+
3+
export const LoginContex = createContext();

src/component/organisms/Layout/index.js

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { useState, useEffect } from "react";
1+
import React, { useState, useEffect, useContext } from "react";
22
import { useSelector } from "react-redux";
33
import {
44
Navbar,
@@ -35,12 +35,13 @@ import Love from "../../molecules/Love";
3535
import LogIn from "../Login";
3636
import logo from "../../../images/icons/logo.png";
3737
import firebase from "../../../service/firebase";
38+
import { LoginContex } from "../../context";
3839

3940

4041
const Layout = ({ children }) => {
4142
const [showMenuMobile, setShowMenuMobile] = useState(false);
42-
const [login, setLogin] = useState(false);
43-
43+
// const [] = useState(false);
44+
const { login, setLogin, userSucsecss, setUserSucsecss } = useContext(LoginContex)
4445
// state xử lý popup menu
4546
const [showCart, setShowCart] = useState(false);
4647
const [showLove, setShowLove] = useState(false);
@@ -50,7 +51,7 @@ const Layout = ({ children }) => {
5051
const dataCart = useSelector((state) => state.cart);
5152

5253
// gọi data login
53-
const [userSucsecss, setUserSucsecss] = useState(null);
54+
5455
useEffect(() => {
5556
firebase.auth().onAuthStateChanged((user) => {
5657
setUserSucsecss(user);
@@ -104,7 +105,7 @@ const Layout = ({ children }) => {
104105
<div className="menuLeft col-8 col-md-10 col-xl-9 ">
105106
<button
106107
className={`burger d-block d-md-none`}
107-
onClick={() => showMenuMobile(true)}
108+
onClick={() => setShowMenuMobile(true)}
108109
>
109110
<BiMenu style={{ fontSize: "30px" }} />
110111
</button>
@@ -217,7 +218,7 @@ const Layout = ({ children }) => {
217218
</Offcanvas.Title>
218219
<button
219220
className={`burger ${showMenuMobile ? "toggle" : ""}`}
220-
onClick={() => showMenuMobile(false)}
221+
onClick={() => setShowMenuMobile(false)}
221222
>
222223
<GrFormClose style={{ fontSize: "30px" }} />
223224
</button>

src/component/organisms/MenuBot/index.js

Lines changed: 45 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import React, {
44
useRef,
55
useEffect,
66
useCallback,
7+
useContext,
78
} from "react";
89
import Select from "react-select";
910
import CardHeader from "../../molecules/CardHeader";
@@ -13,6 +14,7 @@ import { addCart } from "../../../redux/action/cart";
1314
import { useDispatch } from "react-redux";
1415
import CardModal from "../../molecules/CardModal";
1516
import { dataMenu, dataSortPrice } from "./data.js";
17+
import { LoginContex } from "../../context";
1618
const reducer = (state, action) => {
1719
switch (action.type) {
1820
case "tab1":
@@ -50,6 +52,30 @@ const reducer = (state, action) => {
5052
return state;
5153
}
5254
};
55+
// custom select
56+
const customStyles = {
57+
menu: (provided) => ({
58+
...provided,
59+
width: "100%",
60+
fontSize: "14px"
61+
}),
62+
63+
control: () => ({
64+
width: "100%",
65+
display: "flex",
66+
border: "1px solid #a1a1a1",
67+
borderRadius: "4px",
68+
fontSize: "14px",
69+
}),
70+
71+
singleValue: (provided, state) => {
72+
const opacity = state.isDisabled ? 0.5 : 1;
73+
const transition = 'opacity 300ms';
74+
75+
return { ...provided, opacity, transition };
76+
}
77+
}
78+
5379

5480
const MenuBot = () => {
5581
const [tab, dispatch] = useReducer(reducer, {
@@ -62,6 +88,10 @@ const MenuBot = () => {
6288
const [dataProduct, setDataProduct] = useState(tab.data);
6389
const [dataCard, setDataCard] = useState([]);
6490
const [dataCart, setDataCart] = useState({});
91+
92+
const { setLogin, userSucsecss } = useContext(LoginContex)
93+
94+
// click
6595
const handleLoadMore = () => {
6696
setLimit(limit + 4);
6797
};
@@ -72,9 +102,8 @@ const MenuBot = () => {
72102
setShowCard(true);
73103
setDataCard(item);
74104
};
75-
const dataLength = tab.data.length;
76105

77-
// serch
106+
// sort select
78107
useEffect(() => {
79108
setDataProduct(tab.data);
80109
}, [tab]);
@@ -93,39 +122,25 @@ const MenuBot = () => {
93122
);
94123
}
95124
};
96-
const customStyles = {
97-
menu: (provided) => ({
98-
...provided,
99-
width: "100%",
100-
fontSize: "14px"
101-
}),
102-
103-
control: () => ({
104-
width: "100%",
105-
display: "flex",
106-
border: "1px solid #a1a1a1",
107-
borderRadius: "4px",
108-
fontSize: "14px",
109-
}),
110125

111-
singleValue: (provided, state) => {
112-
const opacity = state.isDisabled ? 0.5 : 1;
113-
const transition = 'opacity 300ms';
126+
// cart data card redux
114127

115-
return { ...provided, opacity, transition };
116-
}
117-
}
118-
// cart
119128
const dispatchCart = useDispatch();
120-
121-
const handleaddCard = (item) => {
122-
setDataCart(item)
123-
}
124129
useEffect(() => {
125130
const action = addCart(dataCart);
126131
dispatchCart(action);
127132
}, [dataCart, dispatchCart])
128-
// console.log(dataCart)
133+
134+
// add card
135+
const handleaddCard = (item) => {
136+
if (userSucsecss) {
137+
setDataCart(item)
138+
} else {
139+
setLogin(true);
140+
}
141+
}
142+
143+
129144
return (
130145
<div className="container">
131146
<div className="product">
@@ -186,13 +201,13 @@ const MenuBot = () => {
186201
</div>
187202
<div className="LoadMore my-4">
188203
<button
189-
className={`${dataLength <= limit ? "d-none" : "d-block"}`}
204+
className={`${tab.data.length <= limit ? "d-none" : "d-block"}`}
190205
onClick={handleLoadMore}
191206
>
192207
Load More
193208
</button>
194209
<button
195-
className={`${dataLength <= limit && dataLength > 4 ? "d-block" : "d-none"
210+
className={`${tab.data.length <= limit && tab.data.length > 4 ? "d-block" : "d-none"
196211
}`}
197212
onClick={handleSeeLess}
198213
>

src/redux/action/user.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,3 +14,27 @@ const userSlice = createSlice({
1414
const { reducer, actions } = userSlice;
1515
export const { addUser, deleteUser } = actions;
1616
export default reducer;
17+
18+
// import { createSlice } from "@reduxjs/toolkit";
19+
20+
// const NoteToggle = {
21+
// enableDeleteButton: false,
22+
// };
23+
24+
// const toggleReducer = createSlice({
25+
// name: "login",
26+
// initialState: NoteToggle,
27+
// reducers: {
28+
// showLogin: (state) => {
29+
// const newToggle = { ...state, enableDeleteButton: true };
30+
// console.log("new toogle", newToggle);
31+
32+
// },
33+
// showLogin11: (state) => {
34+
// const newToggle = { ...state, enableDeleteButton: false };
35+
// return newToggle;
36+
// },
37+
// },
38+
// });
39+
// export default toggleReducer.reducer;
40+
// export const { showLogin } = toggleReducer.actions;

0 commit comments

Comments
 (0)