Skip to content

Instantly share code, notes, and snippets.

@gscoppino
Created November 1, 2016 19:58
Show Gist options
  • Save gscoppino/f4b4ae89d151ef85197dc2db0546d9a2 to your computer and use it in GitHub Desktop.
Save gscoppino/f4b4ae89d151ef85197dc2db0546d9a2 to your computer and use it in GitHub Desktop.
$ngRedux with Immutable slices
import angular from 'angular';
import ngRedux from 'ng-redux';
import thunk from 'redux-thunk';
import createLogger from 'redux-logger';
import RootReducer from './reducers/reducers';
function immutable(mutable) {    return JSON.parse(JSON.stringify(mutable));}
StoreConfig.$inject = ['$ngReduxProvider', 'rootReducerProvider'];
function StoreConfig($ngReduxProvider, rootReducerProvider) {    let rootReducer = rootReducerProvider.createReducer();    let middlewares = [        thunk,        createLogger({ level: 'info', collapsed: true })    ];    $ngReduxProvider.createStoreWith(rootReducer, middlewares);}
$ngReduxDecorator.$inject = ['$delegate'];
function $ngReduxDecorator($delegate) {    const getState = $delegate.getState;    $delegate.getState = function (stateFn) {        return immutable(stateFn(getState.apply($delegate)));    };    return $delegate;}
export { immutable, StoreConfig, $ngReduxDecorator };
/** * @namespace app/store * @desc Configures the frontend singleton store with its * reducers and middlewares. */
export default angular.module('app.store', [ngRedux, RootReducer])   
.config(StoreConfig)   
.decorator('$ngRedux', $ngReduxDecorator)   
.name;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment