vue-instantsearch 4.4.2 → 4.6.0
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/CHANGELOG.md +25 -0
- package/package.json +5 -5
- package/src/__tests__/index.js +1 -0
- package/src/components/Breadcrumb.vue +1 -3
- package/src/components/ClearRefinements.vue +1 -3
- package/src/components/CurrentRefinements.vue +1 -4
- package/src/components/HierarchicalMenu.vue +3 -11
- package/src/components/HierarchicalMenuList.vue +4 -1
- package/src/components/HitsPerPage.vue +2 -3
- package/src/components/InstantSearch.js +5 -0
- package/src/components/Menu.vue +1 -3
- package/src/components/MenuSelect.vue +1 -3
- package/src/components/NumericMenu.vue +3 -8
- package/src/components/Pagination.vue +1 -3
- package/src/components/RangeInput.vue +3 -11
- package/src/components/RatingMenu.vue +2 -3
- package/src/components/RefinementList.vue +1 -3
- package/src/components/SortBy.vue +2 -3
- package/src/components/StateResults.vue +55 -12
- package/src/components/ToggleRefinement.vue +3 -10
- package/src/components/__tests__/Breadcrumb.js +0 -25
- package/src/components/__tests__/ClearRefinements.js +0 -23
- package/src/components/__tests__/CurrentRefinements.js +0 -17
- package/src/components/__tests__/HierarchicalMenu.js +3 -19
- package/src/components/__tests__/HitsPerPage.js +0 -26
- package/src/components/__tests__/Menu.js +0 -22
- package/src/components/__tests__/MenuSelect.js +0 -23
- package/src/components/__tests__/NumericMenu.js +3 -25
- package/src/components/__tests__/Pagination.js +0 -21
- package/src/components/__tests__/RangeInput.js +1 -34
- package/src/components/__tests__/RatingMenu.js +0 -23
- package/src/components/__tests__/RefinementList.js +0 -23
- package/src/components/__tests__/SortBy.js +1 -23
- package/src/components/__tests__/StateResults.js +6 -0
- package/src/components/__tests__/ToggleRefinement.js +4 -33
- package/src/components/__tests__/__snapshots__/HierarchicalMenu.js.snap +2 -2
- package/src/components/__tests__/__snapshots__/StateResults.js.snap +6 -0
- package/src/mixins/__mocks__/panel.js +1 -5
- package/src/mixins/__mocks__/widget.js +10 -0
- package/src/mixins/__tests__/panel.test.js +18 -40
- package/src/mixins/panel.js +3 -1
- package/src/util/createInstantSearchComponent.js +7 -0
- package/src/util/createServerRootMixin.js +10 -1
- package/vue2/cjs/index.js +1 -1
- package/vue2/cjs/index.js.map +1 -1
- package/vue2/es/package.json.js +1 -1
- package/vue2/es/src/components/Breadcrumb.vue.js +1 -1
- package/vue2/es/src/components/Breadcrumb.vue.js.map +1 -1
- package/vue2/es/src/components/ClearRefinements.vue.js +1 -1
- package/vue2/es/src/components/ClearRefinements.vue.js.map +1 -1
- package/vue2/es/src/components/CurrentRefinements.vue.js +1 -1
- package/vue2/es/src/components/CurrentRefinements.vue.js.map +1 -1
- package/vue2/es/src/components/HierarchicalMenu.vue.js +1 -1
- package/vue2/es/src/components/HierarchicalMenu.vue.js.map +1 -1
- package/vue2/es/src/components/HierarchicalMenuList.vue.js +1 -1
- package/vue2/es/src/components/HierarchicalMenuList.vue.js.map +1 -1
- package/vue2/es/src/components/HitsPerPage.vue.js +1 -1
- package/vue2/es/src/components/HitsPerPage.vue.js.map +1 -1
- package/vue2/es/src/components/InstantSearch.js +1 -1
- package/vue2/es/src/components/InstantSearch.js.map +1 -1
- package/vue2/es/src/components/Menu.vue.js +1 -1
- package/vue2/es/src/components/Menu.vue.js.map +1 -1
- package/vue2/es/src/components/MenuSelect.vue.js +1 -1
- package/vue2/es/src/components/MenuSelect.vue.js.map +1 -1
- package/vue2/es/src/components/NumericMenu.vue.js +1 -1
- package/vue2/es/src/components/NumericMenu.vue.js.map +1 -1
- package/vue2/es/src/components/Pagination.vue.js +1 -1
- package/vue2/es/src/components/Pagination.vue.js.map +1 -1
- package/vue2/es/src/components/RangeInput.vue.js +1 -1
- package/vue2/es/src/components/RangeInput.vue.js.map +1 -1
- package/vue2/es/src/components/RatingMenu.vue.js +1 -1
- package/vue2/es/src/components/RatingMenu.vue.js.map +1 -1
- package/vue2/es/src/components/RefinementList.vue.js +1 -1
- package/vue2/es/src/components/RefinementList.vue.js.map +1 -1
- package/vue2/es/src/components/SortBy.vue.js +1 -1
- package/vue2/es/src/components/SortBy.vue.js.map +1 -1
- package/vue2/es/src/components/StateResults.vue.js +1 -1
- package/vue2/es/src/components/StateResults.vue.js.map +1 -1
- package/vue2/es/src/components/ToggleRefinement.vue.js +1 -1
- package/vue2/es/src/components/ToggleRefinement.vue.js.map +1 -1
- package/vue2/es/src/mixins/panel.js +1 -1
- package/vue2/es/src/mixins/panel.js.map +1 -1
- package/vue2/es/src/util/createInstantSearchComponent.js +1 -1
- package/vue2/es/src/util/createInstantSearchComponent.js.map +1 -1
- package/vue2/es/src/util/createServerRootMixin.js +1 -1
- package/vue2/es/src/util/createServerRootMixin.js.map +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/cjs/index.js.map +1 -1
- package/vue3/es/package.json.js +1 -1
- package/vue3/es/src/components/Breadcrumb.vue_vue&type=script&lang.js +1 -1
- package/vue3/es/src/components/Breadcrumb.vue_vue&type=script&lang.js.map +1 -1
- package/vue3/es/src/components/Breadcrumb.vue_vue&type=template&id=6f46de9a&lang.js.map +1 -1
- package/vue3/es/src/components/ClearRefinements.vue_vue&type=script&lang.js +1 -1
- package/vue3/es/src/components/ClearRefinements.vue_vue&type=script&lang.js.map +1 -1
- package/vue3/es/src/components/ClearRefinements.vue_vue&type=template&id=410a3aaa&lang.js.map +1 -1
- package/vue3/es/src/components/CurrentRefinements.vue_vue&type=script&lang.js +1 -1
- package/vue3/es/src/components/CurrentRefinements.vue_vue&type=script&lang.js.map +1 -1
- package/vue3/es/src/components/CurrentRefinements.vue_vue&type=template&id=4f1917ff&lang.js.map +1 -1
- package/vue3/es/src/components/HierarchicalMenu.vue_vue&type=script&lang.js +1 -1
- package/vue3/es/src/components/HierarchicalMenu.vue_vue&type=script&lang.js.map +1 -1
- package/vue3/es/src/components/HierarchicalMenu.vue_vue&type=template&id=4361a0b8&lang.js +1 -1
- package/vue3/es/src/components/HierarchicalMenu.vue_vue&type=template&id=4361a0b8&lang.js.map +1 -1
- package/vue3/es/src/components/HierarchicalMenuList.vue_vue&type=script&lang.js.map +1 -1
- package/vue3/es/src/components/HierarchicalMenuList.vue_vue&type=template&id=0435b314&lang.js +1 -1
- package/vue3/es/src/components/HierarchicalMenuList.vue_vue&type=template&id=0435b314&lang.js.map +1 -1
- package/vue3/es/src/components/HitsPerPage.vue_vue&type=script&lang.js +1 -1
- package/vue3/es/src/components/HitsPerPage.vue_vue&type=script&lang.js.map +1 -1
- package/vue3/es/src/components/HitsPerPage.vue_vue&type=template&id=74f3ac28&lang.js +1 -1
- package/vue3/es/src/components/HitsPerPage.vue_vue&type=template&id=74f3ac28&lang.js.map +1 -1
- package/vue3/es/src/components/InstantSearch.js +1 -1
- package/vue3/es/src/components/InstantSearch.js.map +1 -1
- package/vue3/es/src/components/Menu.vue_vue&type=script&lang.js +1 -1
- package/vue3/es/src/components/Menu.vue_vue&type=script&lang.js.map +1 -1
- package/vue3/es/src/components/Menu.vue_vue&type=template&id=9bcc0be2&lang.js.map +1 -1
- package/vue3/es/src/components/MenuSelect.vue_vue&type=script&lang.js +1 -1
- package/vue3/es/src/components/MenuSelect.vue_vue&type=script&lang.js.map +1 -1
- package/vue3/es/src/components/MenuSelect.vue_vue&type=template&id=694477eb&lang.js.map +1 -1
- package/vue3/es/src/components/NumericMenu.vue_vue&type=script&lang.js +1 -1
- package/vue3/es/src/components/NumericMenu.vue_vue&type=script&lang.js.map +1 -1
- package/vue3/es/src/components/NumericMenu.vue_vue&type=template&id=160fae0c&lang.js +1 -1
- package/vue3/es/src/components/NumericMenu.vue_vue&type=template&id=160fae0c&lang.js.map +1 -1
- package/vue3/es/src/components/Pagination.vue_vue&type=script&lang.js +1 -1
- package/vue3/es/src/components/Pagination.vue_vue&type=script&lang.js.map +1 -1
- package/vue3/es/src/components/Pagination.vue_vue&type=template&id=849a166c&lang.js.map +1 -1
- package/vue3/es/src/components/RangeInput.vue_vue&type=script&lang.js +1 -1
- package/vue3/es/src/components/RangeInput.vue_vue&type=script&lang.js.map +1 -1
- package/vue3/es/src/components/RangeInput.vue_vue&type=template&id=1e17783d&lang.js +1 -1
- package/vue3/es/src/components/RangeInput.vue_vue&type=template&id=1e17783d&lang.js.map +1 -1
- package/vue3/es/src/components/RatingMenu.vue_vue&type=script&lang.js +1 -1
- package/vue3/es/src/components/RatingMenu.vue_vue&type=script&lang.js.map +1 -1
- package/vue3/es/src/components/RatingMenu.vue_vue&type=template&id=9254de68&lang.js +1 -1
- package/vue3/es/src/components/RatingMenu.vue_vue&type=template&id=9254de68&lang.js.map +1 -1
- package/vue3/es/src/components/RefinementList.vue_vue&type=script&lang.js +1 -1
- package/vue3/es/src/components/RefinementList.vue_vue&type=script&lang.js.map +1 -1
- package/vue3/es/src/components/RefinementList.vue_vue&type=template&id=28927239&lang.js.map +1 -1
- package/vue3/es/src/components/SortBy.vue_vue&type=script&lang.js +1 -1
- package/vue3/es/src/components/SortBy.vue_vue&type=script&lang.js.map +1 -1
- package/vue3/es/src/components/SortBy.vue_vue&type=template&id=b69b3b76&lang.js +1 -1
- package/vue3/es/src/components/SortBy.vue_vue&type=template&id=b69b3b76&lang.js.map +1 -1
- package/vue3/es/src/components/StateResults.vue_vue&type=script&lang.js +1 -1
- package/vue3/es/src/components/StateResults.vue_vue&type=script&lang.js.map +1 -1
- package/vue3/es/src/components/StateResults.vue_vue&type=template&id=5992f3d5&lang.js +1 -1
- package/vue3/es/src/components/StateResults.vue_vue&type=template&id=5992f3d5&lang.js.map +1 -1
- package/vue3/es/src/components/ToggleRefinement.vue_vue&type=script&lang.js +1 -1
- package/vue3/es/src/components/ToggleRefinement.vue_vue&type=script&lang.js.map +1 -1
- package/vue3/es/src/components/ToggleRefinement.vue_vue&type=template&id=14e4586f&lang.js +1 -1
- package/vue3/es/src/components/ToggleRefinement.vue_vue&type=template&id=14e4586f&lang.js.map +1 -1
- package/vue3/es/src/mixins/panel.js +1 -1
- package/vue3/es/src/mixins/panel.js.map +1 -1
- package/vue3/es/src/util/createInstantSearchComponent.js +1 -1
- package/vue3/es/src/util/createInstantSearchComponent.js.map +1 -1
- package/vue3/es/src/util/createServerRootMixin.js +1 -1
- package/vue3/es/src/util/createServerRootMixin.js.map +1 -1
- package/vue3/umd/index.js +1 -1
- package/vue3/umd/index.js.map +1 -1
- package/vue2/es/src/connectors/connectStateResults.js +0 -2
- package/vue2/es/src/connectors/connectStateResults.js.map +0 -1
- package/vue3/es/src/connectors/connectStateResults.js +0 -2
- package/vue3/es/src/connectors/connectStateResults.js.map +0 -1
|
@@ -325,28 +325,6 @@ describe('default render', () => {
|
|
|
325
325
|
});
|
|
326
326
|
});
|
|
327
327
|
|
|
328
|
-
it('calls the Panel mixin with `canRefine`', async () => {
|
|
329
|
-
__setState({ ...defaultState });
|
|
330
|
-
|
|
331
|
-
const wrapper = mount(Menu, {
|
|
332
|
-
propsData: defaultProps,
|
|
333
|
-
});
|
|
334
|
-
|
|
335
|
-
const mapStateToCanRefine = () =>
|
|
336
|
-
wrapper.vm.mapStateToCanRefine(wrapper.vm.state);
|
|
337
|
-
|
|
338
|
-
expect(mapStateToCanRefine()).toBe(true);
|
|
339
|
-
|
|
340
|
-
await wrapper.setData({
|
|
341
|
-
state: {
|
|
342
|
-
canRefine: false,
|
|
343
|
-
},
|
|
344
|
-
});
|
|
345
|
-
expect(mapStateToCanRefine()).toBe(false);
|
|
346
|
-
|
|
347
|
-
expect(wrapper.vm.mapStateToCanRefine({})).toBe(false);
|
|
348
|
-
});
|
|
349
|
-
|
|
350
328
|
it('exposes send-event method for insights middleware', async () => {
|
|
351
329
|
const sendEvent = jest.fn();
|
|
352
330
|
__setState({
|
|
@@ -201,29 +201,6 @@ describe('default render', () => {
|
|
|
201
201
|
});
|
|
202
202
|
});
|
|
203
203
|
|
|
204
|
-
it('calls the Panel mixin with `canRefine`', async () => {
|
|
205
|
-
__setState({ ...defaultState });
|
|
206
|
-
|
|
207
|
-
const wrapper = mount(MenuSelect, {
|
|
208
|
-
propsData: defaultProps,
|
|
209
|
-
});
|
|
210
|
-
|
|
211
|
-
const mapStateToCanRefine = () =>
|
|
212
|
-
wrapper.vm.mapStateToCanRefine(wrapper.vm.state);
|
|
213
|
-
|
|
214
|
-
expect(mapStateToCanRefine()).toBe(true);
|
|
215
|
-
|
|
216
|
-
await wrapper.setData({
|
|
217
|
-
state: {
|
|
218
|
-
canRefine: false,
|
|
219
|
-
},
|
|
220
|
-
});
|
|
221
|
-
|
|
222
|
-
expect(mapStateToCanRefine()).toBe(false);
|
|
223
|
-
|
|
224
|
-
expect(wrapper.vm.mapStateToCanRefine({})).toBe(false);
|
|
225
|
-
});
|
|
226
|
-
|
|
227
204
|
it('exposes send-event method for insights middleware', async () => {
|
|
228
205
|
const sendEvent = jest.fn();
|
|
229
206
|
__setState({
|
|
@@ -41,6 +41,7 @@ const moreThan500 = {
|
|
|
41
41
|
const defaultState = {
|
|
42
42
|
items: [all, lessThan10, from10to100, from100to500, moreThan500],
|
|
43
43
|
hasNoResults: false,
|
|
44
|
+
canRefine: true,
|
|
44
45
|
createURL: () => {},
|
|
45
46
|
refine: () => {},
|
|
46
47
|
};
|
|
@@ -125,7 +126,7 @@ describe('default render', () => {
|
|
|
125
126
|
it('renders correctly without refinement', () => {
|
|
126
127
|
__setState({
|
|
127
128
|
...defaultState,
|
|
128
|
-
|
|
129
|
+
canRefine: false,
|
|
129
130
|
});
|
|
130
131
|
|
|
131
132
|
const props = {
|
|
@@ -190,29 +191,6 @@ describe('default render', () => {
|
|
|
190
191
|
});
|
|
191
192
|
});
|
|
192
193
|
|
|
193
|
-
it('calls the Panel mixin with `hasNoResults`', async () => {
|
|
194
|
-
__setState({ ...defaultState });
|
|
195
|
-
|
|
196
|
-
const wrapper = mount(NumericMenu, {
|
|
197
|
-
propsData: defaultProps,
|
|
198
|
-
});
|
|
199
|
-
|
|
200
|
-
const mapStateToCanRefine = () =>
|
|
201
|
-
wrapper.vm.mapStateToCanRefine(wrapper.vm.state);
|
|
202
|
-
|
|
203
|
-
expect(mapStateToCanRefine()).toBe(true);
|
|
204
|
-
|
|
205
|
-
await wrapper.setData({
|
|
206
|
-
state: {
|
|
207
|
-
hasNoResults: true,
|
|
208
|
-
},
|
|
209
|
-
});
|
|
210
|
-
|
|
211
|
-
expect(mapStateToCanRefine()).toBe(false);
|
|
212
|
-
|
|
213
|
-
expect(wrapper.vm.mapStateToCanRefine({})).toBe(false);
|
|
214
|
-
});
|
|
215
|
-
|
|
216
194
|
it('exposes send-event method for insights middleware', async () => {
|
|
217
195
|
const sendEvent = jest.fn();
|
|
218
196
|
__setState({
|
|
@@ -281,7 +259,7 @@ describe('custom default render', () => {
|
|
|
281
259
|
it('renders correctly without refinement', () => {
|
|
282
260
|
__setState({
|
|
283
261
|
...defaultState,
|
|
284
|
-
|
|
262
|
+
canRefine: false,
|
|
285
263
|
});
|
|
286
264
|
|
|
287
265
|
const wrapper = mount({
|
|
@@ -143,27 +143,6 @@ it('Moves to the previous page on that button', async () => {
|
|
|
143
143
|
);
|
|
144
144
|
});
|
|
145
145
|
|
|
146
|
-
it('calls the Panel mixin with `nbPages`', async () => {
|
|
147
|
-
__setState({ ...defaultState });
|
|
148
|
-
|
|
149
|
-
const wrapper = mount(Pagination);
|
|
150
|
-
|
|
151
|
-
const mapStateToCanRefine = () =>
|
|
152
|
-
wrapper.vm.mapStateToCanRefine(wrapper.vm.state);
|
|
153
|
-
|
|
154
|
-
expect(mapStateToCanRefine()).toBe(true);
|
|
155
|
-
|
|
156
|
-
await wrapper.setData({
|
|
157
|
-
state: {
|
|
158
|
-
nbPages: 1,
|
|
159
|
-
},
|
|
160
|
-
});
|
|
161
|
-
|
|
162
|
-
expect(mapStateToCanRefine()).toBe(false);
|
|
163
|
-
|
|
164
|
-
expect(wrapper.vm.mapStateToCanRefine({})).toBe(false);
|
|
165
|
-
});
|
|
166
|
-
|
|
167
146
|
it('implements showFirst', async () => {
|
|
168
147
|
__setState({ ...defaultState });
|
|
169
148
|
|
|
@@ -13,6 +13,7 @@ const defaultRange = {
|
|
|
13
13
|
const defaultState = {
|
|
14
14
|
start: [0, 1000],
|
|
15
15
|
range: defaultRange,
|
|
16
|
+
canRefine: true,
|
|
16
17
|
refine: () => {},
|
|
17
18
|
};
|
|
18
19
|
|
|
@@ -247,40 +248,6 @@ describe('rendering', () => {
|
|
|
247
248
|
});
|
|
248
249
|
});
|
|
249
250
|
|
|
250
|
-
it('calls the Panel mixin with `range`', async () => {
|
|
251
|
-
__setState({
|
|
252
|
-
...defaultState,
|
|
253
|
-
range: {
|
|
254
|
-
min: 0,
|
|
255
|
-
max: 10,
|
|
256
|
-
},
|
|
257
|
-
});
|
|
258
|
-
|
|
259
|
-
const wrapper = mount(RangeInput, {
|
|
260
|
-
propsData: {
|
|
261
|
-
attribute: 'price',
|
|
262
|
-
},
|
|
263
|
-
});
|
|
264
|
-
|
|
265
|
-
const mapStateToCanRefine = () =>
|
|
266
|
-
wrapper.vm.mapStateToCanRefine(wrapper.vm.state);
|
|
267
|
-
|
|
268
|
-
expect(mapStateToCanRefine()).toBe(true);
|
|
269
|
-
|
|
270
|
-
await wrapper.setData({
|
|
271
|
-
state: {
|
|
272
|
-
range: {
|
|
273
|
-
min: 0,
|
|
274
|
-
max: 0,
|
|
275
|
-
},
|
|
276
|
-
},
|
|
277
|
-
});
|
|
278
|
-
|
|
279
|
-
expect(mapStateToCanRefine()).toBe(false);
|
|
280
|
-
|
|
281
|
-
expect(wrapper.vm.mapStateToCanRefine({})).toBe(false);
|
|
282
|
-
});
|
|
283
|
-
|
|
284
251
|
it('exposes send-event method for insights middleware', async () => {
|
|
285
252
|
const sendEvent = jest.fn();
|
|
286
253
|
__setState({
|
|
@@ -126,29 +126,6 @@ it('calls refine when clicked on link', async () => {
|
|
|
126
126
|
expect(wrapper.vm.state.refine).toHaveBeenLastCalledWith('1');
|
|
127
127
|
});
|
|
128
128
|
|
|
129
|
-
it('calls the Panel mixin with `hasNoResults`', async () => {
|
|
130
|
-
__setState({ hasNoResults: false });
|
|
131
|
-
|
|
132
|
-
const wrapper = mount(RatingMenu, {
|
|
133
|
-
propsData: defaultProps,
|
|
134
|
-
});
|
|
135
|
-
|
|
136
|
-
const mapStateToCanRefine = () =>
|
|
137
|
-
wrapper.vm.mapStateToCanRefine(wrapper.vm.state);
|
|
138
|
-
|
|
139
|
-
expect(mapStateToCanRefine()).toBe(true);
|
|
140
|
-
|
|
141
|
-
await wrapper.setData({
|
|
142
|
-
state: {
|
|
143
|
-
hasNoResults: true,
|
|
144
|
-
},
|
|
145
|
-
});
|
|
146
|
-
|
|
147
|
-
expect(mapStateToCanRefine()).toBe(false);
|
|
148
|
-
|
|
149
|
-
expect(wrapper.vm.mapStateToCanRefine({})).toBe(false);
|
|
150
|
-
});
|
|
151
|
-
|
|
152
129
|
it('exposes send-event method for insights middleware', async () => {
|
|
153
130
|
const sendEvent = jest.fn();
|
|
154
131
|
__setState({
|
|
@@ -166,29 +166,6 @@ it('behaves correctly', async () => {
|
|
|
166
166
|
expect(wrapper.vm.state.refine).toHaveBeenLastCalledWith('yo');
|
|
167
167
|
});
|
|
168
168
|
|
|
169
|
-
it('calls the Panel mixin with `canRefine`', async () => {
|
|
170
|
-
__setState({ ...defaultState });
|
|
171
|
-
|
|
172
|
-
const wrapper = mount(RefinementList, {
|
|
173
|
-
propsData: { attribute: 'something' },
|
|
174
|
-
});
|
|
175
|
-
|
|
176
|
-
const mapStateToCanRefine = () =>
|
|
177
|
-
wrapper.vm.mapStateToCanRefine(wrapper.vm.state);
|
|
178
|
-
|
|
179
|
-
expect(mapStateToCanRefine()).toBe(true);
|
|
180
|
-
|
|
181
|
-
await wrapper.setData({
|
|
182
|
-
state: {
|
|
183
|
-
canRefine: false,
|
|
184
|
-
},
|
|
185
|
-
});
|
|
186
|
-
|
|
187
|
-
expect(mapStateToCanRefine()).toBe(false);
|
|
188
|
-
|
|
189
|
-
expect(wrapper.vm.mapStateToCanRefine({})).toBe(false);
|
|
190
|
-
});
|
|
191
|
-
|
|
192
169
|
it('exposes send-event method for insights middleware', async () => {
|
|
193
170
|
const sendEvent = jest.fn();
|
|
194
171
|
__setState({
|
|
@@ -12,6 +12,7 @@ const defaultState = {
|
|
|
12
12
|
{ value: 'some_index_quality', label: 'Quality ascending' },
|
|
13
13
|
],
|
|
14
14
|
hasNoResults: false,
|
|
15
|
+
canRefine: true,
|
|
15
16
|
currentRefinement: 'some_index',
|
|
16
17
|
};
|
|
17
18
|
|
|
@@ -106,26 +107,3 @@ it('calls `refine` when the selection changes with the `value`', async () => {
|
|
|
106
107
|
expect(refine).toHaveBeenLastCalledWith('some_index_quality');
|
|
107
108
|
expect(selectedOption.element.selected).toBe(true);
|
|
108
109
|
});
|
|
109
|
-
|
|
110
|
-
it('calls the Panel mixin with `hasNoResults`', async () => {
|
|
111
|
-
__setState({ ...defaultState });
|
|
112
|
-
|
|
113
|
-
const wrapper = mount(SortBy, {
|
|
114
|
-
propsData: defaultProps,
|
|
115
|
-
});
|
|
116
|
-
|
|
117
|
-
const mapStateToCanRefine = () =>
|
|
118
|
-
wrapper.vm.mapStateToCanRefine(wrapper.vm.state);
|
|
119
|
-
|
|
120
|
-
expect(mapStateToCanRefine()).toBe(true);
|
|
121
|
-
|
|
122
|
-
await wrapper.setData({
|
|
123
|
-
state: {
|
|
124
|
-
hasNoResults: true,
|
|
125
|
-
},
|
|
126
|
-
});
|
|
127
|
-
|
|
128
|
-
expect(mapStateToCanRefine()).toBe(false);
|
|
129
|
-
|
|
130
|
-
expect(wrapper.vm.mapStateToCanRefine({})).toBe(false);
|
|
131
|
-
});
|
|
@@ -13,6 +13,8 @@ it('renders explanation if no slot is used', () => {
|
|
|
13
13
|
state: {
|
|
14
14
|
query: 'this is the query',
|
|
15
15
|
},
|
|
16
|
+
status: 'idle',
|
|
17
|
+
error: undefined,
|
|
16
18
|
});
|
|
17
19
|
const wrapper = mount(StateResults);
|
|
18
20
|
expect(wrapper.html()).toMatchSnapshot();
|
|
@@ -39,6 +41,8 @@ it('gives state & results to default slot', () => {
|
|
|
39
41
|
__setState({
|
|
40
42
|
state,
|
|
41
43
|
results,
|
|
44
|
+
status: 'idle',
|
|
45
|
+
error: undefined,
|
|
42
46
|
});
|
|
43
47
|
|
|
44
48
|
mount(StateResults, {
|
|
@@ -47,6 +51,8 @@ it('gives state & results to default slot', () => {
|
|
|
47
51
|
expect(props).toEqual(expect.objectContaining(results));
|
|
48
52
|
expect(props.results).toEqual(results);
|
|
49
53
|
expect(props.state).toEqual(state);
|
|
54
|
+
expect(props.status).toEqual('idle');
|
|
55
|
+
expect(props.error).toEqual(undefined);
|
|
50
56
|
},
|
|
51
57
|
},
|
|
52
58
|
});
|
|
@@ -13,6 +13,7 @@ const defaultValue = {
|
|
|
13
13
|
|
|
14
14
|
const defaultState = {
|
|
15
15
|
value: defaultValue,
|
|
16
|
+
canRefine: true,
|
|
16
17
|
refine: () => {},
|
|
17
18
|
createURL: () => {},
|
|
18
19
|
};
|
|
@@ -82,6 +83,7 @@ describe('default render', () => {
|
|
|
82
83
|
it('renders correctly without refinement (with 0)', () => {
|
|
83
84
|
__setState({
|
|
84
85
|
...defaultState,
|
|
86
|
+
canRefine: false,
|
|
85
87
|
value: {
|
|
86
88
|
...defaultValue,
|
|
87
89
|
count: 0,
|
|
@@ -98,6 +100,7 @@ describe('default render', () => {
|
|
|
98
100
|
it('renders correctly without refinement (with null)', () => {
|
|
99
101
|
__setState({
|
|
100
102
|
...defaultState,
|
|
103
|
+
canRefine: false,
|
|
101
104
|
value: {
|
|
102
105
|
...defaultValue,
|
|
103
106
|
count: null,
|
|
@@ -162,39 +165,6 @@ describe('default render', () => {
|
|
|
162
165
|
});
|
|
163
166
|
});
|
|
164
167
|
|
|
165
|
-
it('calls the Panel mixin with `value.count`', async () => {
|
|
166
|
-
__setState({
|
|
167
|
-
...defaultState,
|
|
168
|
-
value: {
|
|
169
|
-
// Otherwise setData update the default value
|
|
170
|
-
// and impact the other tests. We should not
|
|
171
|
-
// rely on a global state for the tests.
|
|
172
|
-
...defaultValue,
|
|
173
|
-
},
|
|
174
|
-
});
|
|
175
|
-
|
|
176
|
-
const wrapper = mount(Toggle, {
|
|
177
|
-
propsData: defaultProps,
|
|
178
|
-
});
|
|
179
|
-
|
|
180
|
-
const mapStateToCanRefine = () =>
|
|
181
|
-
wrapper.vm.mapStateToCanRefine(wrapper.vm.state);
|
|
182
|
-
|
|
183
|
-
expect(mapStateToCanRefine()).toBe(true);
|
|
184
|
-
|
|
185
|
-
await wrapper.setData({
|
|
186
|
-
state: {
|
|
187
|
-
value: {
|
|
188
|
-
count: 0,
|
|
189
|
-
},
|
|
190
|
-
},
|
|
191
|
-
});
|
|
192
|
-
|
|
193
|
-
expect(mapStateToCanRefine()).toBe(false);
|
|
194
|
-
|
|
195
|
-
expect(wrapper.vm.mapStateToCanRefine({})).toBe(false);
|
|
196
|
-
});
|
|
197
|
-
|
|
198
168
|
it('exposes send-event method for insights middleware', async () => {
|
|
199
169
|
const sendEvent = jest.fn();
|
|
200
170
|
__setState({
|
|
@@ -255,6 +225,7 @@ describe('custom default render', () => {
|
|
|
255
225
|
it('renders correctly without refinement', () => {
|
|
256
226
|
__setState({
|
|
257
227
|
...defaultState,
|
|
228
|
+
canRefine: false,
|
|
258
229
|
value: {
|
|
259
230
|
...defaultValue,
|
|
260
231
|
count: 0,
|
|
@@ -731,7 +731,7 @@ exports[`default render renders correctly a sub categories selected 1`] = `
|
|
|
731
731
|
<div class="ais-HierarchicalMenu">
|
|
732
732
|
<ul class="ais-HierarchicalMenu-list ais-HierarchicalMenu-list--lvl0">
|
|
733
733
|
<li class="ais-HierarchicalMenu-item ais-HierarchicalMenu-item--parent ais-HierarchicalMenu-item--selected">
|
|
734
|
-
<a class="ais-HierarchicalMenu-link">
|
|
734
|
+
<a class="ais-HierarchicalMenu-link ais-HierarchicalMenu-link--selected">
|
|
735
735
|
<span class="ais-HierarchicalMenu-label">
|
|
736
736
|
Apple
|
|
737
737
|
</span>
|
|
@@ -761,7 +761,7 @@ exports[`default render renders correctly a sub categories selected 1`] = `
|
|
|
761
761
|
</a>
|
|
762
762
|
</li>
|
|
763
763
|
<li class="ais-HierarchicalMenu-item ais-HierarchicalMenu-item--parent ais-HierarchicalMenu-item--selected">
|
|
764
|
-
<a class="ais-HierarchicalMenu-link">
|
|
764
|
+
<a class="ais-HierarchicalMenu-link ais-HierarchicalMenu-link--selected">
|
|
765
765
|
<span class="ais-HierarchicalMenu-label">
|
|
766
766
|
MacBook
|
|
767
767
|
</span>
|
|
@@ -22,6 +22,16 @@ export const createWidgetMixin = jest.fn(() => ({
|
|
|
22
22
|
return {
|
|
23
23
|
state,
|
|
24
24
|
widget,
|
|
25
|
+
instantSearchInstance: {
|
|
26
|
+
status: 'idle',
|
|
27
|
+
error: undefined,
|
|
28
|
+
addListener: () => {},
|
|
29
|
+
removeListener: () => {},
|
|
30
|
+
},
|
|
31
|
+
getParentIndex: () => ({
|
|
32
|
+
getResults: () => null,
|
|
33
|
+
getHelper: () => null,
|
|
34
|
+
}),
|
|
25
35
|
};
|
|
26
36
|
},
|
|
27
37
|
}));
|
|
@@ -86,18 +86,12 @@ describe('createPanelProviderMixin', () => {
|
|
|
86
86
|
});
|
|
87
87
|
|
|
88
88
|
describe('createPanelConsumerMixin', () => {
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
it('emits PANEL_CHANGE_EVENT on `state.attributeName` change', async () => {
|
|
89
|
+
it('emits PANEL_CHANGE_EVENT on `state.canRefine` change', async () => {
|
|
92
90
|
const emitter = createFakeEmitter();
|
|
93
91
|
const Test = createFakeComponent();
|
|
94
92
|
|
|
95
93
|
const wrapper = mount(Test, {
|
|
96
|
-
mixins: [
|
|
97
|
-
createPanelConsumerMixin({
|
|
98
|
-
mapStateToCanRefine,
|
|
99
|
-
}),
|
|
100
|
-
],
|
|
94
|
+
mixins: [createPanelConsumerMixin()],
|
|
101
95
|
provide: {
|
|
102
96
|
[PANEL_EMITTER_NAMESPACE]: emitter,
|
|
103
97
|
},
|
|
@@ -105,7 +99,7 @@ describe('createPanelConsumerMixin', () => {
|
|
|
105
99
|
|
|
106
100
|
await wrapper.setData({
|
|
107
101
|
state: {
|
|
108
|
-
|
|
102
|
+
canRefine: false,
|
|
109
103
|
},
|
|
110
104
|
});
|
|
111
105
|
|
|
@@ -113,7 +107,7 @@ describe('createPanelConsumerMixin', () => {
|
|
|
113
107
|
expect(emitter.emit).toHaveBeenLastCalledWith(PANEL_CHANGE_EVENT, false);
|
|
114
108
|
|
|
115
109
|
if (isVue3) {
|
|
116
|
-
await wrapper.setData({ state: {
|
|
110
|
+
await wrapper.setData({ state: { canRefine: true } });
|
|
117
111
|
} else {
|
|
118
112
|
// ↓ this should be replaceable with `wrapper.setData()` but it didn't
|
|
119
113
|
// trigger the watcher in `createPanelConsumerMixin`.
|
|
@@ -121,7 +115,7 @@ describe('createPanelConsumerMixin', () => {
|
|
|
121
115
|
// https://github.com/vuejs/vue-test-utils/issues/1756
|
|
122
116
|
// https://github.com/vuejs/vue-test-utils/issues/149
|
|
123
117
|
wrapper.vm.$set(wrapper.vm, 'state', {
|
|
124
|
-
|
|
118
|
+
canRefine: true,
|
|
125
119
|
});
|
|
126
120
|
await nextTick();
|
|
127
121
|
}
|
|
@@ -135,11 +129,7 @@ describe('createPanelConsumerMixin', () => {
|
|
|
135
129
|
const Test = createFakeComponent();
|
|
136
130
|
|
|
137
131
|
const wrapper = mount(Test, {
|
|
138
|
-
mixins: [
|
|
139
|
-
createPanelConsumerMixin({
|
|
140
|
-
mapStateToCanRefine,
|
|
141
|
-
}),
|
|
142
|
-
],
|
|
132
|
+
mixins: [createPanelConsumerMixin()],
|
|
143
133
|
provide: {
|
|
144
134
|
[PANEL_EMITTER_NAMESPACE]: emitter,
|
|
145
135
|
},
|
|
@@ -147,7 +137,7 @@ describe('createPanelConsumerMixin', () => {
|
|
|
147
137
|
|
|
148
138
|
await wrapper.setData({
|
|
149
139
|
state: {
|
|
150
|
-
|
|
140
|
+
canRefine: false,
|
|
151
141
|
},
|
|
152
142
|
});
|
|
153
143
|
|
|
@@ -156,7 +146,7 @@ describe('createPanelConsumerMixin', () => {
|
|
|
156
146
|
|
|
157
147
|
await wrapper.setData({
|
|
158
148
|
state: {
|
|
159
|
-
|
|
149
|
+
canRefine: false,
|
|
160
150
|
},
|
|
161
151
|
});
|
|
162
152
|
|
|
@@ -168,11 +158,7 @@ describe('createPanelConsumerMixin', () => {
|
|
|
168
158
|
const Test = createFakeComponent();
|
|
169
159
|
|
|
170
160
|
const wrapper = mount(Test, {
|
|
171
|
-
mixins: [
|
|
172
|
-
createPanelConsumerMixin({
|
|
173
|
-
mapStateToCanRefine,
|
|
174
|
-
}),
|
|
175
|
-
],
|
|
161
|
+
mixins: [createPanelConsumerMixin()],
|
|
176
162
|
provide: {
|
|
177
163
|
[PANEL_EMITTER_NAMESPACE]: emitter,
|
|
178
164
|
},
|
|
@@ -180,7 +166,7 @@ describe('createPanelConsumerMixin', () => {
|
|
|
180
166
|
|
|
181
167
|
await wrapper.setData({
|
|
182
168
|
state: {
|
|
183
|
-
|
|
169
|
+
canRefine: true,
|
|
184
170
|
},
|
|
185
171
|
});
|
|
186
172
|
|
|
@@ -193,11 +179,7 @@ describe('createPanelConsumerMixin', () => {
|
|
|
193
179
|
const Test = createFakeComponent();
|
|
194
180
|
|
|
195
181
|
const wrapper = mount(Test, {
|
|
196
|
-
mixins: [
|
|
197
|
-
createPanelConsumerMixin({
|
|
198
|
-
mapStateToCanRefine,
|
|
199
|
-
}),
|
|
200
|
-
],
|
|
182
|
+
mixins: [createPanelConsumerMixin()],
|
|
201
183
|
provide: {
|
|
202
184
|
[PANEL_EMITTER_NAMESPACE]: emitter,
|
|
203
185
|
},
|
|
@@ -205,7 +187,7 @@ describe('createPanelConsumerMixin', () => {
|
|
|
205
187
|
|
|
206
188
|
await wrapper.setData({
|
|
207
189
|
state: {
|
|
208
|
-
|
|
190
|
+
canRefine: true,
|
|
209
191
|
},
|
|
210
192
|
});
|
|
211
193
|
|
|
@@ -227,11 +209,7 @@ describe('createPanelConsumerMixin', () => {
|
|
|
227
209
|
const Test = createFakeComponent();
|
|
228
210
|
|
|
229
211
|
const wrapper = mount(Test, {
|
|
230
|
-
mixins: [
|
|
231
|
-
createPanelConsumerMixin({
|
|
232
|
-
mapStateToCanRefine,
|
|
233
|
-
}),
|
|
234
|
-
],
|
|
212
|
+
mixins: [createPanelConsumerMixin()],
|
|
235
213
|
provide: {
|
|
236
214
|
[PANEL_EMITTER_NAMESPACE]: emitter,
|
|
237
215
|
},
|
|
@@ -239,7 +217,7 @@ describe('createPanelConsumerMixin', () => {
|
|
|
239
217
|
|
|
240
218
|
await wrapper.setData({
|
|
241
219
|
state: {
|
|
242
|
-
|
|
220
|
+
canRefine: true,
|
|
243
221
|
},
|
|
244
222
|
});
|
|
245
223
|
|
|
@@ -247,9 +225,9 @@ describe('createPanelConsumerMixin', () => {
|
|
|
247
225
|
expect(emitter.emit).toHaveBeenLastCalledWith(PANEL_CHANGE_EVENT, true);
|
|
248
226
|
|
|
249
227
|
if (isVue3) {
|
|
250
|
-
await wrapper.setData({ state: {
|
|
228
|
+
await wrapper.setData({ state: { canRefine: false } });
|
|
251
229
|
} else {
|
|
252
|
-
wrapper.vm.$set(wrapper.vm, 'state', {
|
|
230
|
+
wrapper.vm.$set(wrapper.vm, 'state', { canRefine: false });
|
|
253
231
|
await nextTick();
|
|
254
232
|
}
|
|
255
233
|
|
|
@@ -257,9 +235,9 @@ describe('createPanelConsumerMixin', () => {
|
|
|
257
235
|
expect(emitter.emit).toHaveBeenLastCalledWith(PANEL_CHANGE_EVENT, false);
|
|
258
236
|
|
|
259
237
|
if (isVue3) {
|
|
260
|
-
await wrapper.setData({ state: {
|
|
238
|
+
await wrapper.setData({ state: { canRefine: false } });
|
|
261
239
|
} else {
|
|
262
|
-
wrapper.vm.$set(wrapper.vm, 'state', {
|
|
240
|
+
wrapper.vm.$set(wrapper.vm, 'state', { canRefine: false });
|
|
263
241
|
await nextTick();
|
|
264
242
|
}
|
|
265
243
|
|
package/src/mixins/panel.js
CHANGED
|
@@ -39,7 +39,9 @@ export const createPanelProviderMixin = () => ({
|
|
|
39
39
|
},
|
|
40
40
|
});
|
|
41
41
|
|
|
42
|
-
export const createPanelConsumerMixin = ({
|
|
42
|
+
export const createPanelConsumerMixin = ({
|
|
43
|
+
mapStateToCanRefine = state => Boolean(state.canRefine),
|
|
44
|
+
} = {}) => ({
|
|
43
45
|
inject: {
|
|
44
46
|
emitter: {
|
|
45
47
|
from: PANEL_EMITTER_NAMESPACE,
|
|
@@ -30,6 +30,13 @@ export const createInstantSearchComponent = component =>
|
|
|
30
30
|
'Please open a new issue: https://github.com/algolia/vue-instantsearch/issues/new?template=feature.md'
|
|
31
31
|
);
|
|
32
32
|
},
|
|
33
|
+
onStateChange() {
|
|
34
|
+
throw new Error(
|
|
35
|
+
'onStateChange configuration can not be changed dynamically at this point.' +
|
|
36
|
+
'\n\n' +
|
|
37
|
+
'Please open a new issue: https://github.com/algolia/vue-instantsearch/issues/new?template=feature.md'
|
|
38
|
+
);
|
|
39
|
+
},
|
|
33
40
|
searchFunction(searchFunction) {
|
|
34
41
|
// private InstantSearch.js API:
|
|
35
42
|
this.instantSearchInstance._searchFunction = searchFunction;
|
|
@@ -105,7 +105,16 @@ function augmentInstantSearch(instantSearchOptions, cloneComponent) {
|
|
|
105
105
|
mixins: [
|
|
106
106
|
{
|
|
107
107
|
beforeCreate() {
|
|
108
|
-
|
|
108
|
+
const descriptor = Object.getOwnPropertyDescriptor(
|
|
109
|
+
component,
|
|
110
|
+
'$nuxt'
|
|
111
|
+
);
|
|
112
|
+
|
|
113
|
+
const isWritable = descriptor
|
|
114
|
+
? descriptor.writable || descriptor.set
|
|
115
|
+
: false;
|
|
116
|
+
|
|
117
|
+
if (component.$nuxt && isWritable) {
|
|
109
118
|
// In case of Nuxt (3), we ensure the context is shared between
|
|
110
119
|
// the real and cloned component
|
|
111
120
|
this.$nuxt = component.$nuxt;
|