@bigfishtv/cockpit
Version:
68 lines (59 loc) • 1.76 kB
JavaScript
/**
* @module Reducers/fileTypes
*/
import {
FILE_EXTENSIONS_INITED,
FILE_EXTENSION_ADDED,
FILE_EXTENSIONS_ADDED,
FILE_EXTENSION_REMOVED,
FILE_EXTENSIONS_REMOVED,
FILE_CATEGORY_EMPTIED,
} from '../constants/ActionTypes'
const initialState = {}
/**
* Reducer for managing file type extensions
* @param {Object} state
* @param {Object} action
* @param {String} action.type - const action type from constants/ActionTypes
* @return {Object} returns state
*/
export default function(state = initialState, action) {
switch (action.type) {
case FILE_EXTENSIONS_INITED:
return { ...action.state } || state
case FILE_EXTENSION_ADDED:
if (!state[action.category]) {
state[action.category] = [action.extension]
} else if (state[action.category].indexOf(action.extension) < 0) {
state[action.category].push(action.extension)
}
return state
case FILE_EXTENSIONS_ADDED:
if (!state[action.category]) {
state[action.category] = action.extensions
} else {
action.extensions.map(extension => {
if (state[action.category].indexOf(extension) < 0) state[action.category].push(extension)
})
}
return state
case FILE_EXTENSION_REMOVED:
if (state[action.category]) {
const index = state[action.category].indexOf(action.extension)
if (index >= 0) state[action.category].splice(index, 1)
}
return state
case FILE_EXTENSIONS_REMOVED:
if (state[action.category]) {
action.extensions.map(extension => {
const index = state[action.category].indexOf(extension)
if (index >= 0) state[action.category].splice(index, 1)
})
}
return state
case FILE_CATEGORY_EMPTIED:
if (state[action.category]) state[action.category] = []
return state
}
return state
}