Skip to content

Commit

Permalink
feat: Switch/Toggle widget
Browse files Browse the repository at this point in the history
  • Loading branch information
pixelastic committed Sep 8, 2015
1 parent 77434f0 commit 3b2a450
Show file tree
Hide file tree
Showing 3 changed files with 73 additions and 1 deletion.
28 changes: 28 additions & 0 deletions components/Toggle.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
var React = require('react');

class Toggle extends React.Component {
render() {
var toggleFilter = this.props.toggleFilter;
var label = this.props.label;
var isRefined = this.props.isRefined;

return (
<label>
<input
checked={isRefined}
onChange={toggleFilter}
type="checkbox"
/>
{label}
</label>
);
}
}

Toggle.propTypes = {
toggleFilter: React.PropTypes.func,
label: React.PropTypes.string,
isRefined: React.PropTypes.bool
};

module.exports = Toggle;
3 changes: 2 additions & 1 deletion index.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ module.exports = {
multipleChoiceList: require('./widgets/multiple-choice-list'),
pagination: require('./widgets/pagination'),
searchBox: require('./widgets/search-box'),
stats: require('./widgets/stats')
stats: require('./widgets/stats'),
toggle: require('./widgets/toggle')
}
};
43 changes: 43 additions & 0 deletions widgets/toggle.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
var React = require('react');

var utils = require('../lib/widget-utils.js');

function toggle({
container = null,
facetName = null,
label = null
}) {
var Toggle = require('../components/Toggle');

var containerNode = utils.getContainerNode(container);
var usage = 'Usage: toggle({container, facetName, label})';

if (container === null || facetName === null || label === null) {
throw new Error(usage);
}

return {
getConfiguration: () => ({
facets: [facetName]
}),
render: function(results, state, helper) {
var isRefined = helper.hasRefinements(facetName);

function toggleFilter() {
var methodToCall = isRefined ? 'removeFacetRefinement' : 'addFacetRefinement';
helper[methodToCall](facetName, true).search();
}

React.render(
<Toggle
isRefined={isRefined}
toggleFilter={toggleFilter}
label={label}
/>,
containerNode
);
}
};
}

module.exports = toggle;

0 comments on commit 3b2a450

Please sign in to comment.