Skip to content

Commit

Permalink
feat: Add stats widget
Browse files Browse the repository at this point in the history
  • Loading branch information
pixelastic committed Sep 4, 2015
1 parent 49767b5 commit 8290542
Show file tree
Hide file tree
Showing 6 changed files with 73 additions and 2 deletions.
31 changes: 31 additions & 0 deletions components/Stats/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
var React = require('react');

var Template = require('../Template/');

class Stats extends React.Component {
render() {
var template = this.props.template;
var data = {
nbHits: this.props.nbHits,
processingTimeMS: this.props.processingTimeMS
};

return (
<Template
data={data}
template={template}
/>
);
}
}

Stats.propTypes = {
nbHits: React.PropTypes.number,
processingTimeMS: React.PropTypes.number,
template: React.PropTypes.oneOfType([
React.PropTypes.func,
React.PropTypes.string
]).isRequired
};

module.exports = Stats;
6 changes: 6 additions & 0 deletions example/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,12 @@ search.addWidget(
})
);

search.addWidget(
instantsearch.widgets.stats({
container: '#stats'
})
);

search.addWidget(
instantsearch.widgets.hits({
container: '#hits',
Expand Down
1 change: 1 addition & 0 deletions example/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ <h2>Brands</h1>
<div id="brands"></div>
</div>
<div class="col-md-9">
<div id="stats"></div>
<div id="hits"></div>
<div id="pagination" class="text-center"></div>
</div>
Expand Down
5 changes: 3 additions & 2 deletions index.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
module.exports = {
InstantSearch: require('./lib/InstantSearch'),
widgets: {
searchBox: require('./widgets/search-box/'),
hits: require('./widgets/hits/'),
multipleChoiceList: require('./widgets/multiple-choice-list/'),
pagination: require('./widgets/pagination/'),
multipleChoiceList: require('./widgets/multiple-choice-list/')
searchBox: require('./widgets/search-box/'),
stats: require('./widgets/stats/')
}
};
28 changes: 28 additions & 0 deletions widgets/stats/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
var React = require('react');

var utils = require('../../lib/widgetUtils.js');
var defaultTemplate = require('./template.html');

function stats({container = null, template = defaultTemplate}) {
var Stats = require('../../components/Stats');
var containerNode = utils.getContainerNode(container);

if (container === null) {
throw new Error('Usage: stats({container})');
}

return {
render: function(results) {
React.render(
<Stats
nbHits={results.nbHits}
processingTimeMS={results.processingTimeMS}
template={template}
/>,
containerNode
);
}
};
}

module.exports = stats;
4 changes: 4 additions & 0 deletions widgets/stats/template.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
<div>
{{nbHits}} results
<small>found in {{processingTimeMS}}ms</small>
</div>

0 comments on commit 8290542

Please sign in to comment.