Skip to content

Commit

Permalink
Fixes compatibility with react-redux provider
Browse files Browse the repository at this point in the history
  • Loading branch information
ctrlplusb committed Oct 28, 2019
1 parent 0935a91 commit e199314
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 18 deletions.
42 changes: 25 additions & 17 deletions index.d.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
/// <reference types="symbol-observable" />

/* eslint-disable */

import { Component } from 'react';
Expand All @@ -10,6 +12,7 @@ import {
Store as ReduxStore,
StoreEnhancer,
Middleware,
Observable,
} from 'redux';
import { O } from 'ts-toolbelt';

Expand Down Expand Up @@ -297,25 +300,30 @@ export interface MockedAction {
*
* type EnhancedReduxStore = Store<StoreModel>;
*/
export type Store<
export interface Store<
StoreModel extends object = {},
StoreConfig extends EasyPeasyConfig<any, any> = any
> = O.Merge<
O.Omit<ReduxStore<State<StoreModel>>, 'dispatch'>,
{
addModel: <ModelSlice extends object>(
key: string,
modelSlice: ModelSlice,
) => void;
clearMockedActions: () => void;
dispatch: Dispatch<StoreModel>;
getActions: () => Actions<StoreModel>;
getListeners: () => Listeners<StoreModel>;
getMockedActions: () => MockedAction[];
reconfigure: <NewStoreModel extends object>(model: NewStoreModel) => void;
removeModel: (key: string) => void;
}
>;
> extends ReduxStore<State<StoreModel>> {
addModel: <ModelSlice extends object>(
key: string,
modelSlice: ModelSlice,
) => void;
clearMockedActions: () => void;
dispatch: Dispatch<StoreModel>;
getActions: () => Actions<StoreModel>;
getListeners: () => Listeners<StoreModel>;
getMockedActions: () => MockedAction[];
reconfigure: <NewStoreModel extends object>(model: NewStoreModel) => void;
removeModel: (key: string) => void;

/**
* Interoperability point for observable/reactive libraries.
* @returns {observable} A minimal observable of state changes.
* For more information, see the observable proposal:
* https://github.com/tc39/proposal-observable
*/
[Symbol.observable](): Observable<State<StoreModel>>;
}

// #endregion

Expand Down
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "easy-peasy",
"version": "3.1.0",
"version": "3.1.1",
"description": "Vegetarian friendly state for React",
"license": "MIT",
"main": "dist/easy-peasy.cjs.js",
Expand Down Expand Up @@ -51,6 +51,7 @@
"redux": "^4.0.4",
"redux-thunk": "^2.3.0",
"shallowequal": "^1.1.0",
"symbol-observable": "^1.2.0",
"ts-toolbelt": "^4.9.9"
},
"devDependencies": {
Expand Down
18 changes: 18 additions & 0 deletions src/__tests__/typescript/react-redux-compat.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import { Provider } from 'react-redux';
import { createStore, StoreProvider } from 'easy-peasy';

interface StoreModel {
foo: string;
}

const store = createStore<StoreModel>({
foo: 'bar',
});

const app = (
<StoreProvider store={store}>
<Provider store={store}>
<div />
</Provider>
</StoreProvider>
);

0 comments on commit e199314

Please sign in to comment.