Skip to content

Commit f742083

Browse files
authoredMay 3, 2021
refactor(ts): migrate connectors to new Widget type (#4735)
* refactor(ts): migrate connectors to new Widget type * refactor(ts): undo wrong change * update * update tests
1 parent 4e98614 commit f742083

40 files changed

+694
-247
lines changed
 

‎src/connectors/answers/connectAnswers.ts

+11-2
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import {
1414
Hit,
1515
FindAnswersOptions,
1616
FindAnswersResponse,
17+
WidgetRenderState,
1718
} from '../../types';
1819

1920
type IndexWithAnswers = {
@@ -31,7 +32,7 @@ const withUsage = createDocumentationMessageGenerator({
3132
connector: true,
3233
});
3334

34-
export type AnswersRendererOptions = {
35+
export type AnswersRenderState = {
3536
/**
3637
* The matched hits from Algolia API.
3738
*/
@@ -89,8 +90,16 @@ export type AnswersConnectorParams = {
8990
extraParameters?: FindAnswersOptions;
9091
};
9192

93+
export type AnswersWidgetDescription = {
94+
$$type: 'ais.answers';
95+
renderState: AnswersRenderState;
96+
indexRenderState: {
97+
answers: WidgetRenderState<AnswersRenderState, AnswersConnectorParams>;
98+
};
99+
};
100+
92101
export type AnswersConnector = Connector<
93-
AnswersRendererOptions,
102+
AnswersWidgetDescription,
94103
AnswersConnectorParams
95104
>;
96105

‎src/connectors/autocomplete/__tests__/connectAutocomplete-test.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,14 @@ import {
1010
import { createSearchClient } from '../../../../test/mock/createSearchClient';
1111
import { createSingleSearchResponse } from '../../../../test/mock/createAPIResponse';
1212
import connectAutocomplete, {
13-
AutocompleteRendererOptions,
13+
AutocompleteRenderState,
1414
} from '../connectAutocomplete';
1515
import { TAG_PLACEHOLDER } from '../../../lib/utils';
1616
import { SearchClient } from '../../../types';
1717

1818
describe('connectAutocomplete', () => {
1919
const getInitializedWidget = (config = {}) => {
20-
const renderFn = jest.fn<any, [AutocompleteRendererOptions, boolean]>();
20+
const renderFn = jest.fn<any, [AutocompleteRenderState, boolean]>();
2121
const makeWidget = connectAutocomplete(renderFn);
2222
const widget = makeWidget({
2323
...config,

‎src/connectors/autocomplete/connectAutocomplete.ts

+15-3
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import {
99
noop,
1010
warning,
1111
} from '../../lib/utils';
12-
import { Hits, Connector } from '../../types';
12+
import { Hits, Connector, WidgetRenderState } from '../../types';
1313

1414
const withUsage = createDocumentationMessageGenerator({
1515
name: 'autocomplete',
@@ -25,7 +25,7 @@ export type AutocompleteConnectorParams = {
2525
escapeHTML?: boolean;
2626
};
2727

28-
export type AutocompleteRendererOptions = {
28+
export type AutocompleteRenderState = {
2929
/**
3030
* The current value of the query.
3131
*/
@@ -62,8 +62,20 @@ export type AutocompleteRendererOptions = {
6262
refine: (query: string) => void;
6363
};
6464

65+
export type AutocompleteWidgetDescription = {
66+
$$type: 'ais.autocomplete';
67+
renderState: AutocompleteRenderState;
68+
indexRenderState: {
69+
autocomplete: WidgetRenderState<
70+
AutocompleteRenderState,
71+
AutocompleteConnectorParams
72+
>;
73+
};
74+
indexUiState: { query: string };
75+
};
76+
6577
export type AutocompleteConnector = Connector<
66-
AutocompleteRendererOptions,
78+
AutocompleteWidgetDescription,
6779
AutocompleteConnectorParams
6880
>;
6981

‎src/connectors/breadcrumb/connectBreadcrumb.ts

+23-5
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,12 @@ import {
66
noop,
77
} from '../../lib/utils';
88
import { SearchParameters, SearchResults } from 'algoliasearch-helper';
9-
import { Connector, TransformItems, CreateURL } from '../../types';
9+
import {
10+
Connector,
11+
TransformItems,
12+
CreateURL,
13+
WidgetRenderState,
14+
} from '../../types';
1015

1116
const withUsage = createDocumentationMessageGenerator({
1217
name: 'breadcrumb',
@@ -49,7 +54,7 @@ export type BreadcrumbConnectorParams = {
4954
separator?: string;
5055
};
5156

52-
export type BreadcrumbRendererOptions = {
57+
export type BreadcrumbRenderState = {
5358
/**
5459
* Creates the URL for a single item name in the list.
5560
*/
@@ -71,8 +76,21 @@ export type BreadcrumbRendererOptions = {
7176
canRefine: boolean;
7277
};
7378

79+
export type BreadcrumbWidgetDescription = {
80+
$$type: 'ais.breadcrumb';
81+
renderState: BreadcrumbRenderState;
82+
indexRenderState: {
83+
breadcrumb: {
84+
[rootAttribute: string]: WidgetRenderState<
85+
BreadcrumbRenderState,
86+
BreadcrumbConnectorParams
87+
>;
88+
};
89+
};
90+
};
91+
7492
export type BreadcrumbConnector = Connector<
75-
BreadcrumbRendererOptions,
93+
BreadcrumbWidgetDescription,
7694
BreadcrumbConnectorParams
7795
>;
7896

@@ -83,8 +101,8 @@ const connectBreadcrumb: BreadcrumbConnector = function connectBreadcrumb(
83101
checkRendering(renderFn, withUsage());
84102

85103
type ConnectorState = {
86-
refine?: BreadcrumbRendererOptions['refine'];
87-
createURL?: BreadcrumbRendererOptions['createURL'];
104+
refine?: BreadcrumbRenderState['refine'];
105+
createURL?: BreadcrumbRenderState['createURL'];
88106
};
89107

90108
const connectorState: ConnectorState = {};

‎src/connectors/clear-refinements/connectClearRefinements.ts

+19-3
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,12 @@ import {
88
uniq,
99
mergeSearchParameters,
1010
} from '../../lib/utils';
11-
import { TransformItems, CreateURL, Connector } from '../../types';
11+
import {
12+
TransformItems,
13+
CreateURL,
14+
Connector,
15+
WidgetRenderState,
16+
} from '../../types';
1217

1318
const withUsage = createDocumentationMessageGenerator({
1419
name: 'clear-refinements',
@@ -32,7 +37,7 @@ export type ClearRefinementsConnectorParams = {
3237
transformItems?: TransformItems<string>;
3338
};
3439

35-
export type ClearRefinementsRendererOptions = {
40+
export type ClearRefinementsRenderState = {
3641
/**
3742
* Triggers the clear of all the currently refined values.
3843
*/
@@ -55,8 +60,19 @@ export type ClearRefinementsRendererOptions = {
5560
createURL: CreateURL<void>;
5661
};
5762

63+
export type ClearRefinementsWidgetDescription = {
64+
$$type: 'ais.clearRefinements';
65+
renderState: ClearRefinementsRenderState;
66+
indexRenderState: {
67+
clearRefinements: WidgetRenderState<
68+
ClearRefinementsRenderState,
69+
ClearRefinementsConnectorParams
70+
>;
71+
};
72+
};
73+
5874
export type ClearRefinementsConnector = Connector<
59-
ClearRefinementsRendererOptions,
75+
ClearRefinementsWidgetDescription,
6076
ClearRefinementsConnectorParams
6177
>;
6278

‎src/connectors/configure-related-items/connectConfigureRelatedItems.ts

+6-2
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import {
1010
getPropertyByPath,
1111
} from '../../lib/utils';
1212
import connectConfigure, {
13-
ConfigureRendererOptions,
13+
ConfigureWidgetDescription,
1414
} from '../configure/connectConfigure';
1515

1616
export type MatchingPatterns = {
@@ -57,8 +57,12 @@ function createOptionalFilter({
5757
return `${attributeName}:${attributeValue}<score=${attributeScore || 1}>`;
5858
}
5959

60+
export type ConfigureRelatedItemsWidgetDescription = {
61+
$$type: 'ais.configureRelatedItems';
62+
} & Omit<ConfigureWidgetDescription, '$$type'>;
63+
6064
export type ConfigureRelatedItemsConnector = Connector<
61-
ConfigureRendererOptions,
65+
ConfigureRelatedItemsWidgetDescription,
6266
ConfigureRelatedItemsConnectorParams
6367
>;
6468

‎src/connectors/configure/connectConfigure.ts

+17-3
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import algoliasearchHelper, {
33
PlainSearchParameters,
44
AlgoliaSearchHelper,
55
} from 'algoliasearch-helper';
6-
import { Connector } from '../../types';
6+
import { Connector, WidgetRenderState } from '../../types';
77
import {
88
createDocumentationMessageGenerator,
99
isPlainObject,
@@ -24,7 +24,7 @@ export type ConfigureConnectorParams = {
2424
searchParameters: PlainSearchParameters;
2525
};
2626

27-
export type ConfigureRendererOptions = {
27+
export type ConfigureRenderState = {
2828
/**
2929
* Refine the given search parameters.
3030
*/
@@ -54,8 +54,22 @@ function getInitialSearchParameters(
5454
);
5555
}
5656

57+
export type ConfigureWidgetDescription = {
58+
$$type: 'ais.configure';
59+
renderState: ConfigureRenderState;
60+
indexRenderState: {
61+
configure: WidgetRenderState<
62+
ConfigureRenderState,
63+
ConfigureConnectorParams
64+
>;
65+
};
66+
indexUiState: {
67+
configure: PlainSearchParameters;
68+
};
69+
};
70+
5771
export type ConfigureConnector = Connector<
58-
ConfigureRendererOptions,
72+
ConfigureWidgetDescription,
5973
ConfigureConnectorParams
6074
>;
6175

‎src/connectors/current-refinements/connectCurrentRefinements.ts

+19-3
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,12 @@ import {
1515
FacetRefinement,
1616
NumericRefinement,
1717
} from '../../lib/utils/getRefinements';
18-
import { Connector, TransformItems, CreateURL } from '../../types';
18+
import {
19+
Connector,
20+
TransformItems,
21+
CreateURL,
22+
WidgetRenderState,
23+
} from '../../types';
1924

2025
export type CurrentRefinementsConnectorParamsRefinement = {
2126
/**
@@ -106,7 +111,7 @@ export type CurrentRefinementsConnectorParams = {
106111
transformItems?: TransformItems<CurrentRefinementsConnectorParamsItem>;
107112
};
108113

109-
export type CurrentRefinementsRendererOptions = {
114+
export type CurrentRefinementsRenderState = {
110115
/**
111116
* All the currently refined items, grouped by attribute.
112117
*/
@@ -133,8 +138,19 @@ const withUsage = createDocumentationMessageGenerator({
133138
connector: true,
134139
});
135140

141+
export type CurrentRefinementsWidgetDescription = {
142+
$$type: 'ais.currentRefinements';
143+
renderState: CurrentRefinementsRenderState;
144+
indexRenderState: {
145+
currentRefinements: WidgetRenderState<
146+
CurrentRefinementsRenderState,
147+
CurrentRefinementsConnectorParams
148+
>;
149+
};
150+
};
151+
136152
export type CurrentRefinementsConnector = Connector<
137-
CurrentRefinementsRendererOptions,
153+
CurrentRefinementsWidgetDescription,
138154
CurrentRefinementsConnectorParams
139155
>;
140156

‎src/connectors/geo-search/types.ts

+61
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
import { SendEventForHits } from '../../lib/utils';
2+
import {
3+
Connector,
4+
GeoLoc,
5+
Hit,
6+
TransformItems,
7+
WidgetRenderState,
8+
} from '../../types';
9+
10+
export type GeoHit = Hit & Required<Pick<Hit, '_geoLoc'>>;
11+
12+
type Bounds = {
13+
northEast: GeoLoc;
14+
southWest: GeoLoc;
15+
};
16+
17+
export type GeoSearchRenderState = {
18+
currentRefinement?: Bounds;
19+
position?: GeoLoc;
20+
items: GeoHit[];
21+
refine(bounds: Bounds): void;
22+
clearMapRefinement(): void;
23+
hasMapMoveSinceLastRefine(): boolean;
24+
isRefineOnMapMove(): boolean;
25+
isRefinedWithMap(): boolean;
26+
setMapMoveSinceLastRefine(): void;
27+
toggleRefineOnMapMove(): void;
28+
sendEvent: SendEventForHits;
29+
};
30+
31+
export type GeoSearchConnectorParams = {
32+
enableRefineOnMapMove: boolean;
33+
transformItems: TransformItems<GeoHit>;
34+
};
35+
36+
export type GeoSearchWidgetDescription = {
37+
$$type: 'ais.geoSearch';
38+
renderState: GeoSearchRenderState;
39+
indexRenderState: {
40+
geoSearch: WidgetRenderState<
41+
GeoSearchRenderState,
42+
GeoSearchConnectorParams
43+
>;
44+
};
45+
indexUiState: {
46+
geoSearch: {
47+
/**
48+
* The rectangular area in geo coordinates.
49+
* The rectangle is defined by two diagonally opposite points, hence by 4 floats separated by commas.
50+
*
51+
* @example '47.3165,4.9665,47.3424,5.0201'
52+
*/
53+
boundingBox: string;
54+
};
55+
};
56+
};
57+
58+
export type GeoSearchConnector = Connector<
59+
GeoSearchWidgetDescription,
60+
GeoSearchConnectorParams
61+
>;

0 commit comments

Comments
 (0)
Please sign in to comment.