Skip to content

Commit 7f03ae9

Browse files
author
Alexandre Stanislawski
committed
feat(core/lifecycle-event): emits render when render
When all the widgets are finished rendering for each search response.
1 parent 200a7fe commit 7f03ae9

File tree

6 files changed

+73
-2
lines changed

6 files changed

+73
-2
lines changed

example/app.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,4 +159,8 @@ search.addWidget(
159159
})
160160
);
161161

162+
search.once('render', function() {
163+
document.querySelector('.search').className = 'row search search--visible';
164+
});
165+
162166
search.start();

example/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
<h1>Instant search demo <small>using instantsearch.js</small></h1>
1818
</div>
1919

20-
<div class="row">
20+
<div class="row search search--hidden">
2121
<div class="col-md-3">
2222
<div class="panel panel-default" id="categories"></div>
2323

example/style.css

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,18 @@ body {
88
padding: 2em 0;
99
}
1010

11+
.search {
12+
transition: opacity 200ms;
13+
}
14+
15+
.search--hidden {
16+
opacity: 0;
17+
}
18+
19+
.search--visible {
20+
21+
}
22+
1123
/* Hits widget */
1224
.hit + .hit {
1325
margin-top: 1em;

lib/InstantSearch.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,17 @@ var forEach = require('lodash/collection/forEach');
55
var merge = require('lodash/object/merge');
66
var union = require('lodash/array/union');
77

8-
class InstantSearch {
8+
var EventEmitter = require('events').EventEmitter;
9+
10+
class InstantSearch extends EventEmitter {
911
constructor({
1012
appId = null,
1113
apiKey = null,
1214
indexName = null,
1315
numberLocale = 'en-EN',
1416
searchParameters = {}
1517
}) {
18+
super();
1619
if (appId === null || apiKey === null || indexName === null) {
1720
var usage = `
1821
Usage: instantsearch({
@@ -92,6 +95,7 @@ Usage: instantsearch({
9295
helper
9396
});
9497
}, this);
98+
this.emit('render');
9599
}
96100

97101
_init(state, helper) {

lib/__tests__/InstantSearch-test.js

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,4 +176,54 @@ describe('InstantSearch lifecycle', () => {
176176
expect(algoliasearchHelper.args[0][2].values).toEqual([-2, -1, 0, 1, 3, 4, 2]);
177177
});
178178
});
179+
180+
context('when render happens', () => {
181+
var render = sinon.spy();
182+
beforeEach(() => {
183+
render.reset();
184+
var widgets = range(5).map(() => { return {render}; });
185+
186+
widgets.forEach(search.addWidget, search);
187+
188+
search.start();
189+
});
190+
191+
it('emits render when all render are done (using on)', () => {
192+
var onRender = sinon.spy();
193+
search.on('render', onRender);
194+
195+
expect(render.callCount).toEqual(0);
196+
expect(onRender.callCount).toEqual(0);
197+
198+
helper.emit('result', {}, helper.state);
199+
200+
expect(render.callCount).toEqual(5);
201+
expect(onRender.callCount).toEqual(1);
202+
expect(render.calledBefore(onRender)).toBe(true);
203+
204+
helper.emit('result', {}, helper.state);
205+
206+
expect(render.callCount).toEqual(10);
207+
expect(onRender.callCount).toEqual(2);
208+
});
209+
210+
it('emits render when all render are done (using once)', () => {
211+
var onRender = sinon.spy();
212+
search.once('render', onRender);
213+
214+
expect(render.callCount).toEqual(0);
215+
expect(onRender.callCount).toEqual(0);
216+
217+
helper.emit('result', {}, helper.state);
218+
219+
expect(render.callCount).toEqual(5);
220+
expect(onRender.callCount).toEqual(1);
221+
expect(render.calledBefore(onRender)).toBe(true);
222+
223+
helper.emit('result', {}, helper.state);
224+
225+
expect(render.callCount).toEqual(10);
226+
expect(onRender.callCount).toEqual(1);
227+
});
228+
});
179229
});

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@
6161
"algoliasearch": "^3.8.0",
6262
"algoliasearch-helper": "^2.5.0",
6363
"classnames": "^2.1.5",
64+
"events": "^1.1.0",
6465
"hogan.js": "^3.0.2",
6566
"lodash": "^3.10.1",
6667
"react": "^0.14.0",

0 commit comments

Comments
 (0)