Skip to content

Commit d801807

Browse files
committed
feat: Add Toggle example
1 parent 3b2a450 commit d801807

File tree

6 files changed

+56
-14
lines changed

6 files changed

+56
-14
lines changed

components/Toggle.js

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,36 @@
11
var React = require('react');
22

3+
var Template = require('./Template');
4+
var debounce = require('lodash/function/debounce');
5+
36
class Toggle extends React.Component {
47
render() {
5-
var toggleFilter = this.props.toggleFilter;
6-
var label = this.props.label;
7-
var isRefined = this.props.isRefined;
8+
var template = this.props.template;
9+
// When a checkbox is wrapped inside a label, click events fire twice, so we
10+
// debounce it to only keep the first one
11+
var toggleFilter = debounce(this.props.toggleFilter, 0, {
12+
leading: true,
13+
trailing: false
14+
});
15+
var data = {
16+
label: this.props.label,
17+
isRefined: this.props.isRefined
18+
};
819

920
return (
10-
<label>
11-
<input
12-
checked={isRefined}
13-
onChange={toggleFilter}
14-
type="checkbox"
15-
/>
16-
{label}
17-
</label>
21+
<span onClick={toggleFilter}>
22+
<Template data={data} template={template} />
23+
</span>
1824
);
1925
}
2026
}
2127

2228
Toggle.propTypes = {
23-
toggleFilter: React.PropTypes.func,
29+
template: React.PropTypes.oneOfType([
30+
React.PropTypes.string,
31+
React.PropTypes.func
32+
]).isRequired,
33+
toggleFilter: React.PropTypes.func.isRequired,
2434
label: React.PropTypes.string,
2535
isRefined: React.PropTypes.bool
2636
};

example/app.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,15 @@ search.addWidget(
5252
})
5353
);
5454

55+
search.addWidget(
56+
instantsearch.widgets.toggle({
57+
container: '#free_shipping',
58+
facetName: 'free_shipping',
59+
label: 'Free Shipping',
60+
template: require('./templates/free_shipping.html')
61+
})
62+
);
63+
5564
search.addWidget(
5665
instantsearch.widgets.menu({
5766
container: '#categories',

example/index.html

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,15 @@ <h1>Instant search demo <small>using instantsearch.js</small></h1>
1818
<div class="panel-body" id="search-box"></div>
1919
</div>
2020

21+
<div class="panel panel-default">
22+
<div class="panel-heading">Toggle filters</div>
23+
<div class="panel-body">
24+
<ul class="nav nav-stacked">
25+
<li><div id="free_shipping"></div></li>
26+
</ul>
27+
</div>
28+
</div>
29+
2130
<div class="panel panel-default">
2231
<div class="panel-heading">Categories</div>
2332
<div id="categories" class="list-group"></div>
@@ -27,6 +36,7 @@ <h1>Instant search demo <small>using instantsearch.js</small></h1>
2736
<div class="panel-heading">Brands</div>
2837
<div class="panel-body" id="brands"></div>
2938
</div>
39+
3040
</div>
3141
<div class="col-md-9">
3242
<div id="stats"></div>

example/templates/free_shipping.html

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<div class="checkbox">
2+
<label>
3+
<input type="checkbox" {{#isRefined}}checked{{/isRefined}} />
4+
<span class="badge pull-right">{{label}}</span>
5+
</label>
6+
</div>
7+
8+
9+

example/templates/hit.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
<h3 class="pull-right text-right text-info">${{price}}</h3>
88
<h4>{{{_highlightResult.name.value}}}</h4>
99
<p>{{{_highlightResult.description.value}}}</p>
10+
{{#free_shipping}}<span class="badge pull-right">Free Shipping</span>{{/free_shipping}}
1011
</div>
1112
</div>
1213
</div>

widgets/toggle.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
var React = require('react');
22

33
var utils = require('../lib/widget-utils.js');
4+
var defaultTemplate = '<label>{{label}}<input type="checkbox" {{#isRefined}}checked{{/isRefined}} /></label>';
45

56
function toggle({
67
container = null,
78
facetName = null,
8-
label = null
9+
label = null,
10+
template = defaultTemplate
911
}) {
1012
var Toggle = require('../components/Toggle');
1113

@@ -31,8 +33,9 @@ function toggle({
3133
React.render(
3234
<Toggle
3335
isRefined={isRefined}
34-
toggleFilter={toggleFilter}
3536
label={label}
37+
template={template}
38+
toggleFilter={toggleFilter}
3639
/>,
3740
containerNode
3841
);

0 commit comments

Comments
 (0)