react-photo-layout-editor
Version:
Photo layout editor for react
84 lines (71 loc) • 1.55 kB
JavaScript
import * as types from '../actions/types';
import * as defaults from './defaults';
let nextFileId = 0;
/**
* Reducers
*/
// base
export default function base(state=defaults.side, action)
{
let newState = Object.assign({}, state);
let files = {};
switch (action.type) {
case types.INIT_PLE:
try {
action.preference.side.files.forEach(o => {
files[nextFileId++] = { image: o, active: false }
});
return {
...state,
...action.preference.side,
files: {
...state.files,
...files,
},
};
} catch(e) {
return state;
}
case types.SIDE_VISIBLE:
return {
...state,
visible: action.value,
};
case types.SIDE_TOGGLE:
return {
...state,
visible: !state.visible,
};
case types.SIDE_ADD_FILES:
action.files.forEach((o) => {
files[nextFileId++] = { image: o, active: false }
});
return {
...newState,
files: {
...newState.files,
...files,
}
};
case types.SIDE_REMOVE_FILES:
if (!action.keys.length) return state;
action.keys.forEach(o => {
delete newState.files[o];
});
return newState;
case types.SIDE_UPDATE_SELECTED:
if (!(action.value && Object.keys(action.value).length)) return state;
Object.keys(action.value).forEach(k => {
if (!newState.files[k]) return;
newState.files[k].active = action.value[k].active;
});
return newState;
case types.SIDE_UPDATE_PROGRESS:
return {
...state,
progressPercent: action.value
};
default:
return state;
}
}