51 lines
1.1 KiB
JavaScript
51 lines
1.1 KiB
JavaScript
import {
|
|
updateUserPoints,
|
|
updateCompletedChallenges
|
|
} from './types';
|
|
|
|
const initialState = {
|
|
superBlock: {},
|
|
block: {},
|
|
challenge: {},
|
|
user: {}
|
|
};
|
|
|
|
export default function entities(state = initialState, action) {
|
|
const { type, payload: { username, points } = {} } = action;
|
|
if (type === updateCompletedChallenges) {
|
|
const username = action.payload;
|
|
const completedChallengeMap = state.user[username].challengeMap || {};
|
|
return {
|
|
...state,
|
|
challenge: Object.keys(state.challenge)
|
|
.reduce((map, key) => {
|
|
const challenge = state.challenge[key];
|
|
map[key] = {
|
|
...challenge,
|
|
isCompleted: !!completedChallengeMap[challenge.id]
|
|
};
|
|
return map;
|
|
}, {})
|
|
};
|
|
}
|
|
if (type === updateUserPoints) {
|
|
return {
|
|
...state,
|
|
user: {
|
|
...state.user,
|
|
[username]: {
|
|
...state.user[username],
|
|
points
|
|
}
|
|
}
|
|
};
|
|
}
|
|
if (action.meta && action.meta.entities) {
|
|
return {
|
|
...state,
|
|
...action.meta.entities
|
|
};
|
|
}
|
|
return state;
|
|
}
|