Skip to content

Commit

Permalink
feat(rangeSlider): add headerFooter decorator
Browse files Browse the repository at this point in the history
  • Loading branch information
vvo committed Sep 24, 2015
1 parent 8a70c7d commit 19090c3
Show file tree
Hide file tree
Showing 6 changed files with 53 additions and 18 deletions.
6 changes: 6 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -498,6 +498,12 @@ search.addWidget(
* You can also provide
* tooltips: {format: function(formattedValue, rawValue) {return '$' + formattedValue}}
* So that you can format the tooltip display value as you want
* @param {Object} [options.cssClasses] Css classes to add to the wrapping elements: root, body
* @param {String|String[]} [options.cssClasses.root]
* @param {String|String[]} [options.cssClasses.body]
* @param {Object} [options.templates] Templates to use for the widget
* @param {String|Function} [options.templates.header=''] Header template
* @param {String|Function} [options.templates.footer=''] Footer template
* @param {boolean} [hideWhenNoResults=true] Hide the container when no results match
* @return {Object}
*/
Expand Down
30 changes: 20 additions & 10 deletions components/Slider/index.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
var cx = require('classnames');
var React = require('react');

var Nouislider = require('react-nouislider');
var autoHide = require('../../decorators/autoHide');
var headerFooter = require('../../decorators/headerFooter');

require('style?prepend!raw!./index.css');

Expand All @@ -16,14 +18,16 @@ class Slider extends React.Component {

render() {
return (
<Nouislider
{...this.props}
onChange={this.handleChange.bind(this)}
animate={false}
behaviour={'snap'}
connect
cssPrefix={cssPrefix}
/>
<div className={cx(this.props.cssClasses.body)}>
<Nouislider
{...this.props}
onChange={this.handleChange.bind(this)}
animate={false}
behaviour={'snap'}
connect
cssPrefix={cssPrefix}
/>
</div>
);
}
}
Expand All @@ -36,7 +40,13 @@ Slider.propTypes = {
tooltips: React.PropTypes.oneOfType([
React.PropTypes.bool,
React.PropTypes.object
])
]),
cssClasses: React.PropTypes.shape({
body: React.PropTypes.oneOfType([
React.PropTypes.string,
React.PropTypes.arrayOf(React.PropTypes.string)
])
})
};

module.exports = autoHide(Slider);
module.exports = autoHide(headerFooter(Slider));
6 changes: 6 additions & 0 deletions example/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,12 @@ search.addWidget(
instantsearch.widgets.rangeSlider({
container: '#price',
facetName: 'price',
cssClasses: {
body: 'panel-body'
},
templates: {
header: '<div class="panel-heading">Price</div>'
},
tooltips: {
format: function(formattedValue) {
return '$' + formattedValue;
Expand Down
7 changes: 1 addition & 6 deletions example/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -31,12 +31,7 @@ <h1>Instant search demo <small>using instantsearch.js</small></h1>

<div class="panel panel-default" id="free-shipping"></div>

<div class="panel panel-default">
<div class="panel-heading">Price</div>
<div class="panel-body">
<div id="price"></div>
</div>
</div>
<div class="panel panel-default" id="price"></div>

</div>
<div class="col-md-9">
Expand Down
4 changes: 2 additions & 2 deletions example/style.css
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,8 @@ body {
height: 125px;
}

#price {
padding: 30px 0;
#price .panel-body {
padding: 45px 15px;
}

.panel-heading {
Expand Down
18 changes: 18 additions & 0 deletions widgets/range-slider.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,11 @@ var React = require('react');

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

var defaultTemplates = {
header: '',
footer: ''
};

/**
* Instantiate a slider based on a numeric attribute
* @param {String|DOMElement} options.container CSS Selector or DOMElement to insert the widget
Expand All @@ -11,13 +16,24 @@ var utils = require('../lib/utils.js');
* You can also provide
* tooltips: {format: function(formattedValue, rawValue) {return '$' + formattedValue}}
* So that you can format the tooltip display value as you want
* @param {Object} [options.cssClasses] Css classes to add to the wrapping elements: root, body
* @param {String|String[]} [options.cssClasses.root]
* @param {String|String[]} [options.cssClasses.body]
* @param {Object} [options.templates] Templates to use for the widget
* @param {String|Function} [options.templates.header=''] Header template
* @param {String|Function} [options.templates.footer=''] Footer template
* @param {boolean} [hideWhenNoResults=true] Hide the container when no results match
* @return {Object}
*/
function rangeSlider({
container = null,
facetName = null,
tooltips = true,
templates = defaultTemplates,
cssClasses = {
root: null,
body: null
},
hideWhenNoResults = true
}) {
var Slider = require('../components/Slider');
Expand Down Expand Up @@ -71,6 +87,8 @@ function rangeSlider({
<Slider
start={[currentRefinement.min, currentRefinement.max]}
range={{min: stats.min, max: stats.max}}
cssClasses={cssClasses}
templates={templates}
hideWhenNoResults={hideWhenNoResults}
hasResults={stats.min !== null && stats.max !== null}
onChange={this._refine.bind(this, helper)}
Expand Down

0 comments on commit 19090c3

Please sign in to comment.