This repository has been archived on 2025-09-03. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
resolver/app/reducers/circleReducer.jsx
2017-07-06 11:20:18 +04:30

167 lines
3.9 KiB
JavaScript

// - Import react components
var uuid = require('uuid');
import moment from 'moment'
import _ from 'lodash'
// - Import action types
import * as types from 'actionTypes'
/* ---------------- */
/**
* Default State
*/
var defaultState = {
userCircles: {},
loaded: false
}
/**
* Circle reducer
* @param {object} state
* @param {object} action
*/
export var circleReducer = (state = defaultState, action) => {
const { payload } = action
switch (action.type) {
case types.CLEAR_ALL_CIRCLES:
return defaultState
case types.ADD_CIRCLE:
return {
...state,
userCircles: {
...state.userCircles,
[payload.uid]: {
...state.userCircles[payload.uid],
[payload.circle.id]: { ...payload.circle }
}
}
}
case types.UPDATE_CIRCLE:
return {
...state,
userCircles: {
...state.userCircles,
[payload.uid]: {
...state.userCircles[payload.uid],
[payload.circle.id]: {
...state.userCircles[payload.uid][payload.circle.id],
...payload.circle,
openCircleSettings:false }
}
}
}
case types.DELETE_CIRCLE:
let filteredCircles = {}
Object.keys(state.userCircles[payload.uid]).map((key) => {
if (key !== payload.id) {
return _.merge(filteredCircles, { [key]: { ...state.userCircles[payload.uid][key] } })
}
})
return {
...state,
userCircles: {
...state.userCircles,
[payload.uid]: {
...filteredCircles
}
}
}
case types.ADD_LIST_CIRCLE:
return {
...state,
userCircles: {
...state.userCircles,
[payload.uid]: {
...state.userCircles[payload.uid],
...payload.circles
}
},
loaded:true
}
case types.ADD_FOLLOWING_USER:
return {
...state,
userCircles: {
...state.userCircles,
[payload.uid]: {
...state.userCircles[payload.uid],
[payload.cid]: {
...state.userCircles[payload.uid][payload.cid],
users:{
...state.userCircles[payload.uid][payload.cid].users,
[payload.followingId]: {
...payload.userCircle
}
}
}
}
}
}
case types.DELETE_FOLLOWING_USER:
let filteredUserCircle = {}
Object.keys(state.userCircles[payload.uid][payload.cid].users).map((key) => {
if (key !== payload.followingId) {
return _.merge(filteredUserCircle, { [key]: { ...state.userCircles[payload.uid][payload.cid].users[key] } })
}
})
return {
...state,
userCircles: {
...state.userCircles,
[payload.uid]: {
...state.userCircles[payload.uid],
[payload.cid]: {
...state.userCircles[payload.uid][payload.cid],
users:{
...filteredUserCircle
}
}
}
}
}
case types.CLOSE_CIRCLE_SETTINGS:
return {
...state,
userCircles: {
...state.userCircles,
[payload.uid]: {
...state.userCircles[payload.uid],
[payload.id]: {
...state.userCircles[payload.uid][payload.id],
openCircleSettings: false
}
}
}
}
case types.OPEN_CIRCLE_SETTINGS:
return {
...state,
userCircles: {
...state.userCircles,
[payload.uid]: {
...state.userCircles[payload.uid],
[payload.id]: {
...state.userCircles[payload.uid][payload.id],
openCircleSettings: true
}
}
}
}
default:
return state;
}
}