@woocommerce/data
Version:
WooCommerce Admin data store and utilities
143 lines (142 loc) • 4.25 kB
JavaScript
/**
* Internal dependencies
*/
import TYPES from './action-types';
const reducer = (state = {
error: null,
menuItems: [],
favorites: [],
requesting: {},
persistedQuery: {},
}, action) => {
switch (action.type) {
case TYPES.SET_MENU_ITEMS:
state = {
...state,
menuItems: action.menuItems,
};
break;
case TYPES.ADD_MENU_ITEMS:
state = {
...state,
menuItems: [...state.menuItems, ...action.menuItems],
};
break;
case TYPES.ON_HISTORY_CHANGE:
state = {
...state,
persistedQuery: action.persistedQuery,
};
break;
case TYPES.GET_FAVORITES_FAILURE:
state = {
...state,
requesting: {
...state.requesting,
getFavorites: false,
},
};
break;
case TYPES.GET_FAVORITES_REQUEST:
state = {
...state,
requesting: {
...state.requesting,
getFavorites: true,
},
};
break;
case TYPES.GET_FAVORITES_SUCCESS:
state = {
...state,
favorites: action.favorites,
requesting: {
...state.requesting,
getFavorites: false,
},
};
break;
case TYPES.ADD_FAVORITE_FAILURE:
state = {
...state,
error: action.error,
requesting: {
...state.requesting,
addFavorite: false,
},
};
break;
case TYPES.ADD_FAVORITE_REQUEST:
state = {
...state,
requesting: {
...state.requesting,
addFavorite: true,
},
};
break;
case TYPES.ADD_FAVORITE_SUCCESS:
const newFavorites = !state.favorites.includes(action.favorite)
? [...state.favorites, action.favorite]
: state.favorites;
state = {
...state,
favorites: newFavorites,
menuItems: state.menuItems.map((item) => {
if (item.id === action.favorite) {
return {
...item,
menuId: 'favorites',
};
}
return item;
}),
requesting: {
...state.requesting,
addFavorite: false,
},
};
break;
case TYPES.REMOVE_FAVORITE_FAILURE:
state = {
...state,
requesting: {
...state.requesting,
error: action.error,
removeFavorite: false,
},
};
break;
case TYPES.REMOVE_FAVORITE_REQUEST:
state = {
...state,
requesting: {
...state.requesting,
removeFavorite: true,
},
};
break;
case TYPES.REMOVE_FAVORITE_SUCCESS:
const filteredFavorites = state.favorites.filter((f) => f !== action.favorite);
state = {
...state,
favorites: filteredFavorites,
menuItems: state.menuItems.map((item) => {
if (item.id === action.favorite) {
return {
...item,
menuId: 'plugins',
};
}
return item;
}),
requesting: {
...state.requesting,
removeFavorite: false,
},
};
break;
}
return state;
};
export default reducer;