Skip to content

Commit 8f25eb3

Browse files
committed
Fixed issues
1 parent b86978d commit 8f25eb3

File tree

8 files changed

+125
-113
lines changed

8 files changed

+125
-113
lines changed

src/assets/scss/components/index.scss

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,4 @@
2121
@import 'footer';
2222
@import 'alerts';
2323
@import 'search';
24-
@import 'productSelect.scss';
24+
@import 'productList.scss';

src/assets/scss/components/productSelect.scss renamed to src/assets/scss/components/productList.scss

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1-
.product-select-container {
1+
.product-list-container {
22
text-align: center;
33

4-
.product-select {
4+
.product-list {
55
margin-bottom: 10px;
6+
min-height: 160px;
67
width: 100%;
78
}
89
}
@@ -11,10 +12,11 @@
1112
border-radius: 5px;
1213
box-shadow: 0px 2px 15px $shadow-color;
1314
margin: 8px 15px;
15+
min-width: 240px;
1416
padding: 10px;
1517
text-transform: uppercase;
1618
transition: 0.2s;
17-
width: 260px;
19+
width: 28%;
1820

1921
.circle-container {
2022
width: 100%;
@@ -30,10 +32,11 @@
3032
}
3133

3234
.product-logo {
33-
width: 230px;
35+
min-height: 80px;
36+
width: 260px;
3437

3538
img {
36-
width: 230px;
39+
width: 260px;
3740
}
3841
}
3942

src/components/Pagination.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import React, { useState, useEffect } from 'react'
22

33
const Pagination = (props) => {
4-
const { getPage, storyCount, status, product } = props
4+
const { getPage, storyCount, status, productQuery } = props
55

66
const [currNumber, setCurrNumber] = useState(1)
77

@@ -13,7 +13,7 @@ const Pagination = (props) => {
1313
getPage(1)
1414
}
1515
resetPage()
16-
}, [status, product, getPage])
16+
}, [status, productQuery, getPage])
1717

1818
useEffect(() => {
1919
if (storyCount) {

src/components/ProductList.jsx

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
import React, { useState, useEffect } from 'react'
2+
import Skeleton from 'react-loading-skeleton'
3+
import userStory from '../services/user_story'
4+
5+
const ProductSkeleton = () => {
6+
return (
7+
<div className='flex flex-row flex-center product-card'>
8+
<div className='product-logo'>
9+
<Skeleton height={80} />
10+
</div>
11+
<div className='circle-container'>
12+
<div className='circle'></div>
13+
</div>
14+
</div>
15+
)
16+
}
17+
18+
const ProductCard = ({ product, selected, setProduct }) => {
19+
return (
20+
<div
21+
className={`flex flex-center flex-align-center product-card ${
22+
selected ? 'product-card-selected' : ''
23+
}`}
24+
data-cy={`${product.Name.split(' ').join('-')}-card`}
25+
onClick={() => {
26+
if (!selected) {
27+
setProduct(product.Name)
28+
} else {
29+
setProduct('All')
30+
}
31+
}}
32+
>
33+
<div className='product-logo'>
34+
<img src={product.logo?.url} alt={`${product.Name} logo`} />
35+
</div>
36+
<div className='circle-container'>
37+
<div className='circle'></div>
38+
</div>
39+
</div>
40+
)
41+
}
42+
43+
const ProductList = ({ setProductQuery }) => {
44+
const [productCount, setProductCount] = useState(3)
45+
46+
const [product, setProduct] = useState('All')
47+
48+
const [products, setProducts] = useState(null)
49+
50+
useEffect(() => {
51+
const fetchProductCount = async () => {
52+
const response = await userStory.getProductCount()
53+
setProductCount(response.data.data.productsConnection.aggregate.count)
54+
}
55+
const fetchProducts = async () => {
56+
const response = await userStory.getProducts()
57+
return response.data.data.product !== null
58+
? setProducts([...response.data.data.products])
59+
: setProducts([])
60+
}
61+
fetchProductCount()
62+
fetchProducts()
63+
}, [])
64+
65+
useEffect(() => {
66+
if (product !== 'All') {
67+
setProductQuery(`product : {Name: "${product}"}`)
68+
} else {
69+
setProductQuery(``)
70+
}
71+
}, [product, setProductQuery])
72+
73+
return (
74+
<div className='product-list-container'>
75+
<h4>Select a Product</h4>
76+
<div className='flex flex-row flex-center product-list'>
77+
{!products &&
78+
Array(productCount)
79+
.fill()
80+
.map((_, index) => <ProductSkeleton key={index} />)}
81+
{products !== null &&
82+
products.map((p) => (
83+
<ProductCard
84+
key={p.Name}
85+
product={p}
86+
selected={p.Name === product}
87+
setProduct={setProduct}
88+
/>
89+
))}
90+
</div>
91+
</div>
92+
)
93+
}
94+
95+
export default ProductList

src/components/ProductSelect.jsx

Lines changed: 0 additions & 66 deletions
This file was deleted.

src/components/Stories.js

Lines changed: 5 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import SearchInput from '../modules/SearchInput'
99

1010
import Lists from '../utils/Lists'
1111
import userStory from '../services/user_story'
12-
import ProductSelect from './ProductSelect'
12+
import ProductList from './ProductList'
1313

1414
const Stories = ({ authorId, followerId }) => {
1515
const [currentStateSelected, selectState] = useState('Under consideration')
@@ -20,14 +20,10 @@ const Stories = ({ authorId, followerId }) => {
2020

2121
const [status, setStatus] = useState('Under consideration')
2222

23-
const [product, setProduct] = useState('All')
24-
2523
const [sort, setSort] = useState('Most Voted')
2624

2725
const [category, setCategory] = useState('All')
2826

29-
const [products, setProducts] = useState(null)
30-
3127
const [categories, setCategories] = useState([])
3228

3329
const [searchTerm, setSearchTerm] = useState('')
@@ -80,7 +76,6 @@ const Stories = ({ authorId, followerId }) => {
8076
fetchStoryCount()
8177
}, [
8278
currentStateSelected,
83-
product,
8479
categoryQuery,
8580
productQuery,
8681
searchQuery,
@@ -90,11 +85,6 @@ const Stories = ({ authorId, followerId }) => {
9085
])
9186

9287
useEffect(() => {
93-
if (product !== 'All') {
94-
setProductQuery(`product : {Name: "${product}"}`)
95-
} else {
96-
setProductQuery(``)
97-
}
9888
if (category !== 'All') {
9989
setCategoryQuery(`Category : "${category}"`)
10090
} else {
@@ -106,7 +96,7 @@ const Stories = ({ authorId, followerId }) => {
10696
if (userTerm === '') {
10797
setAuthorQuery('')
10898
}
109-
}, [product, category, searchTerm, userTerm])
99+
}, [category, searchTerm, userTerm])
110100

111101
useEffect(() => {
112102
const fetchStories = async () => {
@@ -134,16 +124,6 @@ const Stories = ({ authorId, followerId }) => {
134124
followerId
135125
])
136126

137-
useEffect(() => {
138-
const fetchProducts = async () => {
139-
const response = await userStory.getProducts()
140-
return response.data.data.product !== null
141-
? setProducts([...response.data.data.products])
142-
: setProducts([])
143-
}
144-
fetchProducts()
145-
}, [])
146-
147127
useEffect(() => {
148128
const fetchCategories = async () => {
149129
const response = await userStory.getCategories()
@@ -180,11 +160,7 @@ const Stories = ({ authorId, followerId }) => {
180160

181161
return (
182162
<div>
183-
<ProductSelect
184-
product={product}
185-
products={products}
186-
setProduct={setProduct}
187-
/>
163+
<ProductList setProductQuery={setProductQuery} />
188164
<div className='roadmap-container'>
189165
<div className='roadmap'>
190166
{Lists.stateList &&
@@ -251,18 +227,13 @@ const Stories = ({ authorId, followerId }) => {
251227
</div>
252228
</div>
253229
<div className='stories-div'>
254-
<StoriesList
255-
stories={stories}
256-
state={currentStateSelected}
257-
product={product}
258-
isLoading={promiseInProgress}
259-
/>
230+
<StoriesList stories={stories} isLoading={promiseInProgress} />
260231
</div>
261232
<Pagination
262233
getPage={getPage}
263234
storyCount={storyCount}
264235
status={currentStateSelected}
265-
product={product}
236+
productQuery={productQuery}
266237
/>
267238
</div>
268239
)

src/components/StoriesList.js

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ const StorySkeleton = () => (
4141
)
4242

4343
const StoriesList = (props) => {
44-
const { stories, state, product, isLoading } = props
44+
const { stories, isLoading } = props
4545

4646
if (isLoading) {
4747
return (
@@ -57,8 +57,7 @@ const StoriesList = (props) => {
5757
<div className='flex flex-column' data-cy='stories'>
5858
{stories && stories.length ? (
5959
stories.map((story, key) => {
60-
return story.user_story_status?.Status === state &&
61-
(story.product.Name === product || product === 'All') ? (
60+
return (
6261
<div className='story' key={key}>
6362
<Vote story={story} />
6463
<div
@@ -108,8 +107,6 @@ const StoriesList = (props) => {
108107
</div>
109108
</div>
110109
</div>
111-
) : (
112-
''
113110
)
114111
})
115112
) : (

src/services/user_story.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,18 @@ const userStory = {
198198
}
199199
return apiCall('/graphql', productQuery)
200200
},
201+
getProductCount: () => {
202+
const productCountQuery = {
203+
query: `query {
204+
productsConnection {
205+
aggregate {
206+
count
207+
}
208+
}
209+
}`
210+
}
211+
return apiCall('/graphql', productCountQuery)
212+
},
201213
getProductsWithTemplates: () => {
202214
const productQuery = {
203215
query: `query {

0 commit comments

Comments
 (0)