diff --git a/package.json b/package.json index 058f9ec..de27cf1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ng-redux", - "version": "0.3.1", + "version": "1.0.0-rc", "description": "Redux bindings for Angular.js", "main": "./lib/index.js", "scripts": { @@ -25,9 +25,10 @@ "webpack": "^1.10.5" }, "peerDependencies": { - "redux": "^1.0.0 || 1.0.0-alpha || 1.0.0-rc" + "redux": "^1.0.0" }, "dependencies": { - "invariant": "^2.1.0" + "invariant": "^2.1.0", + "redux": "^1.0.1" } } diff --git a/src/components/connector.js b/src/components/connector.js index b5ec352..311003b 100644 --- a/src/components/connector.js +++ b/src/components/connector.js @@ -12,7 +12,7 @@ export default function Connector(store) { invariant( isFunction(callback), 'The callback parameter passed to connect must be a Function. Instead received %s.', - typeof selector + typeof callback ); //Initial update diff --git a/src/components/ngRedux.js b/src/components/ngRedux.js index 99d0045..382d1ba 100644 --- a/src/components/ngRedux.js +++ b/src/components/ngRedux.js @@ -1,10 +1,41 @@ import Connector from './connector'; +import invariant from 'invariant'; +import isFunction from '../utils/isFunction'; +import {createStore, applyMiddleware} from 'redux'; export default function ngReduxProvider() { - let reduxStore = undefined; - this.setReduxStore = store => reduxStore = store; + let _reducer = undefined; + let _middlewares = []; + let _storeEnhancer = undefined; - this.$get = () => { - return Connector(reduxStore); + this.createStoreWith = (reducer, middlewares, storeEnhancer) => { + invariant( + isFunction(reducer), + 'The reducer parameter passed to createStoreWith must be a Function. Instead received %s.', + typeof reducer + ); + + invariant( + !storeEnhancer || isFunction(storeEnhancer), + 'The storeEnhancer parameter passed to createStoreWith must be a Function. Instead received %s.', + typeof storeEnhancer + ); + + _reducer = reducer; + _storeEnhancer = storeEnhancer || createStore; + _middlewares = middlewares; + }; + + this.$get = ($injector) => { + let resolvedMiddleware = []; + for(let middleware of _middlewares) { + if(typeof middleware === 'string') { + resolvedMiddleware.push($injector.get(middleware)); + } else { + resolvedMiddleware.push(middleware); + } + } + + return Connector(applyMiddleware(...resolvedMiddleware)(_storeEnhancer)(_reducer)); } }