Add react-instantsearch-native

This commit is contained in:
Gordon 2018-10-24 17:05:22 -05:00
parent 62b44e8bab
commit 05f369091b
No known key found for this signature in database
GPG Key ID: D6396E7DEADE3F44
7 changed files with 166 additions and 2 deletions

View File

@ -0,0 +1,68 @@
// Type definitions for react-instantsearch-native 5.3
// Project: https://community.algolia.com/react-instantsearch
// Definitions by: Gordon Burgett <https://github.com/gburgett>
// Justin Powell <https://github.com/jpowell>
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
// TypeScript Version: 2.9
import * as React from 'react';
// Core
export { createConnector } from 'react-instantsearch-core';
export { HIGHLIGHT_TAGS } from 'react-instantsearch-core';
export { translatable } from 'react-instantsearch-core';
// Widget
export { Configure } from 'react-instantsearch-core';
// Connectors
export { connectAutoComplete } from 'react-instantsearch-core';
export { connectBreadcrumb } from 'react-instantsearch-core';
export { connectConfigure } from 'react-instantsearch-core';
export { connectCurrentRefinements } from 'react-instantsearch-core';
export { connectGeoSearch } from 'react-instantsearch-core';
export { connectHierarchicalMenu } from 'react-instantsearch-core';
export { connectHighlight } from 'react-instantsearch-core';
export { connectHits } from 'react-instantsearch-core';
export { connectHitsPerPage } from 'react-instantsearch-core';
export { connectInfiniteHits } from 'react-instantsearch-core';
export { connectMenu } from 'react-instantsearch-core';
export { connectNumericMenu } from 'react-instantsearch-core';
export { connectPagination } from 'react-instantsearch-core';
export { connectPoweredBy } from 'react-instantsearch-core';
export { connectRange } from 'react-instantsearch-core';
export { connectRefinementList } from 'react-instantsearch-core';
export { connectScrollTo } from 'react-instantsearch-core';
export { connectSearchBox } from 'react-instantsearch-core';
export { connectSortBy } from 'react-instantsearch-core';
export { connectStateResults } from 'react-instantsearch-core';
export { connectStats } from 'react-instantsearch-core';
export { connectToggleRefinement } from 'react-instantsearch-core';
// Native
export interface InstantSearchProps {
apiKey: string;
appId: string;
indexName: string;
algoliaClient?: any;
searchClient?: any;
createURL?: (...args: any[]) => any;
searchState?: any;
refresh?: boolean;
onSearchStateChange?: (...args: any[]) => any;
onSearchParameters?: (...args: any[]) => any;
resultsState?: any;
root?: {
Root: string | ((...args: any[]) => any);
props: any;
};
}
/**
* <InstantSearch> is the root component of all React InstantSearch implementations. It provides all the connected components (aka widgets) a means to interact with the searchState.
*
* https://community.algolia.com/react-instantsearch/widgets/%3CInstantSearch%3E.html
*/
export class InstantSearch extends React.Component<InstantSearchProps> {}
export class Index extends React.Component<any> {}

View File

@ -0,0 +1,69 @@
import * as React from "react";
import { SearchBox, Hits, Highlight, Menu } from "react-instantsearch-dom";
import { InstantSearch, Index, connectStateResults } from 'react-instantsearch-native';
import { values } from 'lodash';
// https://community.algolia.com/react-instantsearch/guide/Conditional_display.html
const App = () => (
<InstantSearch appId="" apiKey="" indexName="first">
<SearchBox />
<AllResults>
<div>
<Index indexName="first">
<IndexResults>
<div>
<div>first: </div>
<Hits />
</div>
</IndexResults>
</Index>
<Index indexName="second">
<IndexResults>
<div>
<div>second: </div>
<Hits />
</div>
</IndexResults>
</Index>
<Index indexName="third">
<IndexResults>
<div>
<div>third: </div>
<Hits />
</div>
</IndexResults>
</Index>
</div>
</AllResults>
</InstantSearch>
);
const IndexResults = connectStateResults(
({ searchState, searchResults, children }) =>
searchResults && searchResults.nbHits !== 0 ? (
children as React.ReactElement<any>
) : (
<div>
No results has been found for {searchState.query} and index{' '}
{searchResults ? searchResults.index : ''}
</div>
)
);
const AllResults = connectStateResults(({ allSearchResults, children }) => {
const hasResults =
allSearchResults &&
values(allSearchResults).some(results => results.nbHits > 0);
return !hasResults ? (
<div>
<div>No results in category, products or brand</div>
<Index indexName="first" />
<Index indexName="second" />
<Index indexName="third" />
</div>
) : (
children as React.ReactElement<any>
);
});

View File

@ -0,0 +1,24 @@
{
"compilerOptions": {
"module": "commonjs",
"lib": [
"es6"
],
"jsx": "react",
"noImplicitAny": true,
"noImplicitThis": true,
"strictNullChecks": true,
"strictFunctionTypes": true,
"baseUrl": "../",
"typeRoots": [
"../"
],
"types": [],
"noEmit": true,
"forceConsistentCasingInFileNames": true
},
"files": [
"index.d.ts",
"react-instantsearch-native-tests.tsx"
]
}

View File

@ -0,0 +1 @@
{ "extends": "dtslint/dt.json" }

View File

@ -1,5 +1,3 @@
import * as React from 'react';
export { InstantSearch, InstantSearchProps } from 'react-instantsearch-dom';
export { Index } from 'react-instantsearch-dom';
export { Breadcrumb } from 'react-instantsearch-dom';

3
types/react-instantsearch/native.d.ts vendored Normal file
View File

@ -0,0 +1,3 @@
export { InstantSearch } from 'react-instantsearch-native';
export { Index } from 'react-instantsearch-native';
export { Configure } from 'react-instantsearch-native';

View File

@ -20,6 +20,7 @@
"index.d.ts",
"connectors.d.ts",
"dom.d.ts",
"native.d.ts",
"react-instantsearch-tests.tsx"
]
}