Skip to content

Commit 3b2a450

Browse files
committed
feat: Switch/Toggle widget
1 parent 77434f0 commit 3b2a450

File tree

3 files changed

+73
-1
lines changed

3 files changed

+73
-1
lines changed

components/Toggle.js

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
var React = require('react');
2+
3+
class Toggle extends React.Component {
4+
render() {
5+
var toggleFilter = this.props.toggleFilter;
6+
var label = this.props.label;
7+
var isRefined = this.props.isRefined;
8+
9+
return (
10+
<label>
11+
<input
12+
checked={isRefined}
13+
onChange={toggleFilter}
14+
type="checkbox"
15+
/>
16+
{label}
17+
</label>
18+
);
19+
}
20+
}
21+
22+
Toggle.propTypes = {
23+
toggleFilter: React.PropTypes.func,
24+
label: React.PropTypes.string,
25+
isRefined: React.PropTypes.bool
26+
};
27+
28+
module.exports = Toggle;

index.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ module.exports = {
66
multipleChoiceList: require('./widgets/multiple-choice-list'),
77
pagination: require('./widgets/pagination'),
88
searchBox: require('./widgets/search-box'),
9-
stats: require('./widgets/stats')
9+
stats: require('./widgets/stats'),
10+
toggle: require('./widgets/toggle')
1011
}
1112
};

widgets/toggle.js

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
var React = require('react');
2+
3+
var utils = require('../lib/widget-utils.js');
4+
5+
function toggle({
6+
container = null,
7+
facetName = null,
8+
label = null
9+
}) {
10+
var Toggle = require('../components/Toggle');
11+
12+
var containerNode = utils.getContainerNode(container);
13+
var usage = 'Usage: toggle({container, facetName, label})';
14+
15+
if (container === null || facetName === null || label === null) {
16+
throw new Error(usage);
17+
}
18+
19+
return {
20+
getConfiguration: () => ({
21+
facets: [facetName]
22+
}),
23+
render: function(results, state, helper) {
24+
var isRefined = helper.hasRefinements(facetName);
25+
26+
function toggleFilter() {
27+
var methodToCall = isRefined ? 'removeFacetRefinement' : 'addFacetRefinement';
28+
helper[methodToCall](facetName, true).search();
29+
}
30+
31+
React.render(
32+
<Toggle
33+
isRefined={isRefined}
34+
toggleFilter={toggleFilter}
35+
label={label}
36+
/>,
37+
containerNode
38+
);
39+
}
40+
};
41+
}
42+
43+
module.exports = toggle;

0 commit comments

Comments
 (0)