Skip to content
This repository was archived by the owner on Dec 16, 2022. It is now read-only.

Commit b22a9e6

Browse files
authored
feat(react instantsearch widget): add connector and widget metadata (#570)
1 parent c40fa22 commit b22a9e6

File tree

6 files changed

+64
-19
lines changed

6 files changed

+64
-19
lines changed

e2e/__snapshots__/templates.test.js.snap

Lines changed: 34 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7032,8 +7032,8 @@ yarn add @algolia/react-instantsearch-widget-date-picker
70327032
### Usage
70337033
70347034
\`\`\`jsx
7035-
import instantsearch from 'instantsearch.js';
70367035
import algoliasearch from 'algoliasearch/lite';
7036+
import { InstantSearch } from 'react-instantsearch-dom';
70377037
import { DatePicker } from '@algolia/react-instantsearch-widget-date-picker';
70387038
70397039
const searchClient = algoliasearch('appId', 'apiKey');
@@ -7260,16 +7260,19 @@ export const DatePickerComponent = ({}: Props) => {
72607260
`;
72617261
72627262
exports[`Templates React InstantSearch widget File content: src/lib/connector.ts 1`] = `
7263-
"import { createConnector } from 'react-instantsearch-dom';
7263+
"import type { Connector } from '../types/connector';
7264+
7265+
import { createConnector } from 'react-instantsearch-dom';
72647266
72657267
export type ProvidedProps = {
72667268
// TODO: fill props that are returned by \`getProvidedProps\`
7267-
};
7269+
}
72687270
7269-
export const connectDatePicker = createConnector({
7271+
export const connectDatePicker: Connector<ProvidedProps> = createConnector<ProvidedProps>({
72707272
displayName: 'DatePicker',
7273+
$$type: 'algolia.date-picker',
72717274
7272-
getProvidedProps(props, searchState, searchResults): ProvidedProps {
7275+
getProvidedProps(props, searchState, searchResults) {
72737276
return {
72747277
// TODO: return a props for the component
72757278
};
@@ -7281,7 +7284,7 @@ export const connectDatePicker = createConnector({
72817284
};
72827285
},
72837286
7284-
cleanUp(props, searchState, context) {
7287+
cleanUp(props, searchState) {
72857288
return {
72867289
// TODO: return a searchState where this widget is removed from the widget tree
72877290
};
@@ -7298,17 +7301,37 @@ exports[`Templates React InstantSearch widget File content: src/lib/widget.tsx 1
72987301
"import { DatePickerComponent } from './component';
72997302
import { connectDatePicker } from './connector';
73007303
7301-
import type { ElementType } from 'react';
7302-
73037304
type WidgetParams = {
73047305
/**
73057306
* Placeholder text for input element.
73067307
*/
73077308
placeholder?: string;
73087309
};
73097310
7310-
export const DatePicker: ElementType<WidgetParams> =
7311-
connectDatePicker(DatePickerComponent);"
7311+
export const DatePicker: React.ElementType<WidgetParams> = connectDatePicker(
7312+
DatePickerComponent,
7313+
{ $$widgetType: 'algolia.date-picker' }
7314+
);"
7315+
`;
7316+
7317+
exports[`Templates React InstantSearch widget File content: src/types/connector.ts 1`] = `
7318+
"import type {
7319+
ConnectedComponentClass,
7320+
ConnectorProvided,
7321+
} from 'react-instantsearch-core';
7322+
7323+
type AdditionalWidgetProperties = {
7324+
$$widgetType?: string;
7325+
};
7326+
7327+
export type Connector<TProvided = {}, TExposed = {}> = ((
7328+
stateless: React.FunctionComponent<ConnectorProvided<TProvided>>,
7329+
additionalWidgetProperties: AdditionalWidgetProperties
7330+
) => React.ComponentClass<TExposed>) &
7331+
(<TProps extends Partial<ConnectorProvided<TProvided>>>(
7332+
Composed: React.ComponentType<TProps>,
7333+
additionalWidgetProperties: AdditionalWidgetProperties
7334+
) => ConnectedComponentClass<TProps, ConnectorProvided<TProvided>, TExposed>);"
73127335
`;
73137336
73147337
exports[`Templates React InstantSearch widget File content: tsconfig.declaration.json 1`] = `
@@ -7402,6 +7425,7 @@ Array [
74027425
"src/lib/component.tsx",
74037426
"src/lib/connector.ts",
74047427
"src/lib/widget.tsx",
7428+
"src/types/connector.ts",
74057429
"tsconfig.declaration.json",
74067430
"tsconfig.json",
74077431
"vite.config.ts",

src/templates/React InstantSearch widget/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ yarn add {{ packageName }}
1919
### Usage
2020

2121
```jsx
22-
import instantsearch from 'instantsearch.js';
2322
import algoliasearch from 'algoliasearch/lite';
23+
import { InstantSearch } from 'react-instantsearch-dom';
2424
import { {{ pascalCaseName }} } from '{{ packageName }}';
2525

2626
const searchClient = algoliasearch('appId', 'apiKey');

src/templates/React InstantSearch widget/package.json.hbs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242
"algoliasearch": "4",
4343
"react": "^16.8.0",
4444
"react-dom": "^16.8.0",
45-
"react-instantsearch-dom": "^6.11.0"
45+
"react-instantsearch-dom": "^6.26.0"
4646
},
4747
"devDependencies": {
4848
"@babel/core": "7.14.3",
@@ -54,6 +54,7 @@
5454
"@types/node": "15.3.0",
5555
"@types/react": "17.0.0",
5656
"@types/react-dom": "17.0.0",
57+
"@types/react-instantsearch-core": "6.26.0",
5758
"@types/react-instantsearch-dom": "6.10.0",
5859
"@typescript-eslint/eslint-plugin": "4.24.0",
5960
"@typescript-eslint/parser": "4.24.0",

src/templates/React InstantSearch widget/src/lib/connector.ts.hbs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
1+
import type { Connector } from '../types/connector';
2+
13
import { createConnector } from 'react-instantsearch-dom';
24

35
export type ProvidedProps = {
46
// TODO: fill props that are returned by `getProvidedProps`
57
}
68

7-
export const connect{{ pascalCaseName }} = createConnector({
9+
export const connect{{ pascalCaseName }}: Connector<ProvidedProps> = createConnector<ProvidedProps>({
810
displayName: '{{ pascalCaseName }}',
11+
$$type: '{{ widgetType }}',
912

10-
getProvidedProps(props, searchState, searchResults): ProvidedProps {
13+
getProvidedProps(props, searchState, searchResults) {
1114
return {
1215
// TODO: return a props for the component
1316
};
@@ -19,7 +22,7 @@ export const connect{{ pascalCaseName }} = createConnector({
1922
};
2023
},
2124

22-
cleanUp(props, searchState, context) {
25+
cleanUp(props, searchState) {
2326
return {
2427
// TODO: return a searchState where this widget is removed from the widget tree
2528
};
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
import { {{ pascalCaseName }}Component } from './component';
22
import { connect{{ pascalCaseName }} } from './connector';
33

4-
import type { ElementType } from 'react';
5-
64
type WidgetParams = {
75
/**
86
* Placeholder text for input element.
97
*/
108
placeholder?: string;
119
};
1210

13-
export const {{ pascalCaseName }}: ElementType<WidgetParams> =
14-
connect{{ pascalCaseName }}({{ pascalCaseName }}Component);
11+
export const {{ pascalCaseName }}: React.ElementType<WidgetParams> = connect{{ pascalCaseName }}(
12+
{{ pascalCaseName }}Component,
13+
{ $$widgetType: '{{ widgetType }}' }
14+
);
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import type {
2+
ConnectedComponentClass,
3+
ConnectorProvided,
4+
} from 'react-instantsearch-core';
5+
6+
type AdditionalWidgetProperties = {
7+
$$widgetType?: string;
8+
};
9+
10+
export type Connector<TProvided = {}, TExposed = {}> = ((
11+
stateless: React.FunctionComponent<ConnectorProvided<TProvided>>,
12+
additionalWidgetProperties: AdditionalWidgetProperties
13+
) => React.ComponentClass<TExposed>) &
14+
(<TProps extends Partial<ConnectorProvided<TProvided>>>(
15+
Composed: React.ComponentType<TProps>,
16+
additionalWidgetProperties: AdditionalWidgetProperties
17+
) => ConnectedComponentClass<TProps, ConnectorProvided<TProvided>, TExposed>);

0 commit comments

Comments
 (0)