Skip to content

Commit 88a6387

Browse files
Add vote feature
1 parent 1b9233c commit 88a6387

File tree

7 files changed

+255
-55
lines changed

7 files changed

+255
-55
lines changed

src/actions/userBusiness.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,8 @@ export const setMyBusinesses = businesses => {
5151
}
5252
}
5353

54-
55-
export const createBusiness = (data) => {
54+
// The promise of a burger party - blog post
55+
export const createBusiness = (data) => {
5656
return dispatch => {
5757
return fetch("http://localhost:3001/api/v1/businesses", {
5858
credentials: "include",
@@ -66,12 +66,13 @@ export const createBusiness = (data) => {
6666
.then(response => {
6767
// console.log("Response" , response);
6868
if (response.error) {
69+
//throw new Error(response.error)
6970
alert(response.error)
7071
} else {
7172
dispatch(addBusiness(response.data))
7273
}
7374
})
74-
.catch(console.log)
75+
.catch(error => alert(error))
7576
}
7677
}
7778

Lines changed: 40 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,29 @@
1-
import React from 'react';
1+
import React, { Component } from 'react';
22
import { connect } from 'react-redux'
33

4+
class CategoryProduct extends Component {
5+
constructor(props){
6+
super(props);
7+
8+
this.state = {
9+
votes: 0
10+
}
11+
12+
// console.log("product", this.props)
13+
}
414

5-
const CategoryProduct = (props) => {
15+
handleProductUpVote = (productId) => {
16+
console.log(productId)
17+
this.setState ({
18+
votes: this.state.votes +1
19+
})
20+
21+
}
622

7-
// console.log("product props", props);
8-
// console.log(props.match.params.id[0])
23+
render() {
924

10-
let product = props.products.products.filter(product => product.id === props.match.params.id)[0]
11-
// console.log("product is", product)
25+
let product = this.props.products.products.filter(product => product.attributes.id === this.props.id)[0]
26+
console.log("product is", product)
1227

1328
let productColors = product ? product.attributes.colors.map(color =>
1429
<div key={color.color_id}>
@@ -18,38 +33,46 @@ const CategoryProduct = (props) => {
1833

1934

2035
return(
21-
<div className="main">
36+
<div className="">
2237
<div className="product-main">
2338
<div className="product-flex">
2439
<div className="product col-5">
25-
<li className="product-image">{product ? <img src={ product.attributes.image } alt="product" ></img> : null}</li>
40+
<li className="product-image">{<img src={ this.props.image } alt="product" ></img>}</li>
2641
</div>
2742
</div>
2843

2944
<div className="product-info col-7">
30-
<li className="product-text"> <b className="titlespacing">Product Name:</b> {product ? product.attributes.name : null}</li>
31-
<li className="product-text"><b className="titlespacing">Description:</b> {product ? product.attributes.description : null}</li>
32-
<li className="product-text"><b className="titlespacing">Item Number:</b> {product ? product.attributes.item_number : null}</li>
45+
<li className="product-text"> <b className="titlespacing">Product Name:</b> { this.props.name }</li>
46+
<li className="product-text"><b className="titlespacing">Description:</b> {this.props.description}</li>
47+
<li className="product-text"><b className="titlespacing">Item Number:</b> {this.props.item_number}</li>
3348

3449
<br></br>
3550
<li className="product-text"><b className="titlespacing">Colors:</b> </li>
36-
{ productColors }
51+
{ productColors }
3752

3853
<br></br>
39-
<li className="product-text"><b className="titlespacing" >Price:</b> ${product ? product.attributes.price : null}</li>
54+
<li className="product-text"><b className="titlespacing" >Price:</b> ${this.props.price}</li>
55+
56+
<button onClick={() => this.handleProductUpVote(`${this.props.id}`)} className="button">Vote</button>
57+
58+
59+
<li className="products-price"> Votes: { this.state.votes }</li>
60+
4061

41-
<br></br>
42-
<br></br>
4362
</div>
4463
</div>
4564
</div>
4665
)
47-
}
4866

67+
}
68+
}
69+
4970
const mapStateToProps = state => {
5071
return {
5172
products: state.productReducer,
5273
};
5374
}
5475

55-
export default connect(mapStateToProps)(CategoryProduct);
76+
export default connect(mapStateToProps)(CategoryProduct);
77+
78+
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
import React from 'react';
2+
import { connect } from 'react-redux'
3+
4+
5+
const CategoryProduct = (props) => {
6+
7+
// console.log("product props", props);
8+
// console.log(props.match.params.id[0])
9+
10+
let product = props.products.products.filter(product => product.id === props.match.params.id)[0]
11+
// console.log("product is", product)
12+
13+
let productColors = product ? product.attributes.colors.map(color =>
14+
<div key={color.color_id}>
15+
<li className="product-text">{color.color_name}</li>
16+
</div>
17+
) : null
18+
19+
20+
return(
21+
<div className="main">
22+
<div className="product-main">
23+
<div className="product-flex">
24+
<div className="product col-5">
25+
<li className="product-image">{product ? <img src={ product.attributes.image } alt="product" ></img> : null}</li>
26+
</div>
27+
</div>
28+
29+
<div className="product-info col-7">
30+
<li className="product-text"> <b className="titlespacing">Product Name:</b> {product ? product.attributes.name : null}</li>
31+
<li className="product-text"><b className="titlespacing">Description:</b> {product ? product.attributes.description : null}</li>
32+
<li className="product-text"><b className="titlespacing">Item Number:</b> {product ? product.attributes.item_number : null}</li>
33+
34+
<br></br>
35+
<li className="product-text"><b className="titlespacing">Colors:</b> </li>
36+
{ productColors }
37+
38+
<br></br>
39+
<li className="product-text"><b className="titlespacing" >Price:</b> ${product ? product.attributes.price : null}</li>
40+
41+
<br></br>
42+
<br></br>
43+
</div>
44+
</div>
45+
</div>
46+
)
47+
}
48+
49+
const mapStateToProps = state => {
50+
return {
51+
products: state.productReducer,
52+
};
53+
}
54+
55+
export default connect(mapStateToProps)(CategoryProduct);
Lines changed: 95 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,28 @@
1-
import React from 'react';
1+
import React, { Component } from 'react';
22
import { Link } from 'react-router-dom'
33
import { connect } from 'react-redux'
4+
import CategoryProduct from './CategoryProduct'
45

56

6-
const CategoryProducts = (props) => {
7+
class CategoryProducts extends Component {
8+
constructor(props){
9+
super(props);
10+
11+
this.state = {
12+
13+
}
14+
}
15+
16+
717

8-
// console.log("categoryProducts", props)
18+
19+
render() {
20+
21+
// console.log("categoryProducts", props)
922
// console.log("category props", props.categories.categories)
1023

11-
let productList = props.match ? props.categories.categories.filter(category => category.id === props.match.params.id)[0] : null
12-
const CategoryId = props.match ? props.match.params.id[0] : null
24+
let productList = this.props.match ? this.props.categories.categories.filter(category => category.id === this.props.match.params.id)[0] : null
25+
const CategoryId = this.props.match ? this.props.match.params.id[0] : null
1326
const CategoryName = productList ? <li className="category-name">{productList.attributes.name}</li> : null
1427

1528
// console.log("products", productList);
@@ -18,39 +31,90 @@ const CategoryProducts = (props) => {
1831
return a.subcategory_id - b.subcategory_id;
1932
})
2033
: null
21-
// console.log("sortedProducts", sortedProducts)
34+
console.log("sortedProducts", sortedProducts)
35+
2236

2337

24-
let categoryProducts = sortedProducts ? sortedProducts.map(product =>
25-
<div key={product.id}>
26-
<Link to={`/category/${CategoryId}/products/${product.id}` }>
27-
<li className="products-image"> <img src={ product.image } alt="product" ></img></li>
28-
<li className="products-text"> { product.name } <br></br></li>
29-
</Link>
30-
<li className="products-price"> ${ product.price }</li>
31-
</div>
32-
)
38+
let categoryProducts = sortedProducts ? sortedProducts.map(product => (
39+
<CategoryProduct
40+
key={product.id}
41+
id={product.id}
42+
image={product.image}
43+
price={product.price}
44+
name={product.name}
45+
votes={product.votes}
46+
description={product.description}
47+
item_number={product.item_number}
48+
/>
49+
))
3350
: null
3451

3552

36-
return (
37-
38-
<div className="products">
39-
40-
<h1 className="products">{CategoryName}</h1>
53+
return (
54+
4155
<div className="products">
42-
{categoryProducts}
43-
44-
</div>
45-
</div>
46-
)
56+
<h1 className="products">{CategoryName}</h1>
57+
<div className="">
58+
{categoryProducts}
59+
60+
</div>
61+
</div>
62+
)
63+
64+
}
4765
}
48-
66+
4967
const mapStateToProps = state => {
50-
return {
51-
categories: state.categoryReducer,
52-
subcategories: state.subcategoryReducer,
53-
};
68+
return {
69+
categories: state.categoryReducer,
70+
subcategories: state.subcategoryReducer,
71+
};
5472
}
5573

56-
export default connect(mapStateToProps)(CategoryProducts);
74+
export default connect(mapStateToProps)(CategoryProducts);
75+
76+
77+
78+
79+
// const CategoryProducts = (props) => {
80+
81+
// // console.log("categoryProducts", props)
82+
// // console.log("category props", props.categories.categories)
83+
84+
// let productList = props.match ? props.categories.categories.filter(category => category.id === props.match.params.id)[0] : null
85+
// const CategoryId = props.match ? props.match.params.id[0] : null
86+
// const CategoryName = productList ? <li className="category-name">{productList.attributes.name}</li> : null
87+
88+
// // console.log("products", productList);
89+
90+
// let sortedProducts = productList ? productList.attributes.products.sort(function(a,b){
91+
// return a.subcategory_id - b.subcategory_id;
92+
// })
93+
// : null
94+
// // console.log("sortedProducts", sortedProducts)
95+
96+
97+
// let categoryProducts = sortedProducts ? sortedProducts.map(product =>
98+
// <div key={product.id}>
99+
// <Link to={`/category/${CategoryId}/products/${product.id}` }>
100+
// <li className="products-image"> <img src={ product.image } alt="product" ></img></li>
101+
// <li className="products-text"> { product.name } <br></br></li>
102+
// </Link>
103+
// <li className="products-price"> ${ product.price }</li>
104+
// <button onClick={this.handleClick}>Vote</button>
105+
// <li>0</li>
106+
// </div>
107+
// )
108+
// : null
109+
110+
111+
// }
112+
113+
// const mapStateToProps = state => {
114+
// return {
115+
// categories: state.categoryReducer,
116+
// subcategories: state.subcategoryReducer,
117+
// };
118+
// }
119+
120+
// export default connect(mapStateToProps)(CategoryProducts);
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
import React from 'react';
2+
import { Link } from 'react-router-dom'
3+
import { connect } from 'react-redux'
4+
5+
6+
const CategoryProducts = (props) => {
7+
8+
// console.log("categoryProducts", props)
9+
// console.log("category props", props.categories.categories)
10+
11+
let productList = props.match ? props.categories.categories.filter(category => category.id === props.match.params.id)[0] : null
12+
const CategoryId = props.match ? props.match.params.id[0] : null
13+
const CategoryName = productList ? <li className="category-name">{productList.attributes.name}</li> : null
14+
15+
// console.log("products", productList);
16+
17+
let sortedProducts = productList ? productList.attributes.products.sort(function(a,b){
18+
return a.subcategory_id - b.subcategory_id;
19+
})
20+
: null
21+
// console.log("sortedProducts", sortedProducts)
22+
23+
24+
let categoryProducts = sortedProducts ? sortedProducts.map(product =>
25+
<div key={product.id}>
26+
<Link to={`/category/${CategoryId}/products/${product.id}` }>
27+
<li className="products-image"> <img src={ product.image } alt="product" ></img></li>
28+
<li className="products-text"> { product.name } <br></br></li>
29+
</Link>
30+
<li className="products-price"> ${ product.price }</li>
31+
</div>
32+
)
33+
: null
34+
35+
36+
return (
37+
38+
<div className="products">
39+
40+
<h1 className="products">{CategoryName}</h1>
41+
<div className="products">
42+
{categoryProducts}
43+
44+
</div>
45+
</div>
46+
)
47+
}
48+
49+
const mapStateToProps = state => {
50+
return {
51+
categories: state.categoryReducer,
52+
subcategories: state.subcategoryReducer,
53+
};
54+
}
55+
56+
export default connect(mapStateToProps)(CategoryProducts);

src/store.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ const reducer = combineReducers ({
1818

1919
const composeEnhancer = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;
2020

21+
// CreateStore to Initialize the store and pass in reducers and middleware for asynchronous functions when fetching data.
2122
const store = createStore(reducer, composeEnhancer(applyMiddleware(thunk)))
2223

2324
export default store

0 commit comments

Comments
 (0)