Skip to content

Commit 5c45f38

Browse files
author
DEVfancybear
committed
add search
1 parent 1ed1147 commit 5c45f38

File tree

4 files changed

+56
-119
lines changed

4 files changed

+56
-119
lines changed

src/actions/index.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,3 +23,14 @@ export const fetchDataToFilter = name => {
2323
});
2424
};
2525
};
26+
export const search = keyword => {
27+
return async dispatch => {
28+
const resp = await axios.get(`${URL_API}?q=${keyword}`);
29+
console.log(`${URL_API}?q=${keyword}`)
30+
const data = await resp.data;
31+
dispatch({
32+
type: types.SEARCH,
33+
payload: data
34+
});
35+
};
36+
};

src/components/ShopSideBar.js

Lines changed: 37 additions & 119 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,14 @@
11
import React, { Component } from "react";
2-
import { Form } from "react-bootstrap";
2+
import { Form, InputGroup, FormControl, Button } from "react-bootstrap";
33
import { connect } from "react-redux";
4-
import { fetchDataToFilter, fetchDataToServer } from "../actions/index";
4+
import { fetchDataToFilter, fetchDataToServer, search } from "../actions/index";
55
class ShopSideBar extends Component {
6+
constructor(props) {
7+
super(props);
8+
this.state = {
9+
keyword: ""
10+
};
11+
}
612
filterByName = event => {
713
const filter = event.target.value;
814
let name = "";
@@ -22,6 +28,15 @@ class ShopSideBar extends Component {
2228
}
2329
this.props.fetchDataToFilter(name);
2430
};
31+
onChange = e => {
32+
this.setState({
33+
keyword: e.target.value
34+
});
35+
};
36+
onSearch = e => {
37+
e.preventDefault();
38+
this.props.search(this.state.keyword);
39+
};
2540
render() {
2641
return (
2742
<div>
@@ -65,123 +80,23 @@ class ShopSideBar extends Component {
6580
</li>
6681
</ul>
6782

68-
<h4 className="m-text14 p-b-32">Filters</h4>
69-
<div className="filter-price p-t-22 p-b-50 bo3">
70-
<div className="m-text15 p-b-17">Price</div>
71-
<div className="wra-filter-bar">
72-
<div id="filter-bar" />
73-
</div>
74-
<div className="flex-sb-m flex-w p-t-16">
75-
<div className="w-size11">
76-
<button className="flex-c-m size4 bg7 bo-rad-15 hov1 s-text14 trans-0-4">
77-
Filter
78-
</button>
79-
</div>
80-
<div className="s-text3 p-t-10 p-b-10">
81-
Range: $<span id="value-lower">610</span> - $
82-
<span id="value-upper">980</span>
83-
</div>
84-
</div>
85-
</div>
86-
<div className="filter-color p-t-22 p-b-50 bo3">
87-
<div className="m-text15 p-b-12">Color</div>
88-
<ul className="flex-w">
89-
<li className="m-r-10">
90-
<input
91-
className="checkbox-color-filter"
92-
id="color-filter1"
93-
type="checkbox"
94-
name="color-filter1"
95-
/>
96-
<label
97-
className="color-filter color-filter1"
98-
htmlFor="color-filter1"
99-
/>
100-
</li>
101-
<li className="m-r-10">
102-
<input
103-
className="checkbox-color-filter"
104-
id="color-filter2"
105-
type="checkbox"
106-
name="color-filter2"
107-
/>
108-
<label
109-
className="color-filter color-filter2"
110-
htmlFor="color-filter2"
111-
/>
112-
</li>
113-
<li className="m-r-10">
114-
<input
115-
className="checkbox-color-filter"
116-
id="color-filter3"
117-
type="checkbox"
118-
name="color-filter3"
119-
/>
120-
<label
121-
className="color-filter color-filter3"
122-
htmlFor="color-filter3"
123-
/>
124-
</li>
125-
<li className="m-r-10">
126-
<input
127-
className="checkbox-color-filter"
128-
id="color-filter4"
129-
type="checkbox"
130-
name="color-filter4"
131-
/>
132-
<label
133-
className="color-filter color-filter4"
134-
htmlFor="color-filter4"
135-
/>
136-
</li>
137-
<li className="m-r-10">
138-
<input
139-
className="checkbox-color-filter"
140-
id="color-filter5"
141-
type="checkbox"
142-
name="color-filter5"
143-
/>
144-
<label
145-
className="color-filter color-filter5"
146-
htmlFor="color-filter5"
147-
/>
148-
</li>
149-
<li className="m-r-10">
150-
<input
151-
className="checkbox-color-filter"
152-
id="color-filter6"
153-
type="checkbox"
154-
name="color-filter6"
155-
/>
156-
<label
157-
className="color-filter color-filter6"
158-
htmlFor="color-filter6"
159-
/>
160-
</li>
161-
<li className="m-r-10">
162-
<input
163-
className="checkbox-color-filter"
164-
id="color-filter7"
165-
type="checkbox"
166-
name="color-filter7"
167-
/>
168-
<label
169-
className="color-filter color-filter7"
170-
htmlFor="color-filter7"
171-
/>
172-
</li>
173-
</ul>
174-
</div>
175-
<div className="search-product pos-relative bo4 of-hidden">
176-
<input
177-
className="s-text7 size6 p-l-23 p-r-50"
178-
type="text"
179-
name="search-product"
180-
placeholder="Search Products..."
181-
/>
182-
<button className="flex-c-m size5 ab-r-m color2 color0-hov trans-0-4">
183-
<i className="fs-12 fa fa-search" aria-hidden="true" />
184-
</button>
83+
<h4 className="m-text14 p-b-32">Search</h4>
84+
<div className="filter-price p-t-22 p-b-50">
85+
<InputGroup className="mb-3">
86+
<FormControl
87+
placeholder="Search"
88+
aria-label="Search"
89+
aria-describedby="basic-addon2"
90+
name="keyword"
91+
value={this.state.keyword}
92+
onChange={e => this.onChange(e)}
93+
/>
94+
<InputGroup.Append>
95+
<Button variant="outline-secondary" onClick={this.onSearch}>
96+
Search
97+
</Button>
98+
</InputGroup.Append>
99+
</InputGroup>
185100
</div>
186101
</div>
187102
</div>
@@ -195,6 +110,9 @@ const mapDispatchToProps = (dispatch, props) => {
195110
},
196111
fetchDataToServer: () => {
197112
dispatch(fetchDataToServer());
113+
},
114+
search: keyword => {
115+
dispatch(search(keyword));
198116
}
199117
};
200118
};

src/constants/ActionTypes.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,5 @@
22
export const FETCH_DATA_TO_SERVER = "FETCH_DATA_TO_SERVER";
33
//get data and filter
44
export const FETCH_DATA_IN_FILTER = "FETCH_DATA_IN_FILTER";
5+
// get data and search
6+
export const SEARCH = "SEARCH";

src/reducers/rootReducer.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,12 @@ export default (state = initialState, action) => {
1616
products: action.payload
1717
};
1818
}
19+
case types.SEARCH: {
20+
return {
21+
...state,
22+
products: action.payload
23+
};
24+
}
1925
default:
2026
return state;
2127
}

0 commit comments

Comments
 (0)