Skip to content

Commit 50b8d5b

Browse files
Issue #20: Selected filters not reflected in product grid (#21)
* Filtering improvements * Update .gitignore --------- Co-authored-by: loriotpiroloriol <[email protected]>
1 parent 5e042c8 commit 50b8d5b

File tree

4 files changed

+58
-38
lines changed

4 files changed

+58
-38
lines changed

gui/.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,4 @@
2121
npm-debug.log*
2222
yarn-debug.log*
2323
yarn-error.log*
24+
yarn.lock

gui/src/query.ts

+34
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import { getProducts } from './api';
2+
3+
interface Props {
4+
products: any[];
5+
setProducts: (state: any) => void;
6+
gender: string;
7+
setGender: (state: any) => void;
8+
category: string;
9+
setCategory: (state: any) => void;
10+
total: number;
11+
setTotal: (state: any) => void;
12+
}
13+
14+
let skip = 0;
15+
const limit = 15;
16+
17+
export const queryProducts = async (props: Props, gender: string, category: string) => {
18+
try {
19+
const result = await getProducts(limit, skip, gender, category);
20+
props.setProducts(result.products)
21+
props.setTotal(result.total)
22+
} catch (err) {
23+
console.log(err);
24+
}
25+
};
26+
27+
export const queryProductsWithLimit = async (props: Props) => {
28+
try {
29+
skip = skip + limit;
30+
queryProducts(props, props.gender, props.category);
31+
} catch (err) {
32+
console.log(err);
33+
};
34+
};

gui/src/radio.tsx

+11-5
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,19 @@ import Typography from '@mui/material/Typography';
99
import { makeStyles } from '@material-ui/core/styles';
1010
import useCheckMobileScreen from './mobile';
1111
import Tooltip from '@mui/material/Tooltip';
12+
import { queryProducts } from './query';
1213

1314
interface Props {
14-
gender: string,
15-
category: string,
16-
setGender: (state: any) => void;
17-
setCategory: (state: any) => void;
15+
products: any[];
16+
setProducts: (state: any) => void;
17+
gender: string;
18+
setGender: (state: any) => void;
19+
category: string;
20+
setCategory: (state: any) => void;
21+
total: number;
22+
setTotal: (state: any) => void;
1823
}
1924

20-
2125
const useStyles = makeStyles((theme) => ({
2226
popover: {
2327
padding: theme.spacing(1),
@@ -58,13 +62,15 @@ export const TagRadios = (props: Props) => {
5862
props.setGender("");
5963
} else {
6064
props.setGender(event.target.value);
65+
queryProducts(props, event.target.value, props.category)
6166
}
6267
}
6368
const setProductCategory = (event: any) =>{
6469
if (event.target.value === props.category) {
6570
props.setCategory("");
6671
} else {
6772
props.setCategory(event.target.value);
73+
queryProducts(props, props.gender, event.target.value)
6874
}
6975
}
7076
return (

gui/src/views/Home.tsx

+12-33
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
1-
import { useState, useEffect } from 'react';
2-
import { getProducts } from '../api';
3-
import { useNavigate } from 'react-router-dom';
1+
import { useEffect } from 'react';
42
import { Card } from "./Card"
53
import { TagRadios } from '../radio';
64
import { Chip } from '@material-ui/core';
75
import Tooltip from '@mui/material/Tooltip';
6+
import { queryProducts, queryProductsWithLimit } from '../query';
87

98
/* eslint-disable jsx-a11y/anchor-is-valid */
109
/* eslint-disable @typescript-eslint/no-unused-vars */
@@ -20,38 +19,13 @@ interface Props {
2019
setTotal: (state: any) => void;
2120
}
2221

23-
2422
export const Home = (props: Props) => {
25-
const [error, setError] = useState<string>('');
26-
const [skip, setSkip] = useState(0);
27-
const [limit, setLimit] = useState(15);
28-
const Navigate = useNavigate();
29-
30-
const queryProducts = async () => {
31-
try {
32-
const result = await getProducts(limit, skip, props.gender, props.category);
33-
props.setProducts(result.products)
34-
props.setTotal(result.total)
35-
} catch (err) {
36-
setError(String(err));
37-
}
38-
};
39-
40-
const queryProductsWithLimit = async () => {
41-
try {
42-
setSkip(skip + limit);
43-
queryProducts();
44-
} catch (err) {
45-
console.log(err);
46-
};
47-
};
48-
4923
// Execute this one when the component loads up
5024
useEffect(() => {
5125
// clear filters
5226
props.setGender("");
5327
props.setCategory("");
54-
queryProductsWithLimit();
28+
queryProductsWithLimit(props);
5529
}, []);
5630

5731
return (
@@ -72,14 +46,19 @@ export const Home = (props: Props) => {
7246
<TagRadios
7347
gender={props.gender}
7448
category={props.category}
49+
products={props.products}
50+
total={props.total}
7551
setGender={props.setGender}
76-
setCategory={props.setCategory} />
52+
setCategory={props.setCategory}
53+
setProducts={props.setProducts}
54+
setTotal={props.setTotal}
55+
/>
7756
</div>
7857
): (
7958
<></>
8059
)}
8160
<Tooltip title="Fetch more products from Redis" arrow>
82-
<a className="btn btn-primary m-2" onClick={() => queryProductsWithLimit()}>
61+
<a className="btn btn-primary m-2" onClick={() => queryProductsWithLimit(props)}>
8362
Load More Products
8463
</a>
8564
</Tooltip>
@@ -102,7 +81,7 @@ export const Home = (props: Props) => {
10281
variant='outlined'
10382
clickable
10483
color='primary'
105-
onDelete={() => {props.setCategory(""); queryProducts()}}
84+
onDelete={() => {props.setCategory(""); queryProducts(props, props.gender, "")}}
10685
disabled={props.category == ''}
10786
/>
10887
):(
@@ -115,7 +94,7 @@ export const Home = (props: Props) => {
11594
variant='outlined'
11695
clickable
11796
color='primary'
118-
onDelete={() => {props.setGender(""); queryProducts()}}
97+
onDelete={() => {props.setGender(""); queryProducts(props, "", props.category)}}
11998
disabled={props.gender == ''}
12099
/>
121100
):(

0 commit comments

Comments
 (0)