Skip to content

Commit 1d8a40e

Browse files
authoredJun 29, 2021
fix(sortBy): do not write the default state (#4798)
Without this check, if a route state is read (eg. in ssr) with the default value, it will be persisted in the URL, as the refinement is the default refinement, and the ui state was kept as-is, instead of being cleared. fixes algolia/vue-instantsearch#1005
1 parent 91bdea1 commit 1d8a40e

File tree

2 files changed

+30
-12
lines changed

2 files changed

+30
-12
lines changed
 

‎src/connectors/sort-by/__tests__/connectSortBy-test.ts

+26-7
Original file line numberDiff line numberDiff line change
@@ -547,7 +547,7 @@ See documentation: https://www.algolia.com/doc/api-reference/widgets/sort-by/js/
547547
const [widget, helper] = getInitializedWidget();
548548

549549
const uiStateBefore = {};
550-
const uiStateAfter = widget.getWidgetUiState!(uiStateBefore, {
550+
const uiStateAfter = widget.getWidgetUiState(uiStateBefore, {
551551
searchParameters: helper.state,
552552
helper,
553553
});
@@ -561,7 +561,7 @@ See documentation: https://www.algolia.com/doc/api-reference/widgets/sort-by/js/
561561
refine('priceASC');
562562

563563
const uiStateBefore = {};
564-
const uiStateAfter = widget.getWidgetUiState!(uiStateBefore, {
564+
const uiStateAfter = widget.getWidgetUiState(uiStateBefore, {
565565
searchParameters: helper.state,
566566
helper,
567567
});
@@ -576,21 +576,41 @@ See documentation: https://www.algolia.com/doc/api-reference/widgets/sort-by/js/
576576

577577
refine('priceASC');
578578

579-
const uiStateBefore = widget.getWidgetUiState!(
579+
const uiStateBefore = widget.getWidgetUiState(
580580
{},
581581
{
582582
searchParameters: helper.state,
583583
helper,
584584
}
585585
);
586-
const uiStateAfter = widget.getWidgetUiState!(uiStateBefore, {
586+
const uiStateAfter = widget.getWidgetUiState(uiStateBefore, {
587587
searchParameters: helper.state,
588588
helper,
589589
});
590590

591591
expect(uiStateAfter).toEqual(uiStateBefore);
592592
});
593593

594+
test('should remove refinement if new refinement is the initial index', () => {
595+
const [widget, helper] = getInitializedWidget();
596+
597+
expect(helper.state.index).toBe('relevance');
598+
599+
expect(
600+
widget.getWidgetUiState(
601+
{
602+
sortBy: 'relevance',
603+
},
604+
{
605+
searchParameters: helper.state,
606+
helper,
607+
}
608+
)
609+
).toEqual({
610+
sortBy: undefined,
611+
});
612+
});
613+
594614
test('should use the top-level `indexName` for the initial index', () => {
595615
const render = jest.fn();
596616
const makeWidget = connectSortBy(render);
@@ -622,7 +642,7 @@ See documentation: https://www.algolia.com/doc/api-reference/widgets/sort-by/js/
622642
})
623643
);
624644

625-
const actual = widget.getWidgetUiState!(
645+
const actual = widget.getWidgetUiState(
626646
{},
627647
{
628648
searchParameters: helper.state,
@@ -657,7 +677,6 @@ See documentation: https://www.algolia.com/doc/api-reference/widgets/sort-by/js/
657677
createSearchClient(),
658678
'indexNameParent'
659679
);
660-
helper.search = jest.fn();
661680

662681
widget.init!(
663682
createInitOptions({
@@ -668,7 +687,7 @@ See documentation: https://www.algolia.com/doc/api-reference/widgets/sort-by/js/
668687
})
669688
);
670689

671-
const actual = widget.getWidgetUiState!(
690+
const actual = widget.getWidgetUiState(
672691
{},
673692
{
674693
searchParameters: helper.state,

‎src/connectors/sort-by/connectSortBy.ts

+4-5
Original file line numberDiff line numberDiff line change
@@ -177,13 +177,12 @@ const connectSortBy: SortByConnector = function connectSortBy(
177177
getWidgetUiState(uiState, { searchParameters }) {
178178
const currentIndex = searchParameters.index;
179179

180-
if (currentIndex === connectorState.initialIndex) {
181-
return uiState;
182-
}
183-
184180
return {
185181
...uiState,
186-
sortBy: currentIndex,
182+
sortBy:
183+
currentIndex !== connectorState.initialIndex
184+
? currentIndex
185+
: undefined,
187186
};
188187
},
189188

0 commit comments

Comments
 (0)
Please sign in to comment.