Skip to content

Commit 0a87245

Browse files
committed
feat(index): remove getWidgetState (#6476)
The old method has long been deprecated and has no usage inside instantsearch outside of running a warning. The warning on adding a widget with getWidgetState is still present, but slightly reworded. [FX-3197] BREAKING CHANGE: rename getWidgetState to getWidgetUiState in your custom widgets or connectors.
1 parent 066ff0e commit 0a87245

File tree

4 files changed

+9
-131
lines changed

4 files changed

+9
-131
lines changed

packages/instantsearch-core/src/types/widget.ts

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -246,17 +246,6 @@ type RequiredUiStateLifeCycle<TWidgetDescription extends WidgetDescription> = {
246246
}
247247
) => Partial<IndexUiState & TWidgetDescription['indexUiState']>;
248248

249-
/**
250-
* This function is required for a widget to be taken in account for routing.
251-
* It will derive a uiState for this widget based on the existing uiState and
252-
* the search parameters applied.
253-
*
254-
* @deprecated Use `getWidgetUiState` instead.
255-
* @param uiState - Current state.
256-
* @param widgetStateOptions - Extra information to calculate uiState.
257-
*/
258-
getWidgetState?: RequiredUiStateLifeCycle<TWidgetDescription>['getWidgetUiState'];
259-
260249
/**
261250
* This function is required for a widget to behave correctly when a URL is
262251
* loaded via e.g. Routing. It receives the current UiState and applied search
@@ -330,7 +319,7 @@ export type Widget<
330319

331320
export type IndexWidget<TUiState extends UiState = UiState> = Omit<
332321
Widget<IndexWidgetDescription & { widgetParams: IndexWidgetParams }>,
333-
'getWidgetUiState' | 'getWidgetState'
322+
'getWidgetUiState'
334323
> & {
335324
// public API
336325
addWidgets: (widgets: Array<Widget | IndexWidget>) => IndexWidget;
@@ -371,10 +360,6 @@ export type IndexWidget<TUiState extends UiState = UiState> = Omit<
371360
init: (options: IndexInitOptions) => void;
372361
render: (options: IndexRenderOptions) => void;
373362
dispose: (options?: DisposeOptions) => void;
374-
/**
375-
* @deprecated
376-
*/
377-
getWidgetState: (uiState: UiState) => UiState;
378363
getWidgetUiState: <TSpecificUiState extends UiState = TUiState>(
379364
uiState: TSpecificUiState
380365
) => TSpecificUiState;

packages/instantsearch-core/src/widgets/__tests__/index-widget.test.ts

Lines changed: 0 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ import {
2929
createIndexInitOptions,
3030
createDisposeOptions,
3131
} from '../../../test/createWidget';
32-
import { warnCache } from '../../lib/public';
3332

3433
import type { Widget } from '../../types';
3534
import type { PlainSearchParameters } from 'algoliasearch-helper';
@@ -3231,94 +3230,6 @@ See documentation: https://www.algolia.com/doc/api-reference/widgets/index-widge
32313230
});
32323231
});
32333232

3234-
describe('getWidgetState', () => {
3235-
test('warns when index has this method', () => {
3236-
warnCache.current = {};
3237-
3238-
const instance = index({ indexName: 'indexName' });
3239-
3240-
expect(() => {
3241-
instance.getWidgetState({});
3242-
}).toWarnDev(
3243-
'[InstantSearch]: The `getWidgetState` method is renamed `getWidgetUiState` and will no longer exist under that name in InstantSearch.js 5.x. Please use `getWidgetUiState` instead.'
3244-
);
3245-
});
3246-
3247-
test('warns when widget has this method', () => {
3248-
warnCache.current = {};
3249-
3250-
const createDeprecatedSearchBox = (args: Partial<Widget> = {}): Widget =>
3251-
createWidget({
3252-
dispose: jest.fn(({ state }) => {
3253-
return state.setQueryParameter('query', undefined);
3254-
}),
3255-
getWidgetState: jest.fn((uiState, { searchParameters }) => {
3256-
if (!searchParameters.query) {
3257-
return uiState;
3258-
}
3259-
3260-
return {
3261-
...uiState,
3262-
query: searchParameters.query,
3263-
};
3264-
}),
3265-
getWidgetSearchParameters: jest.fn(
3266-
(searchParameters, { uiState }) => {
3267-
return searchParameters.setQueryParameter(
3268-
'query',
3269-
uiState.query || ''
3270-
);
3271-
}
3272-
),
3273-
...args,
3274-
});
3275-
3276-
const instance = index({ indexName: 'indexName' });
3277-
const searchClient = createSearchClient();
3278-
const mainHelper = algoliasearchHelper(searchClient, '', {});
3279-
const instantSearchInstance = createInstantSearch({
3280-
mainHelper,
3281-
});
3282-
3283-
instance.addWidgets([createDeprecatedSearchBox()]);
3284-
3285-
expect(() => {
3286-
instance.init(
3287-
createIndexInitOptions({
3288-
instantSearchInstance,
3289-
parent: null,
3290-
})
3291-
);
3292-
}).toWarnDev(
3293-
'[InstantSearch]: The `getWidgetState` method is renamed `getWidgetUiState` and will no longer exist under that name in InstantSearch.js 5.x. Please use `getWidgetUiState` instead.'
3294-
);
3295-
});
3296-
3297-
test('does not warn for index itself', () => {
3298-
warnCache.current = {};
3299-
3300-
const instance = index({ indexName: 'indexName' });
3301-
const searchClient = createSearchClient();
3302-
const mainHelper = algoliasearchHelper(searchClient, '', {});
3303-
const instantSearchInstance = createInstantSearch({
3304-
mainHelper,
3305-
});
3306-
3307-
instance.addWidgets([index({ indexName: 'other' })]);
3308-
3309-
expect(() => {
3310-
instance.init(
3311-
createIndexInitOptions({
3312-
instantSearchInstance,
3313-
parent: null,
3314-
})
3315-
);
3316-
}).not.toWarnDev(
3317-
'[InstantSearch]: The `getWidgetState` method is renamed `getWidgetUiState` and will no longer exist under that name in InstantSearch.js 5.x. Please use `getWidgetUiState` instead.'
3318-
);
3319-
});
3320-
});
3321-
33223233
describe('setIndexUiState', () => {
33233234
it('updates main UI state with an object', () => {
33243235
const instance = index({ indexName: 'indexName' });

packages/instantsearch-core/src/widgets/index-widget.ts

Lines changed: 1 addition & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import algoliasearchHelper from 'algoliasearch-helper';
33
import {
44
addWidgetId,
55
createDocumentationMessageGenerator,
6-
warning,
76
isIndexWidget,
87
createInitArgs,
98
createRenderArgs,
@@ -120,15 +119,11 @@ function getLocalWidgetsUiState(
120119
return uiState;
121120
}
122121

123-
if (!widget.getWidgetUiState && !widget.getWidgetState) {
124-
return uiState;
125-
}
126-
127122
if (widget.getWidgetUiState) {
128123
return widget.getWidgetUiState(uiState, widgetStateOptions);
129124
}
130125

131-
return widget.getWidgetState!(uiState, widgetStateOptions);
126+
return uiState;
132127
}, initialUiState);
133128
}
134129

@@ -685,13 +680,6 @@ export const index = (widgetParams: IndexWidgetParams): IndexWidget => {
685680
});
686681

687682
localWidgets.forEach((widget) => {
688-
warning(
689-
// if it has NO getWidgetState or if it has getWidgetUiState, we don't warn
690-
// aka we warn if there's _only_ getWidgetState
691-
!widget.getWidgetState || Boolean(widget.getWidgetUiState),
692-
'The `getWidgetState` method is renamed `getWidgetUiState` and will no longer exist under that name in InstantSearch.js 5.x. Please use `getWidgetUiState` instead.'
693-
);
694-
695683
if (widget.init) {
696684
widget.init(createInitArgs(instantSearchInstance, this, uiState));
697685
}
@@ -847,15 +835,6 @@ export const index = (widgetParams: IndexWidgetParams): IndexWidget => {
847835
);
848836
},
849837

850-
getWidgetState(uiState: UiState) {
851-
warning(
852-
false,
853-
'The `getWidgetState` method is renamed `getWidgetUiState` and will no longer exist under that name in InstantSearch.js 5.x. Please use `getWidgetUiState` instead.'
854-
);
855-
856-
return this.getWidgetUiState(uiState);
857-
},
858-
859838
getWidgetSearchParameters(searchParameters, { uiState }) {
860839
return getLocalWidgetsSearchParameters(localWidgets, {
861840
uiState,

packages/vue-instantsearch/src/util/__tests__/createServerRootMixin.test.js

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1237,7 +1237,7 @@ See documentation: https://www.algolia.com/doc/api-reference/widgets/instantsear
12371237
expect(renderArgs.createURL()).toBe('#');
12381238
});
12391239

1240-
it('allows for widgets without getWidgetState', () => {
1240+
it('allows for widgets without getWidgetUiState', () => {
12411241
let instantSearchInstance;
12421242
mount({
12431243
mixins: [
@@ -1255,12 +1255,12 @@ See documentation: https://www.algolia.com/doc/api-reference/widgets/instantsear
12551255
const widget = {
12561256
init: jest.fn(),
12571257
render: jest.fn(),
1258-
getWidgetState(uiState) {
1258+
getWidgetUiState(uiState) {
12591259
return uiState;
12601260
},
12611261
};
12621262

1263-
const widgetWithoutGetWidgetState = {
1263+
const widgetWithoutGetWidgetUiState = {
12641264
init: jest.fn(),
12651265
render: jest.fn(),
12661266
};
@@ -1269,7 +1269,10 @@ See documentation: https://www.algolia.com/doc/api-reference/widgets/instantsear
12691269
lol: createSerializedState(),
12701270
});
12711271

1272-
instantSearchInstance.addWidgets([widget, widgetWithoutGetWidgetState]);
1272+
instantSearchInstance.addWidgets([
1273+
widget,
1274+
widgetWithoutGetWidgetUiState,
1275+
]);
12731276

12741277
instantSearchInstance.__forceRender(
12751278
widget,

0 commit comments

Comments
 (0)