Skip to content

Commit 2e5d3c0

Browse files
Added back button browser support
1 parent 07c27e2 commit 2e5d3c0

File tree

19 files changed

+160
-75
lines changed

19 files changed

+160
-75
lines changed

client/src/actions/index.js

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,11 @@ import {
22
HANDLE_SIGN_IN,
33
HANDLE_SIGN_UP,
44
HANDLE_SIGN_UP_ERROR,
5-
LOAD_HOME_PAGE,
65
HANDLE_SIGN_OUT,
76
HANDLE_TOKEN_ID,
87
HANDLE_SIGN_IN_ERROR,
98
LOAD_FILTER_PRODUCTS,
109
LOAD_FILTER_ATTRIBUTES,
11-
LOAD_TABS_DATA,
1210
INTERNAL_SERVER_ERROR_CODE,
1311
BAD_REQUEST_ERROR_CODE,
1412
} from './types';

client/src/components/app.js

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React from "react";
1+
import React, {useEffect} from "react";
22
import history from "../history";
33
import {Router, Route} from 'react-router-dom';
44
import log from "loglevel"
@@ -8,11 +8,10 @@ import Home from "./routes/home/home";
88
import Login from "./routes/login";
99
import SignUp from "./routes/signUp";
1010
import Product from "./routes/product/product";
11-
import Detail from "./routes/detail/productDetails";
11+
import ProductDetail from "./routes/detail/productDetails";
1212
import Checkout from "./routes/checkout/checkout";
1313
import ShoppingBag from "./routes/shoppingBag";
1414

15-
1615
const App = () => {
1716
log.info(`[App]: Rendering App Component window`)
1817
return (
@@ -25,7 +24,7 @@ const App = () => {
2524
<Route path="/shopping-bag" exact component={ShoppingBag}/>
2625
<Route path="/checkout" exact component={Checkout}/>
2726
<Route path="/products/details/:shopping-bag" exact component={ShoppingBag}/>
28-
<Route path="/products/:details" exact component={Detail}/>
27+
<Route path="/products/:details" exact component={ProductDetail}/>
2928
<Route path="/products" exact component={Product}/>
3029
</Router>
3130
)
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import{ useEffect } from "react";
2+
import log from "loglevel";
3+
import history from "../history";
4+
5+
export function useBackButton() {
6+
useEffect(() => {
7+
8+
function handleBackButton() {
9+
log.info(`[useBackButton] GOING BACKKKKKKKKK..............................................`)
10+
history.go(-1)
11+
}
12+
13+
// Bind the event listener
14+
window.addEventListener("popstate", handleBackButton);
15+
16+
return () => {
17+
// Unbind the event listener on clean up
18+
window.removeEventListener("popstate", handleBackButton);
19+
};
20+
}, []);
21+
}

client/src/components/routes/checkout/checkout.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import {withStyles} from '@material-ui/core/styles';
88
import MuiAccordion from '@material-ui/core/Accordion';
99
import MuiAccordionSummary from '@material-ui/core/AccordionSummary';
1010
import MuiAccordionDetails from '@material-ui/core/AccordionDetails';
11+
import {useBackButton} from "../../backButtonHook";
1112

1213
const checkoutBgColor = "#80808033"
1314

@@ -57,6 +58,8 @@ const AccordionDetails = withStyles((theme) => ({
5758
function Checkout() {
5859
const [expanded, setExpanded] = React.useState('panel1');
5960

61+
useBackButton()
62+
6063
const handleChange = (panel) => (event, newExpanded) => {
6164
setExpanded(newExpanded ? panel : false);
6265
};

client/src/components/routes/detail/productDetails.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import {makeStyles} from "@material-ui/core/styles";
1818
import Spinner from "../../ui/spinner";
1919
import {InternalServerError} from "../../ui/error/internalServerError";
2020
import {BadRequest} from "../../ui/error/badRequest";
21+
import {useBackButton} from "../../backButtonHook";
2122

2223
export const useButtonStyles = makeStyles(() => ({
2324
buttonStartIcon: {
@@ -36,6 +37,8 @@ function ProductDetails(props) {
3637
const addToCart = useSelector(state => state.addToCartReducer)
3738
const [productQuantity, setProductQuantity] = useState(1)
3839

40+
useBackButton()
41+
3942
useEffect(() => {
4043
log.info(`[Product Detail] Component did mount selectProductDetail = ${JSON.stringify(selectProductDetail)}`)
4144
log.info(`[Product Detail] Component did mount selectedProduct = ${JSON.stringify(selectedProduct)}`)
@@ -48,7 +51,6 @@ function ProductDetails(props) {
4851
}
4952
}, [selectedProduct])
5053

51-
5254
if (history.location.pathname.localeCompare('/products/details') !== 0 ||
5355
history.location.search.search('product_id=') === -1
5456
|| !history.location.search.startsWith('?q=')) {

client/src/components/routes/home/home.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,14 @@ import Spinner from "../../ui/spinner";
1414
import {HTTPError} from "../../ui/error/httpError";
1515
import {LOAD_HOME_PAGE, HOME_PAGE_DATA_API, HOME_PAGE_API_OBJECT_LEN} from "../../../actions/types";
1616
import {BadRequest} from "../../ui/error/badRequest";
17+
import {useBackButton} from "../../backButtonHook";
1718

1819
const Home = props => {
1920
const {hover} = useSelector(state => state.tabHoverEventReducer)
2021
const homeAPIData = useSelector(state => state.homePageDataReducer)
2122

23+
useBackButton()
24+
2225
// Main screen API is loaded during Component Did mount
2326
useEffect(() => {
2427
log.info("[Home]: component did mount and home API is called.")

client/src/components/routes/login.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,12 @@ import Icon from "semantic-ui-react/dist/commonjs/elements/Icon";
88
import {Typography} from "@material-ui/core";
99
import {Link} from "react-router-dom";
1010
import log from "loglevel";
11+
import {useBackButton} from "../backButtonHook";
1112

1213
const Login = (props) => {
14+
15+
useBackButton()
16+
1317
const onSubmit = formValues => {
1418
log.debug(`[LoginScreen]: formValues = ${JSON.stringify(formValues)}`)
1519
props.signIn(formValues)

client/src/components/routes/navbar/navBar.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import {connect, useDispatch} from 'react-redux'
1313

1414
import {
1515
AppBar, Toolbar, IconButton, Typography,
16-
InputBase, Badge, Box
16+
Badge, Box
1717
} from '@material-ui/core';
1818

1919
import useNavBarStyles from "../../../styles/materialUI/navBarStyles";
@@ -35,7 +35,6 @@ import {HTTPError} from "../../ui/error/httpError";
3535
import {BadRequest} from "../../ui/error/badRequest";
3636
import SearchBar from "./searchBar";
3737
import SideBar from "./sideBar";
38-
import ClickAwayListener from "@material-ui/core/ClickAwayListener";
3938

4039
const NavBar = props => {
4140
const classes = useNavBarStyles();

client/src/components/routes/product/filterProductDisplay.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@ import {
1414
} from "../../../actions/types";
1515
import {Box, Grid} from "@material-ui/core";
1616
import Spinner from "../../ui/spinner";
17-
import {BadRequest} from "../../ui/error/badRequest";
1817
import {HTTPError} from "../../ui/error/httpError";
1918
import {SearchMatchesNotFound} from "../../ui/error/searchMatchesNotFound";
19+
import {compareURLWithFilterQuery} from "./filterSideNavbar/helper/helper";
2020

2121
const FilterProductDisplay = props => {
2222
const filterProductsReducer = useSelector(state => state.filterProductsReducer)
@@ -29,6 +29,11 @@ const FilterProductDisplay = props => {
2929

3030
try {
3131
if (filterQuery) {
32+
if(filterProductsReducer.hasOwnProperty("data")
33+
&& compareURLWithFilterQuery(filterQuery) === 0) {
34+
return
35+
}
36+
3237
props.getDataViaAPI(LOAD_FILTER_PRODUCTS, PRODUCT_BY_CATEGORY_DATA_API + filterQuery)
3338
}
3439
} catch (e) {

client/src/components/routes/product/filterSideNavbar/apparelCheckBox.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
import React, {useState} from 'react';
1+
import React, {useEffect, useState} from 'react';
22
import CheckboxList from "../../../ui/checkboxList";
33
import log from 'loglevel';
44
import {useDispatch, useSelector} from "react-redux";
5-
import {ADD_SELECTED_CATEGORY} from "../../../../actions/types";
5+
import {ADD_SELECTED_CATEGORY, SAVE_SORT_LIST} from "../../../../actions/types";
66
import CheckboxMoreButton from "./checkboxMoreButton";
77
import CheckboxSearchBar from "./checkboxSearchBar";
88
import {useSortList} from "./sortListHook";

0 commit comments

Comments
 (0)