From e8ea57badf14798d1575b916f2ed3578889ba89d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Chalifour?= Date: Mon, 13 May 2019 10:27:40 +0200 Subject: [PATCH] fix(types): improve UiState types (#3763) --- src/lib/RoutingManager.ts | 2 +- src/lib/__tests__/RoutingManager-test.js | 8 ++--- src/types/widget.ts | 40 +++++++++++++++++++++++- 3 files changed, 44 insertions(+), 6 deletions(-) diff --git a/src/lib/RoutingManager.ts b/src/lib/RoutingManager.ts index de99f2b83a..ec06966477 100644 --- a/src/lib/RoutingManager.ts +++ b/src/lib/RoutingManager.ts @@ -61,7 +61,7 @@ class RoutingManager implements Widget { const widgets = this.instantSearchInstance.widgets; const helper = this.instantSearchInstance.helper!; - return widgets.reduce((state, widget) => { + return widgets.reduce((state, widget) => { if (!widget.getWidgetState) { return state; } diff --git a/src/lib/__tests__/RoutingManager-test.js b/src/lib/__tests__/RoutingManager-test.js index c9a432e7d2..39ecdc0275 100644 --- a/src/lib/__tests__/RoutingManager-test.js +++ b/src/lib/__tests__/RoutingManager-test.js @@ -98,7 +98,7 @@ describe('RoutingManager', () => { }); const widgetState = { - some: 'values', + query: 'query', }; const widget = { render: () => {}, @@ -107,7 +107,7 @@ describe('RoutingManager', () => { search.addWidget(widget); const actualInitialState = { - some: 'values', + query: 'query', }; search.start(); @@ -149,7 +149,7 @@ describe('RoutingManager', () => { search.start(); const actualInitialState = { - some: 'values', + query: 'query', }; const router = new RoutingManager({ @@ -182,7 +182,7 @@ describe('RoutingManager', () => { search.addWidget(widget); const actualInitialState = { - some: 'values', + query: 'query', }; search.start(); diff --git a/src/types/widget.ts b/src/types/widget.ts index e2a0e1c2e8..a753ce53f2 100644 --- a/src/types/widget.ts +++ b/src/types/widget.ts @@ -31,7 +31,45 @@ interface DisposeOptions { } export type UiState = { - [stateKey: string]: any; + query?: string; + menu?: { + [attribute: string]: string; + }; + /** + * The list of hierarchical menus. + * Nested levels must contain the record separator. + * + * @example ['Audio', 'Audio > Headphones'] + */ + hierarchicalMenu?: { + [attribute: string]: string[]; + }; + refinementList?: { + [attribute: string]: string[]; + }; + numericRefinementList?: { + [attribute: string]: number; + }; + numericSelector?: { + [attribute: string]: number; + }; + /** + * The range as a tuple. + * + * @example '100:500' + */ + range?: { + [attribute: string]: string; + }; + starRating?: { + [attribute: string]: number; + }; + toggle?: { + [attribute: string]: boolean; + }; + sortBy?: string; + page?: number; + hitsPerPage?: number; }; export interface Widget {