From 5f8617723b59be6bd01f14707ef8cbf6206c4ce0 Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Tue, 3 Sep 2019 13:05:13 +0200 Subject: [PATCH] fix(InstantSearch): fix initialUIState when refinements are already present in the route (#4103) --- src/lib/InstantSearch.ts | 10 +++++++- src/lib/__tests__/InstantSearch-test.js | 33 +++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/src/lib/InstantSearch.ts b/src/lib/InstantSearch.ts index d2c866015a..0ba8562431 100644 --- a/src/lib/InstantSearch.ts +++ b/src/lib/InstantSearch.ts @@ -213,7 +213,6 @@ See: https://www.algolia.com/doc/guides/building-search-ui/going-further/backend this._stalledSearchDelay = stalledSearchDelay; this._searchStalledTimer = null; this._isSearchStalled = false; - this._initialUiState = initialUiState; if (searchFunction) { this._searchFunction = searchFunction; @@ -227,6 +226,15 @@ See: https://www.algolia.com/doc/guides/building-search-ui/going-further/backend ...routing, }; } + + if (this.routing) { + this._initialUiState = { + ...initialUiState, + ...this.routing.stateMapping.routeToState(this.routing.router.read()), + }; + } else { + this._initialUiState = initialUiState; + } } /** diff --git a/src/lib/__tests__/InstantSearch-test.js b/src/lib/__tests__/InstantSearch-test.js index fa6f76b6e7..971f2d4f19 100644 --- a/src/lib/__tests__/InstantSearch-test.js +++ b/src/lib/__tests__/InstantSearch-test.js @@ -402,6 +402,39 @@ describe('start', () => { }); }); + it('forwards the router state to the main index', () => { + const router = { + read: jest.fn(() => ({ + indexName: { + hierarchicalMenu: { + 'hierarchicalCategories.lvl0': ['Cell Phones'], + }, + }, + })), + write: jest.fn(), + onUpdate: jest.fn(), + createURL: jest.fn(() => '#'), + }; + + const search = new InstantSearch({ + indexName: 'indexName', + searchClient: createSearchClient(), + routing: { + router, + }, + }); + + search.start(); + + expect(search.mainIndex.getWidgetState()).toEqual({ + indexName: { + hierarchicalMenu: { + 'hierarchicalCategories.lvl0': ['Cell Phones'], + }, + }, + }); + }); + it('calls `init` on the added widgets', () => { const search = new InstantSearch({ indexName: 'indexName',