Skip to content

Commit 4f2b466

Browse files
authored
Merge branch 'master' into fix/disjunctive-prefer-main
2 parents c4e91f9 + 2f1f397 commit 4f2b466

File tree

21 files changed

+200
-231
lines changed

21 files changed

+200
-231
lines changed

bundlesize.config.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,11 @@
1010
},
1111
{
1212
"path": "./packages/instantsearch.js/dist/instantsearch.production.min.js",
13-
"maxSize": "83.50 kB"
13+
"maxSize": "84 kB"
1414
},
1515
{
1616
"path": "./packages/instantsearch.js/dist/instantsearch.development.js",
17-
"maxSize": "181.50 kB"
17+
"maxSize": "182 kB"
1818
},
1919
{
2020
"path": "packages/react-instantsearch-core/dist/umd/ReactInstantSearchCore.min.js",

examples/js/e-commerce-umd/src/widgets/ClearFiltersEmptyResults.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
const { panel, clearRefinements } = window.instantsearch.widgets;
22

33
const clearFilters = panel<typeof clearRefinements>({
4-
hidden(options) {
5-
return options.results.nbHits > 0;
4+
hidden({ results }) {
5+
return Boolean(results && results.nbHits > 0);
66
},
77
})(clearRefinements);
88

examples/js/e-commerce-umd/src/widgets/Pagination.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ const { pagination: paginationWidget, panel } = window.instantsearch.widgets;
22

33
const paginationWithMultiplePages = panel<typeof paginationWidget>({
44
hidden({ results }) {
5-
return results.nbPages <= 1;
5+
return Boolean(results && results.nbPages <= 1);
66
},
77
})(paginationWidget);
88

examples/js/e-commerce/src/widgets/ClearFiltersEmptyResults.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import { panel, clearRefinements } from 'instantsearch.js/es/widgets';
22

33
const clearFilters = panel<typeof clearRefinements>({
4-
hidden(options) {
5-
return options.results.nbHits > 0;
4+
hidden({ results }) {
5+
return Boolean(results && results.nbHits > 0);
66
},
77
})(clearRefinements);
88

examples/js/e-commerce/src/widgets/Pagination.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import {
55

66
const paginationWithMultiplePages = panel<typeof paginationWidget>({
77
hidden({ results }) {
8-
return results.nbPages <= 1;
8+
return Boolean(results && results.nbPages <= 1);
99
},
1010
})(paginationWidget);
1111

packages/instantsearch.js/src/connectors/autocomplete/connectAutocomplete.ts

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -183,21 +183,23 @@ search.addWidgets([
183183
const indices = scopedResults.map((scopedResult) => {
184184
// We need to escape the hits because highlighting
185185
// exposes HTML tags to the end-user.
186-
scopedResult.results.hits = escapeHTML
187-
? escapeHits(scopedResult.results.hits)
188-
: scopedResult.results.hits;
186+
if (scopedResult.results) {
187+
scopedResult.results.hits = escapeHTML
188+
? escapeHits(scopedResult.results.hits)
189+
: scopedResult.results.hits;
190+
}
189191

190192
const sendEvent = createSendEventForHits({
191193
instantSearchInstance,
192-
getIndex: () => scopedResult.results.index,
194+
getIndex: () => scopedResult.results?.index || '',
193195
widgetType: this.$$type,
194196
});
195197

196198
return {
197199
indexId: scopedResult.indexId,
198-
indexName: scopedResult.results.index,
199-
hits: scopedResult.results.hits,
200-
results: scopedResult.results,
200+
indexName: scopedResult.results?.index || '',
201+
hits: scopedResult.results?.hits || [],
202+
results: scopedResult.results || ({} as unknown as SearchResults),
201203
sendEvent,
202204
};
203205
});

packages/instantsearch.js/src/connectors/clear-refinements/connectClearRefinements.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,7 @@ function getAttributesToClear({
233233
includedAttributes: string[];
234234
excludedAttributes: string[];
235235
transformItems: TransformItems<string>;
236-
results: SearchResults | undefined;
236+
results: SearchResults | undefined | null;
237237
}): AttributesToClear {
238238
const includesQuery =
239239
includedAttributes.indexOf('query') !== -1 ||

packages/instantsearch.js/src/connectors/current-refinements/connectCurrentRefinements.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,7 @@ const connectCurrentRefinements: CurrentRefinementsConnector =
232232
if (!results) {
233233
return transformItems(
234234
getRefinementsItems({
235-
results: {},
235+
results: null,
236236
helper,
237237
indexId: helper.state.index,
238238
includedAttributes,
@@ -282,7 +282,7 @@ function getRefinementsItems({
282282
includedAttributes,
283283
excludedAttributes,
284284
}: {
285-
results: SearchResults | Record<string, never>;
285+
results: SearchResults | null;
286286
helper: AlgoliaSearchHelper;
287287
indexId: string;
288288
includedAttributes: CurrentRefinementsConnectorParams['includedAttributes'];

packages/instantsearch.js/src/connectors/infinite-hits/connectInfiniteHits.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ export type InfiniteHitsRenderState<
138138
/**
139139
* The response from the Algolia API.
140140
*/
141-
results?: SearchResults<Hit<THit>>;
141+
results?: SearchResults<Hit<THit>> | null;
142142

143143
/**
144144
* The banner to display above the hits.
@@ -435,7 +435,7 @@ export default (function connectInfiniteHits<
435435
sendEvent,
436436
bindEvent,
437437
banner,
438-
results,
438+
results: results || undefined,
439439
showPrevious,
440440
showMore,
441441
isFirstPage,

packages/instantsearch.js/src/lib/insights/__tests__/insights-client-test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ const connectHits =
1212
$$type: 'ais.hits',
1313
init() {},
1414
render({ results, instantSearchInstance }) {
15-
const hits = results.hits;
15+
const hits = results?.hits;
1616
renderFn({ hits, results, instantSearchInstance, widgetParams }, false);
1717
},
1818
dispose() {

packages/instantsearch.js/src/lib/utils/getRefinements.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,10 +106,11 @@ function getRefinement(
106106
}
107107

108108
export function getRefinements(
109-
results: SearchResults | Record<string, never>,
109+
_results: SearchResults | Record<string, never> | null,
110110
state: SearchParameters,
111111
includesQuery: boolean = false
112112
): Refinement[] {
113+
const results = _results || {};
113114
const refinements: Refinement[] = [];
114115
const {
115116
facetsRefinements = {},

packages/instantsearch.js/src/lib/utils/render-args.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ export function createRenderArgs(
2929
parent: IndexWidget,
3030
widget: IndexWidget | Widget
3131
) {
32-
const results = parent.getResultsForWidget(widget)!;
32+
const results = parent.getResultsForWidget(widget);
3333
const helper = parent.getHelper()!;
3434

3535
return {

packages/instantsearch.js/src/middlewares/__tests__/createInsightsMiddleware.ts

Lines changed: 29 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -927,7 +927,7 @@ describe('insights', () => {
927927

928928
describe('authenticatedUserToken', () => {
929929
describe('before `init`', () => {
930-
it('uses the `authenticatedUserToken` as the `userToken` when defined', () => {
930+
it('does not use `authenticatedUserToken` as the `userToken` when defined', () => {
931931
const { insightsClient, instantSearchInstance, getUserToken } =
932932
createTestEnvironment();
933933

@@ -937,10 +937,10 @@ describe('insights', () => {
937937
createInsightsMiddleware({ insightsClient })
938938
);
939939

940-
expect(getUserToken()).toEqual('abc');
940+
expect(getUserToken()).toEqual(expect.stringMatching(/^anonymous-/));
941941
});
942942

943-
it('uses the `authenticatedUserToken` as the `userToken` when both are defined', () => {
943+
it('does not use `authenticatedUserToken` as the `userToken` when both are defined', () => {
944944
const { insightsClient, instantSearchInstance, getUserToken } =
945945
createTestEnvironment();
946946

@@ -951,60 +951,60 @@ describe('insights', () => {
951951
createInsightsMiddleware({ insightsClient })
952952
);
953953

954-
expect(getUserToken()).toEqual('def');
954+
expect(getUserToken()).toEqual('abc');
955955
});
956956

957-
it('reverts to the `userToken` when unsetting the `authenticatedUserToken`', () => {
957+
it('does not use `authenticatedUserToken` when a `userToken` is set after', () => {
958958
const { insightsClient, instantSearchInstance, getUserToken } =
959959
createTestEnvironment();
960960

961-
insightsClient('setUserToken', 'abc');
962961
insightsClient('setAuthenticatedUserToken', 'def');
963-
insightsClient('setAuthenticatedUserToken', undefined);
964962

965963
instantSearchInstance.use(
966964
createInsightsMiddleware({ insightsClient })
967965
);
968966

967+
insightsClient('setUserToken', 'abc');
968+
969969
expect(getUserToken()).toEqual('abc');
970970
});
971+
});
971972

972-
it('uses the `authenticatedUserToken` when a `userToken` is set after', () => {
973+
describe('from `init` props', () => {
974+
it('does not use `authenticatedUserToken` as the `userToken` when defined', () => {
973975
const { insightsClient, instantSearchInstance, getUserToken } =
974976
createTestEnvironment();
975977

976-
insightsClient('setAuthenticatedUserToken', 'def');
977-
978978
instantSearchInstance.use(
979-
createInsightsMiddleware({ insightsClient })
979+
createInsightsMiddleware({
980+
insightsClient,
981+
insightsInitParams: { authenticatedUserToken: 'abc' },
982+
})
980983
);
981984

982-
insightsClient('setUserToken', 'abc');
983-
984-
expect(getUserToken()).toEqual('def');
985+
expect(getUserToken()).toEqual(expect.stringMatching(/^anonymous-/));
985986
});
986987

987-
it('resets the token to the `userToken` when `authenticatedUserToken` is set as undefined', () => {
988+
it('does not use `authenticatedUserToken` as the `userToken` when both are defined', () => {
988989
const { insightsClient, instantSearchInstance, getUserToken } =
989990
createTestEnvironment();
990991

991-
insightsClient('setUserToken', 'abc');
992-
insightsClient('setAuthenticatedUserToken', 'def');
993-
994992
instantSearchInstance.use(
995-
createInsightsMiddleware({ insightsClient })
993+
createInsightsMiddleware({
994+
insightsClient,
995+
insightsInitParams: {
996+
authenticatedUserToken: 'abc',
997+
userToken: 'def',
998+
},
999+
})
9961000
);
9971001

9981002
expect(getUserToken()).toEqual('def');
999-
1000-
insightsClient('setAuthenticatedUserToken', undefined);
1001-
1002-
expect(getUserToken()).toEqual('abc');
10031003
});
10041004
});
10051005

10061006
describe('after `init`', () => {
1007-
it('uses the `authenticatedUserToken` as the `userToken` when defined', async () => {
1007+
it('does not use `authenticatedUserToken` as the `userToken` when defined', async () => {
10081008
const { insightsClient, instantSearchInstance, getUserToken } =
10091009
createTestEnvironment();
10101010
instantSearchInstance.use(
@@ -1015,25 +1015,10 @@ describe('insights', () => {
10151015

10161016
await wait(0);
10171017

1018-
expect(getUserToken()).toEqual('abc');
1019-
});
1020-
1021-
it('uses the `authenticatedUserToken` as the `userToken` when both are defined', async () => {
1022-
const { insightsClient, instantSearchInstance, getUserToken } =
1023-
createTestEnvironment();
1024-
instantSearchInstance.use(
1025-
createInsightsMiddleware({ insightsClient })
1026-
);
1027-
1028-
insightsClient('setUserToken', 'abc');
1029-
insightsClient('setAuthenticatedUserToken', 'def');
1030-
1031-
await wait(0);
1032-
1033-
expect(getUserToken()).toEqual('def');
1018+
expect(getUserToken()).toEqual(expect.stringMatching(/^anonymous-/));
10341019
});
10351020

1036-
it('reverts to the `userToken` when unsetting the `authenticatedUserToken`', async () => {
1021+
it('does not use `authenticatedUserToken` as the `userToken` when both are defined', async () => {
10371022
const { insightsClient, instantSearchInstance, getUserToken } =
10381023
createTestEnvironment();
10391024
instantSearchInstance.use(
@@ -1042,7 +1027,6 @@ describe('insights', () => {
10421027

10431028
insightsClient('setUserToken', 'abc');
10441029
insightsClient('setAuthenticatedUserToken', 'def');
1045-
insightsClient('setAuthenticatedUserToken', undefined);
10461030

10471031
await wait(0);
10481032

@@ -1051,7 +1035,7 @@ describe('insights', () => {
10511035
});
10521036

10531037
describe('from queue', () => {
1054-
it('uses the `authenticatedUserToken` as the `userToken` when defined', () => {
1038+
it('does not use `authenticatedUserToken` as the `userToken` when defined', () => {
10551039
const {
10561040
insightsClient,
10571041
libraryLoadedAndProcessQueue,
@@ -1069,10 +1053,10 @@ describe('insights', () => {
10691053
);
10701054
libraryLoadedAndProcessQueue();
10711055

1072-
expect(getUserToken()).toEqual('abc');
1056+
expect(getUserToken()).toEqual(expect.stringMatching(/^anonymous-/));
10731057
});
10741058

1075-
it('uses the `authenticatedUserToken` as the `userToken` when both are defined', () => {
1059+
it('does not use `authenticatedUserToken` as the `userToken` when both are defined', () => {
10761060
const {
10771061
insightsClient,
10781062
libraryLoadedAndProcessQueue,
@@ -1091,28 +1075,6 @@ describe('insights', () => {
10911075
);
10921076
libraryLoadedAndProcessQueue();
10931077

1094-
expect(getUserToken()).toEqual('def');
1095-
});
1096-
1097-
it('reverts to the `userToken` when unsetting the `authenticatedUserToken`', () => {
1098-
const {
1099-
insightsClient,
1100-
libraryLoadedAndProcessQueue,
1101-
instantSearchInstance,
1102-
getUserToken,
1103-
} = createUmdTestEnvironment();
1104-
1105-
insightsClient('setUserToken', 'abc');
1106-
insightsClient('setAuthenticatedUserToken', 'def');
1107-
insightsClient('setAuthenticatedUserToken', undefined);
1108-
1109-
instantSearchInstance.use(
1110-
createInsightsMiddleware({
1111-
insightsClient,
1112-
})
1113-
);
1114-
libraryLoadedAndProcessQueue();
1115-
11161078
expect(getUserToken()).toEqual('abc');
11171079
});
11181080
});

0 commit comments

Comments
 (0)