vue-instantsearch 4.17.3 → 4.17.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/package.json +5 -5
- package/src/__tests__/common-widgets.test.js +28 -0
- package/src/components/__tests__/RangeInput.js +0 -317
- package/src/util/__tests__/createServerRootMixin.test.js +0 -10
- package/vue2/cjs/index.js +1 -1
- package/vue2/es/package.json.js +1 -1
- package/vue2/umd/index.js +1 -1
- package/vue2/umd/index.js.map +1 -1
- package/vue3/cjs/index.js +1 -1
- package/vue3/es/package.json.js +1 -1
- package/vue3/umd/index.js +1 -1
- package/vue3/umd/index.js.map +1 -1
- package/src/components/__tests__/__snapshots__/RangeInput.js.snap +0 -133
package/README.md
CHANGED
package/package.json
CHANGED
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"autocomplete"
|
|
17
17
|
],
|
|
18
18
|
"license": "MIT",
|
|
19
|
-
"version": "4.17.
|
|
19
|
+
"version": "4.17.5",
|
|
20
20
|
"files": [
|
|
21
21
|
"vue2",
|
|
22
22
|
"vue3",
|
|
@@ -36,8 +36,8 @@
|
|
|
36
36
|
"watch:es": "yarn --silent build --watch"
|
|
37
37
|
},
|
|
38
38
|
"dependencies": {
|
|
39
|
-
"instantsearch-ui-components": "0.
|
|
40
|
-
"instantsearch.js": "4.
|
|
39
|
+
"instantsearch-ui-components": "0.7.0",
|
|
40
|
+
"instantsearch.js": "4.72.1",
|
|
41
41
|
"mitt": "^2.1.0"
|
|
42
42
|
},
|
|
43
43
|
"peerDependencies": {
|
|
@@ -62,7 +62,7 @@
|
|
|
62
62
|
"@vue/test-utils": "1.3.0",
|
|
63
63
|
"@vue/test-utils2": "npm:@vue/test-utils@2.0.0-rc.11",
|
|
64
64
|
"algoliasearch": "4.23.2",
|
|
65
|
-
"algoliasearch-helper": "3.
|
|
65
|
+
"algoliasearch-helper": "3.22.1",
|
|
66
66
|
"instantsearch.css": "8.2.1",
|
|
67
67
|
"rollup": "1.32.1",
|
|
68
68
|
"rollup-plugin-babel": "4.4.0",
|
|
@@ -89,5 +89,5 @@
|
|
|
89
89
|
"vuex": "3.5.1",
|
|
90
90
|
"vuex4": "npm:vuex@4.0.0"
|
|
91
91
|
},
|
|
92
|
-
"gitHead": "
|
|
92
|
+
"gitHead": "035e7a8634884096e71dfbd001c485b79f9bbf88"
|
|
93
93
|
}
|
|
@@ -28,6 +28,7 @@ import {
|
|
|
28
28
|
AisNumericMenu,
|
|
29
29
|
AisPoweredBy,
|
|
30
30
|
AisMenuSelect,
|
|
31
|
+
AisDynamicWidgets,
|
|
31
32
|
} from '../instantsearch';
|
|
32
33
|
import { renderCompat } from '../util/vue-compat';
|
|
33
34
|
|
|
@@ -554,6 +555,32 @@ const testSetups = {
|
|
|
554
555
|
|
|
555
556
|
await nextTick();
|
|
556
557
|
},
|
|
558
|
+
createDynamicWidgetsWidgetTests({ instantSearchOptions, widgetParams }) {
|
|
559
|
+
mountApp(
|
|
560
|
+
{
|
|
561
|
+
render: renderCompat((h) =>
|
|
562
|
+
h(AisInstantSearch, { props: instantSearchOptions }, [
|
|
563
|
+
h(
|
|
564
|
+
AisDynamicWidgets,
|
|
565
|
+
{ props: widgetParams },
|
|
566
|
+
h(AisRefinementList, { props: { attribute: 'brand' } }),
|
|
567
|
+
h(AisMenu, { props: { attribute: 'category' } }),
|
|
568
|
+
h(AisHierarchicalMenu, {
|
|
569
|
+
props: {
|
|
570
|
+
attributes: [
|
|
571
|
+
'hierarchicalCategories.lvl0',
|
|
572
|
+
'hierarchicalCategories.lvl1',
|
|
573
|
+
],
|
|
574
|
+
},
|
|
575
|
+
})
|
|
576
|
+
),
|
|
577
|
+
h(GlobalErrorSwallower),
|
|
578
|
+
])
|
|
579
|
+
),
|
|
580
|
+
},
|
|
581
|
+
document.body.appendChild(document.createElement('div'))
|
|
582
|
+
);
|
|
583
|
+
},
|
|
557
584
|
};
|
|
558
585
|
|
|
559
586
|
const testOptions = {
|
|
@@ -591,6 +618,7 @@ const testOptions = {
|
|
|
591
618
|
skippedTests: { 'LookingSimilar widget common tests': true },
|
|
592
619
|
},
|
|
593
620
|
createPoweredByWidgetTests: undefined,
|
|
621
|
+
createDynamicWidgetsWidgetTests: undefined,
|
|
594
622
|
};
|
|
595
623
|
|
|
596
624
|
describe('Common widget tests (Vue InstantSearch)', () => {
|
|
@@ -26,233 +26,6 @@ const defaultProps = {
|
|
|
26
26
|
attribute: 'price',
|
|
27
27
|
};
|
|
28
28
|
|
|
29
|
-
it('accepts an attribute prop', () => {
|
|
30
|
-
__setState({
|
|
31
|
-
...defaultState,
|
|
32
|
-
});
|
|
33
|
-
|
|
34
|
-
const wrapper = mount(RangeInput, {
|
|
35
|
-
propsData: {
|
|
36
|
-
...defaultProps,
|
|
37
|
-
},
|
|
38
|
-
});
|
|
39
|
-
|
|
40
|
-
expect(wrapper.vm.widgetParams.attribute).toBe('price');
|
|
41
|
-
});
|
|
42
|
-
|
|
43
|
-
it('accepts a min prop', () => {
|
|
44
|
-
__setState({
|
|
45
|
-
...defaultState,
|
|
46
|
-
});
|
|
47
|
-
|
|
48
|
-
const wrapper = mount(RangeInput, {
|
|
49
|
-
propsData: {
|
|
50
|
-
...defaultProps,
|
|
51
|
-
min: 10,
|
|
52
|
-
},
|
|
53
|
-
});
|
|
54
|
-
|
|
55
|
-
expect(wrapper.vm.widgetParams.min).toBe(10);
|
|
56
|
-
});
|
|
57
|
-
|
|
58
|
-
it('accepts a max prop', () => {
|
|
59
|
-
__setState({
|
|
60
|
-
...defaultState,
|
|
61
|
-
});
|
|
62
|
-
|
|
63
|
-
const wrapper = mount(RangeInput, {
|
|
64
|
-
propsData: {
|
|
65
|
-
...defaultProps,
|
|
66
|
-
max: 500,
|
|
67
|
-
},
|
|
68
|
-
});
|
|
69
|
-
|
|
70
|
-
expect(wrapper.vm.widgetParams.max).toBe(500);
|
|
71
|
-
});
|
|
72
|
-
|
|
73
|
-
it('accepts a precision prop', () => {
|
|
74
|
-
__setState({
|
|
75
|
-
...defaultState,
|
|
76
|
-
});
|
|
77
|
-
|
|
78
|
-
const wrapper = mount(RangeInput, {
|
|
79
|
-
propsData: {
|
|
80
|
-
...defaultProps,
|
|
81
|
-
precision: 3,
|
|
82
|
-
},
|
|
83
|
-
});
|
|
84
|
-
|
|
85
|
-
expect(wrapper.vm.widgetParams.precision).toBe(3);
|
|
86
|
-
});
|
|
87
|
-
|
|
88
|
-
describe('rendering', () => {
|
|
89
|
-
it('displays correctly with default', () => {
|
|
90
|
-
__setState({
|
|
91
|
-
...defaultState,
|
|
92
|
-
});
|
|
93
|
-
|
|
94
|
-
const wrapper = mount(RangeInput, {
|
|
95
|
-
propsData: defaultProps,
|
|
96
|
-
});
|
|
97
|
-
|
|
98
|
-
expect(wrapper.html()).toMatchSnapshot();
|
|
99
|
-
});
|
|
100
|
-
|
|
101
|
-
it('displays correctly with a min', () => {
|
|
102
|
-
__setState({
|
|
103
|
-
...defaultState,
|
|
104
|
-
range: {
|
|
105
|
-
...defaultRange,
|
|
106
|
-
min: 100,
|
|
107
|
-
},
|
|
108
|
-
});
|
|
109
|
-
|
|
110
|
-
const wrapper = mount(RangeInput, {
|
|
111
|
-
propsData: {
|
|
112
|
-
...defaultProps,
|
|
113
|
-
},
|
|
114
|
-
});
|
|
115
|
-
|
|
116
|
-
expect(wrapper.html()).toMatchSnapshot();
|
|
117
|
-
});
|
|
118
|
-
|
|
119
|
-
it('displays correctly with a max', () => {
|
|
120
|
-
__setState({
|
|
121
|
-
...defaultState,
|
|
122
|
-
range: {
|
|
123
|
-
...defaultRange,
|
|
124
|
-
max: 100,
|
|
125
|
-
},
|
|
126
|
-
});
|
|
127
|
-
|
|
128
|
-
const wrapper = mount(RangeInput, {
|
|
129
|
-
propsData: {
|
|
130
|
-
...defaultProps,
|
|
131
|
-
},
|
|
132
|
-
});
|
|
133
|
-
|
|
134
|
-
expect(wrapper.html()).toMatchSnapshot();
|
|
135
|
-
});
|
|
136
|
-
|
|
137
|
-
it('displays correctly with a min and a max', () => {
|
|
138
|
-
__setState({
|
|
139
|
-
...defaultState,
|
|
140
|
-
range: {
|
|
141
|
-
min: 10,
|
|
142
|
-
max: 37,
|
|
143
|
-
},
|
|
144
|
-
});
|
|
145
|
-
|
|
146
|
-
const wrapper = mount(RangeInput, {
|
|
147
|
-
propsData: {
|
|
148
|
-
...defaultProps,
|
|
149
|
-
},
|
|
150
|
-
});
|
|
151
|
-
|
|
152
|
-
expect(wrapper.html()).toMatchSnapshot();
|
|
153
|
-
});
|
|
154
|
-
|
|
155
|
-
it('displays correctly with a min refinement', () => {
|
|
156
|
-
__setState({
|
|
157
|
-
...defaultState,
|
|
158
|
-
start: [10, 500],
|
|
159
|
-
});
|
|
160
|
-
|
|
161
|
-
const wrapper = mount(RangeInput, {
|
|
162
|
-
propsData: {
|
|
163
|
-
...defaultProps,
|
|
164
|
-
},
|
|
165
|
-
});
|
|
166
|
-
|
|
167
|
-
expect(wrapper.find('.ais-RangeInput-input--min').element.value).toBe('10');
|
|
168
|
-
});
|
|
169
|
-
|
|
170
|
-
it('displays correctly with a min refinement equal -Infinity', () => {
|
|
171
|
-
__setState({
|
|
172
|
-
...defaultState,
|
|
173
|
-
start: [-Infinity, 500],
|
|
174
|
-
});
|
|
175
|
-
|
|
176
|
-
const wrapper = mount(RangeInput, {
|
|
177
|
-
propsData: {
|
|
178
|
-
...defaultProps,
|
|
179
|
-
},
|
|
180
|
-
});
|
|
181
|
-
|
|
182
|
-
expect(wrapper.find('.ais-RangeInput-input--min').element.value).toBe('');
|
|
183
|
-
});
|
|
184
|
-
|
|
185
|
-
it('displays correctly with a min refinement equal to min range', () => {
|
|
186
|
-
__setState({
|
|
187
|
-
...defaultState,
|
|
188
|
-
start: [10, 500],
|
|
189
|
-
range: {
|
|
190
|
-
...defaultRange,
|
|
191
|
-
min: 10,
|
|
192
|
-
},
|
|
193
|
-
});
|
|
194
|
-
|
|
195
|
-
const wrapper = mount(RangeInput, {
|
|
196
|
-
propsData: {
|
|
197
|
-
...defaultProps,
|
|
198
|
-
},
|
|
199
|
-
});
|
|
200
|
-
|
|
201
|
-
expect(wrapper.find('.ais-RangeInput-input--min').element.value).toBe('');
|
|
202
|
-
});
|
|
203
|
-
|
|
204
|
-
it('displays correctly with a max refinement', () => {
|
|
205
|
-
__setState({
|
|
206
|
-
...defaultState,
|
|
207
|
-
start: [10, 500],
|
|
208
|
-
});
|
|
209
|
-
|
|
210
|
-
const wrapper = mount(RangeInput, {
|
|
211
|
-
propsData: {
|
|
212
|
-
...defaultProps,
|
|
213
|
-
},
|
|
214
|
-
});
|
|
215
|
-
|
|
216
|
-
expect(wrapper.find('.ais-RangeInput-input--max').element.value).toBe(
|
|
217
|
-
'500'
|
|
218
|
-
);
|
|
219
|
-
});
|
|
220
|
-
|
|
221
|
-
it('displays correctly with a max refinement equal Infinity', () => {
|
|
222
|
-
__setState({
|
|
223
|
-
...defaultState,
|
|
224
|
-
start: [10, Infinity],
|
|
225
|
-
});
|
|
226
|
-
|
|
227
|
-
const wrapper = mount(RangeInput, {
|
|
228
|
-
propsData: {
|
|
229
|
-
...defaultProps,
|
|
230
|
-
},
|
|
231
|
-
});
|
|
232
|
-
|
|
233
|
-
expect(wrapper.find('.ais-RangeInput-input--max').element.value).toBe('');
|
|
234
|
-
});
|
|
235
|
-
|
|
236
|
-
it('displays correctly with a max refinement equal to max range', () => {
|
|
237
|
-
__setState({
|
|
238
|
-
...defaultState,
|
|
239
|
-
start: [10, 500],
|
|
240
|
-
range: {
|
|
241
|
-
...defaultRange,
|
|
242
|
-
max: 500,
|
|
243
|
-
},
|
|
244
|
-
});
|
|
245
|
-
|
|
246
|
-
const wrapper = mount(RangeInput, {
|
|
247
|
-
propsData: {
|
|
248
|
-
...defaultProps,
|
|
249
|
-
},
|
|
250
|
-
});
|
|
251
|
-
|
|
252
|
-
expect(wrapper.find('.ais-RangeInput-input--max').element.value).toBe('');
|
|
253
|
-
});
|
|
254
|
-
});
|
|
255
|
-
|
|
256
29
|
it('exposes send-event method for insights middleware', async () => {
|
|
257
30
|
const sendEvent = jest.fn();
|
|
258
31
|
__setState({
|
|
@@ -279,93 +52,3 @@ it('exposes send-event method for insights middleware', async () => {
|
|
|
279
52
|
await wrapper.find('button').trigger('click');
|
|
280
53
|
expect(sendEvent).toHaveBeenCalledTimes(1);
|
|
281
54
|
});
|
|
282
|
-
|
|
283
|
-
describe('refinement', () => {
|
|
284
|
-
it('uses the value of the inputs when the form is submited', async () => {
|
|
285
|
-
const refine = jest.fn();
|
|
286
|
-
|
|
287
|
-
__setState({
|
|
288
|
-
...defaultState,
|
|
289
|
-
refine,
|
|
290
|
-
});
|
|
291
|
-
|
|
292
|
-
const wrapper = mount(RangeInput, {
|
|
293
|
-
propsData: {
|
|
294
|
-
attribute: 'price',
|
|
295
|
-
},
|
|
296
|
-
});
|
|
297
|
-
|
|
298
|
-
const minInput = wrapper.find('.ais-RangeInput-input--min');
|
|
299
|
-
minInput.element.value = 100;
|
|
300
|
-
await minInput.trigger('change');
|
|
301
|
-
|
|
302
|
-
const maxInput = wrapper.find('.ais-RangeInput-input--max');
|
|
303
|
-
maxInput.element.value = 106;
|
|
304
|
-
await maxInput.trigger('change');
|
|
305
|
-
|
|
306
|
-
const form = wrapper.find('form');
|
|
307
|
-
await form.trigger('submit');
|
|
308
|
-
|
|
309
|
-
expect(refine).toHaveBeenLastCalledWith(['100', '106']);
|
|
310
|
-
});
|
|
311
|
-
|
|
312
|
-
it('refines correctly when `start` given and user clicks submit without changing input field', async () => {
|
|
313
|
-
const refine = jest.fn();
|
|
314
|
-
__setState({
|
|
315
|
-
refine,
|
|
316
|
-
start: [50, 100],
|
|
317
|
-
range: {
|
|
318
|
-
min: 1,
|
|
319
|
-
max: 5000,
|
|
320
|
-
},
|
|
321
|
-
});
|
|
322
|
-
|
|
323
|
-
const wrapper = mount(RangeInput, {
|
|
324
|
-
propsData: {
|
|
325
|
-
...defaultProps,
|
|
326
|
-
},
|
|
327
|
-
});
|
|
328
|
-
|
|
329
|
-
const form = wrapper.find('form');
|
|
330
|
-
await form.trigger('submit');
|
|
331
|
-
|
|
332
|
-
expect(refine).toHaveBeenCalledTimes(1);
|
|
333
|
-
expect(refine).toHaveBeenCalledWith([50, 100]);
|
|
334
|
-
});
|
|
335
|
-
|
|
336
|
-
it('refines correctly even when state changes', async () => {
|
|
337
|
-
const refine = jest.fn();
|
|
338
|
-
__setState({
|
|
339
|
-
...defaultState,
|
|
340
|
-
refine,
|
|
341
|
-
});
|
|
342
|
-
|
|
343
|
-
const wrapper = mount(RangeInput, {
|
|
344
|
-
propsData: {
|
|
345
|
-
...defaultProps,
|
|
346
|
-
},
|
|
347
|
-
});
|
|
348
|
-
|
|
349
|
-
// refine for the first time
|
|
350
|
-
const minInput = wrapper.find('.ais-RangeInput-input--min');
|
|
351
|
-
minInput.element.value = 10;
|
|
352
|
-
await minInput.trigger('change');
|
|
353
|
-
|
|
354
|
-
const maxInput = wrapper.find('.ais-RangeInput-input--max');
|
|
355
|
-
maxInput.element.value = 100;
|
|
356
|
-
await maxInput.trigger('change');
|
|
357
|
-
|
|
358
|
-
const form = wrapper.find('form');
|
|
359
|
-
await form.trigger('submit');
|
|
360
|
-
|
|
361
|
-
expect(refine).toHaveBeenCalledTimes(1);
|
|
362
|
-
expect(refine).toHaveBeenCalledWith(['10', '100']);
|
|
363
|
-
|
|
364
|
-
// update the state
|
|
365
|
-
await wrapper.setData({ state: { start: [50, 200] } }); // min: 10 -> 50, max: 100 -> 200
|
|
366
|
-
|
|
367
|
-
await form.trigger('submit');
|
|
368
|
-
expect(refine).toHaveBeenCalledTimes(2);
|
|
369
|
-
expect(refine).toHaveBeenCalledWith([50, 200]);
|
|
370
|
-
});
|
|
371
|
-
});
|
|
@@ -262,10 +262,8 @@ See documentation: https://www.algolia.com/doc/api-reference/widgets/instantsear
|
|
|
262
262
|
{
|
|
263
263
|
"indexName": "hello",
|
|
264
264
|
"params": {
|
|
265
|
-
"facets": [],
|
|
266
265
|
"hitsPerPage": 100,
|
|
267
266
|
"query": "",
|
|
268
|
-
"tagFilters": "",
|
|
269
267
|
},
|
|
270
268
|
},
|
|
271
269
|
]
|
|
@@ -318,10 +316,8 @@ See documentation: https://www.algolia.com/doc/api-reference/widgets/instantsear
|
|
|
318
316
|
|
|
319
317
|
expect(state.hello).toEqual({
|
|
320
318
|
requestParams: {
|
|
321
|
-
facets: [],
|
|
322
319
|
hitsPerPage: 100,
|
|
323
320
|
query: '',
|
|
324
|
-
tagFilters: '',
|
|
325
321
|
},
|
|
326
322
|
results: [
|
|
327
323
|
{
|
|
@@ -347,10 +343,8 @@ See documentation: https://www.algolia.com/doc/api-reference/widgets/instantsear
|
|
|
347
343
|
// Parent's widgets state should not be merged into nested index state
|
|
348
344
|
expect(state.nestedIndex).toEqual({
|
|
349
345
|
requestParams: {
|
|
350
|
-
facets: [],
|
|
351
346
|
hitsPerPage: 100,
|
|
352
347
|
query: '',
|
|
353
|
-
tagFilters: '',
|
|
354
348
|
},
|
|
355
349
|
results: [
|
|
356
350
|
{
|
|
@@ -879,10 +873,8 @@ See documentation: https://www.algolia.com/doc/api-reference/widgets/instantsear
|
|
|
879
873
|
{
|
|
880
874
|
"indexName": "hello",
|
|
881
875
|
"params": {
|
|
882
|
-
"facets": [],
|
|
883
876
|
"hitsPerPage": 100,
|
|
884
877
|
"query": "",
|
|
885
|
-
"tagFilters": "",
|
|
886
878
|
},
|
|
887
879
|
},
|
|
888
880
|
]
|
|
@@ -955,10 +947,8 @@ See documentation: https://www.algolia.com/doc/api-reference/widgets/instantsear
|
|
|
955
947
|
{
|
|
956
948
|
"indexName": "hello",
|
|
957
949
|
"params": {
|
|
958
|
-
"facets": [],
|
|
959
950
|
"hitsPerPage": 100,
|
|
960
951
|
"query": "",
|
|
961
|
-
"tagFilters": "",
|
|
962
952
|
},
|
|
963
953
|
},
|
|
964
954
|
]
|