Skip to content

Commit bc91bfb

Browse files
author
vvo
committed
feat: multipleChoiceList first iteration
1 parent 63b4b50 commit bc91bfb

File tree

8 files changed

+72
-3
lines changed

8 files changed

+72
-3
lines changed
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
var React = require('react');
2+
3+
var Template = require('../Template/');
4+
5+
class MultipleChoiceList extends React.Component {
6+
render() {
7+
var facetValues = this.props.facetValues;
8+
var template = this.props.template;
9+
10+
return (
11+
<ul>
12+
{facetValues.map(function(facetValue) {
13+
return <Template key={facetValue.name} data={facetValue} template={template} />;
14+
})}
15+
</ul>
16+
);
17+
}
18+
}
19+
20+
MultipleChoiceList.propTypes = {
21+
facetValues: React.PropTypes.array,
22+
template: React.PropTypes.oneOfType([
23+
React.PropTypes.string,
24+
React.PropTypes.func
25+
]).isRequired,
26+
toggleRefine: React.PropTypes.fn
27+
};
28+
29+
module.exports = MultipleChoiceList;

example/app.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,4 +35,11 @@ search.addWidget(
3535
})
3636
);
3737

38+
search.addWidget(
39+
instantsearch.widgets.multipleChoiceList({
40+
container: '#brands',
41+
facetName: 'brand'
42+
})
43+
);
44+
3845
search.start();

example/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ <h1>Instant search demo <small>using instantsearch.js</small></h1>
1414

1515
<div class="row">
1616
<div class="col-md-3">
17-
1817
<div id="search-box"></div>
18+
<div id="brands"></div>
1919
</div>
2020
<div class="col-md-9">
2121
<div id="hits"></div>

index.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ module.exports = {
33
widgets: {
44
searchBox: require('./widgets/search-box/'),
55
hits: require('./widgets/hits/'),
6-
pagination: require('./widgets/pagination/')
6+
pagination: require('./widgets/pagination/'),
7+
multipleChoiceList: require('./widgets/multiple-choice-list/')
78
}
89
};

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@
3535
"onchange": "2.0.0",
3636
"pretty-bytes": "2.0.1",
3737
"proxyquire": "1.7.1",
38-
"raw-loader": "0.5.1",
3938
"sinon": "1.16.1",
4039
"style-loader": "0.12.3",
4140
"tap-spec": "4.1.0",
@@ -50,6 +49,7 @@
5049
"classnames": "2.1.3",
5150
"hogan.js": "3.0.2",
5251
"lodash": "3.10.1",
52+
"raw-loader": "0.5.1",
5353
"react": "0.13.3"
5454
},
5555
"license": "MIT"

webpack.config.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ module.exports = {
99
module: {
1010
loaders: [{
1111
test: /\.js$/, exclude: /node_modules/, loader: 'babel-loader'
12+
}, {
13+
test: /\.html$/, exclude: /node_modules/, loader: 'raw'
1214
}]
1315
}
1416
};

widgets/multiple-choice-list/index.js

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
var React = require('react');
2+
3+
var utils = require('../../lib/widgetUtils.js');
4+
var defaultTemplate = require('./template.html');
5+
6+
function multipleChoiceList({container = null, facetName = null, template = defaultTemplate}) {
7+
var MultipleChoiceList = require('../../components/MultipleChoiceList');
8+
var containerNode = utils.getContainerNode(container);
9+
10+
if (container === null || facetName === null) {
11+
throw new Error('Usage: multipleChoiceList({container, facetName[, template]})');
12+
}
13+
14+
return {
15+
getConfiguration: () => ({disjunctiveFacets: [facetName]}),
16+
render: function(results, state, helper) {
17+
React.render(
18+
<MultipleChoiceList
19+
facetValues={results.getFacetValues(facetName, {sortBy: ['name:asc']})}
20+
toggleRefine={helper.toggleRefine.bind(helper, facetName)}
21+
template={template}
22+
/>,
23+
containerNode
24+
);
25+
}
26+
};
27+
}
28+
29+
module.exports = multipleChoiceList;
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
<label><input type="checkbox" value="{{name}}" {{#selected}}checked{{/selected}} />{{name}} <span>{{count}}</span></label>

0 commit comments

Comments
 (0)