Home Reference Source Repository

src/appComponent/controlSection/threeDimensionControllers/dimensionsController/dimensionsReducer.js

/**
 * reducer changes store by action
 */
export default (dimensionState = {x:[], y:[], z:[]}, action) => {
	switch (action.type) {
		case 'ADD_DIMENSION':return addDimension(dimensionState,action);
		case 'REMOVE_DIMENSION':return removeDimension(dimensionState,action);
		case 'EDIT_DIMENSION':return editDimension(dimensionState,action);
		case 'FETCH_DIMENSIONS':return fetchDimension(dimensionState,action);
		default: return dimensionState;
	}
}


/**
 * @param {object} dimensionState current state
 * @param {object} action contain type and data
 * @return {object} new state for dimension
 */
function fetchDimension(dimensionState, action){
	return {...action.dimensions};
}


/**
 * @param {object} dimensionState current state
 * @param {object} action contain type and data
 * @return {object} new state for dimension
 */
function addDimension(dimensionState, action){
	const newdimensionState = {...dimensionState};
	newdimensionState[action.data.dimension].push({
		width: 1,
		step: 1,
		start: 90,
		isPLaying: false,
	});

	return newdimensionState;
}


/**
 * @param {object} dimensionState current state
 * @param {object} action contain type and data
 * @return {object} new state for dimension
 */
function editDimension(dimensionState, action){
	const newdimensionState={...dimensionState};//clone dimension
	newdimensionState[action.data.dimension][action.data.index][action.data.name]=action.data.value;
	return newdimensionState;
}


/**
 * @param {object} dimensionState current state
 * @param {object} action contain type and data
 * @return {object} new state for dimension
 */
function removeDimension(dimensionState, action){
	const newdimensionState={...dimensionState};//clone dimension
	newdimensionState[action.data.dimension].splice(action.data.index, 1);//remove matched product

	return newdimensionState;
}