import * as Constants from '../../constants'; import {createReducer} from 'redux-starter-kit'; import { DISPLAY_CONFIGURATION, RESET_MOUNTS_STATE, SET_ALLOW_MOUNT, setAutoMountProcessed, setBusy, SET_MOUNT_STATE, SET_MOUNTED, SET_PROVIDER_STATE } from '../actions/mount_actions'; export const createMountReducer = state => { let providerList = [ ...Constants.PROVIDER_LIST, ...(state.RemoteMounts||['Remotelocalhost:20000']), ]; const providerState = providerList.map(provider=> { return { [provider]: { AutoMount: false, AutoRestart: false, MountLocation: '', } } }).reduce((map, obj) => { return { ...map, ...obj } }); const mountState = providerList.map(provider => { return { [provider]: { AllowMount: false, DriveLetters: [], Mounted: false, } } }).reduce((map, obj) => { return { ...map, ...obj } }); return createReducer({ AutoMountProcessed: false, DisplayConfiguration: null, DisplayRemoteConfiguration: false, MountsBusy: false, MountState: mountState, ProviderState: providerState, RemoteMounts: state.RemoteMounts ? state.RemoteMounts : ['Remotelocalhost:20000'], }, { [DISPLAY_CONFIGURATION]: (state, action) => { return { ...state, DisplayConfiguration: action.payload.provider, DisplayRemoteConfiguration: action.payload.remote, }; }, [RESET_MOUNTS_STATE]: (state, action) => { return { ...state, MountsBusy: false, MountState: mountState, } }, [setAutoMountProcessed]: (state, action) => { return { ...state, AutoMountProcessed: action.payload }; }, [SET_ALLOW_MOUNT]: (state, action) => { return { ...state, MountState: { ...state.MountState, [action.payload.provider]: { ...state.MountState[action.payload.provider], AllowMount: action.payload.allow, } } }; }, [setBusy]: (state, action) => { return { ...state, MountsBusy: action.payload }; }, [SET_MOUNT_STATE]: (state, action) => { return { ...state, MountState: { ...state.MountState, [action.payload.provider]: { ...state.MountState[action.payload.provider], ...action.payload.state }, } }; }, [SET_MOUNTED]: (state, action) => { return { ...state, MountState: { ...state.MountState, [action.payload.provider]: { ...state.MountState[action.payload.provider], Mounted: action.payload.mounted, } } }; }, [SET_PROVIDER_STATE]: (state, action) => { return { ...state, ProviderState: { ...state.ProviderState, [action.payload.provider]: { ...state.ProviderState[action.payload.provider], ...action.payload.state }, } }; } }); };