text: /* ------------------------------------------------------------------------- *
   * Copyright 2002-2021, OpenNebula Project, OpenNebula Systems               *
   *                                                                           *
   * Licensed under the Apache License, Version 2.0 (the "License"); you may   *
   * not use this file except in compliance with the License. You may obtain   *
   * a copy of the License at                                                  *
   *                                                                           *
   * http://www.apache.org/licenses/LICENSE-2.0                                *
   *                                                                           *
   * Unless required by applicable law or agreed to in writing, software       *
   * distributed under the License is distributed on an "AS IS" BASIS,         *
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  *
   * See the License for the specific language governing permissions and       *
   * limitations under the License.                                            *
   * ------------------------------------------------------------------------- */
  import { configureStore, getDefaultMiddleware, EnhancedStore } from '@reduxjs/toolkit'
  import thunkMiddleware from 'redux-thunk'
  
  import rootReducer from 'client/store/reducers'
  import { isDevelopment } from 'client/utils'
  
  /**
   * @param {object} props - Props
   * @param {object} props.initState - Initial state
   * @param {*} props.services - Services
   * @returns {{ store: EnhancedStore }} Configured Redux Store
   */
  export const createStore = ({ initState = {}, services }) => {
    const middleware = getDefaultMiddleware({
      immutableCheck: true,
      serializableCheck: false,
      thunk: false
    })
  
    middleware.push(thunkMiddleware.withExtraArgument({ services }))
  
    const store = configureStore({
      reducer: rootReducer,
      devTools: isDevelopment(),
      middleware,
      preloadedState: initState
    })
  
    return { store }
  }
  