Skip to content
This repository was archived by the owner on Dec 30, 2022. It is now read-only.

Commit 435c7d3

Browse files
authored
fix(panel): safely access state in mapStateToCanRefine (#876)
Most of the widgets were assuming the shape of state is always "right", but since #871 it is also called with an empty object. This PR does the following things: - changes all widgets to work correctly with empty object - makes sure always a boolean is returned from mapStateToCanRefine to make tests easier - make tests of mapStateToCanRefine consistent, as well as adding a unit test to each of the methods using {} as state closes #875 fixes #874
1 parent 878983f commit 435c7d3

29 files changed

+204
-131
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@
114114
"bundlesize": [
115115
{
116116
"path": "./dist/vue-instantsearch.js",
117-
"maxSize": "48.00 kB"
117+
"maxSize": "48.10 kB"
118118
},
119119
{
120120
"path": "./dist/vue-instantsearch.common.js",

src/components/Breadcrumb.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ export default {
5858
mixins: [
5959
createWidgetMixin({ connector: connectBreadcrumb }),
6060
createPanelConsumerMixin({
61-
mapStateToCanRefine: state => state.canRefine,
61+
mapStateToCanRefine: state => Boolean(state.canRefine),
6262
}),
6363
createSuitMixin({ name: 'Breadcrumb' }),
6464
],

src/components/ClearRefinements.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ export default {
3131
mixins: [
3232
createWidgetMixin({ connector: connectClearRefinements }),
3333
createPanelConsumerMixin({
34-
mapStateToCanRefine: state => state.hasRefinements,
34+
mapStateToCanRefine: state => Boolean(state.hasRefinements),
3535
}),
3636
createSuitMixin({ name: 'ClearRefinements' }),
3737
],

src/components/CurrentRefinements.vue

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,8 @@ export default {
6565
createSuitMixin({ name: 'CurrentRefinements' }),
6666
createWidgetMixin({ connector: connectCurrentRefinements }),
6767
createPanelConsumerMixin({
68-
mapStateToCanRefine: state => state.items.length > 0,
68+
mapStateToCanRefine: state =>
69+
Boolean(state.items) && state.items.length > 0,
6970
}),
7071
],
7172
props: {

src/components/HierarchicalMenu.vue

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,8 @@ import { createPanelConsumerMixin } from '../mixins/panel';
4545
import HierarchicalMenuList from './HierarchicalMenuList.vue';
4646
import { createSuitMixin } from '../mixins/suit';
4747
48-
const mapStateToCanRefine = state => state.items.length > 0;
48+
const mapStateToCanRefine = state =>
49+
Boolean(state.items) && state.items.length > 0;
4950
5051
export default {
5152
name: 'AisHierarchicalMenu',

src/components/HitsPerPage.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ export default {
3636
createSuitMixin({ name: 'HitsPerPage' }),
3737
createWidgetMixin({ connector: connectHitsPerPage }),
3838
createPanelConsumerMixin({
39-
mapStateToCanRefine: state => !state.hasNoResults,
39+
mapStateToCanRefine: state => state.hasNoResults === false,
4040
}),
4141
],
4242
props: {

src/components/Menu.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ export default {
5656
createSuitMixin({ name: 'Menu' }),
5757
createWidgetMixin({ connector: connectMenu }),
5858
createPanelConsumerMixin({
59-
mapStateToCanRefine: state => state.canRefine,
59+
mapStateToCanRefine: state => Boolean(state.canRefine),
6060
}),
6161
],
6262
props: {

src/components/MenuSelect.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ export default {
4848
createSuitMixin({ name: 'MenuSelect' }),
4949
createWidgetMixin({ connector: connectMenu }),
5050
createPanelConsumerMixin({
51-
mapStateToCanRefine: state => state.canRefine,
51+
mapStateToCanRefine: state => Boolean(state.canRefine),
5252
}),
5353
],
5454
props: {

src/components/NumericMenu.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ export default {
4444
createWidgetMixin({ connector: connectNumericMenu }),
4545
createSuitMixin({ name: 'NumericMenu' }),
4646
createPanelConsumerMixin({
47-
mapStateToCanRefine: state => !state.hasNoResults,
47+
mapStateToCanRefine: state => state.hasNoResults === false,
4848
}),
4949
],
5050
props: {

src/components/RangeInput.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ import { createPanelConsumerMixin } from '../mixins/panel';
6060
import { createSuitMixin } from '../mixins/suit';
6161
6262
const mapStateToCanRefine = state =>
63-
state && state.range && state.range.min !== state.range.max;
63+
state && Boolean(state.range) && state.range.min !== state.range.max;
6464
6565
export default {
6666
name: 'AisRangeInput',

0 commit comments

Comments
 (0)