import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { Provider } from 'react-redux';
import * as Redux from 'redux';
import thunk from 'redux-thunk';
import { IProviderExtraArguments } from 'common/models/IProviderExtraArguments';
import { IPokemonSelectListExtraArguments } from 'app/PokemonSelectList/types';
import { PokemonService } from 'api/PokemonService';
import { PokemonSelectListReducers } from './PokemonSelectList/reducers';
import { ConnectedPokemonApp } from './PokemonApp';
import 'styles/index.scss';
export const appReducers = Redux.combineReducers({
pokemonSelectListState : PokemonSelectListReducers
});
const extraArguments : IPokemonSelectListExtraArguments = {
services: {
pokemonService: new PokemonService()
}
};
const store = Redux.createStore(
appReducers,
// enableBatching(appReducers),
Redux.applyMiddleware(
thunk.withExtraArgument(extraArguments)
)
);
ReactDOM.render(
,
document.getElementById('pokemon-mount')
);
// const BATCH_ACTION_TYPE = '_BATCHING_REDUCER_BATCH_ACTION_';
// // TODO Allow this to also take ThunkAction
// export function batchActions(actions : Array) : Redux.Action {
// return action(BATCH_ACTION_TYPE, actions);
// }
// // This is called in the Provider on all Reducers
// export function enableBatching(reducer : Redux.Reducer) {
// return function batchingReducer(state : any, action : Redux.Action) {
// if (action && (action.type === BATCH_ACTION_TYPE)) {
// const payload = (action as Redux.Action).payload;
// return payload.reduce(batchingReducer, state);
// }
// return reducer(state, action);
// };
// }