nodebb-plugin-ns-awards-next
Version:
System for rewarding forum users. It allows admin to define set of awards that could be granted to users for special accomplishments.
219 lines (196 loc) • 5.66 kB
JavaScript
import * as ActionTypes from './action-types';
import {compareUsers, getItemIndex} from '../util/utils';
export function apiTokens(state, action) {
switch (action.type) {
case ActionTypes.API_TOKENS_DID_UPDATE:
return action.payload;
default:
return state;
}
}
export function awardForGrant(state, action) {
switch (action.type) {
case ActionTypes.AWARD_FOR_GRANT_DID_CHANGE:
return action.payload;
default:
return state;
}
}
export function awards(state, action) {
switch (action.type) {
case ActionTypes.AWARDS_DID_UPDATE:
return action.payload;
default:
return state;
}
}
export function creationActive(state, action) {
switch (action.type) {
case ActionTypes.AWARD_CREATION_STATE_DID_UPDATE:
return action.payload;
case ActionTypes.NEW_AWARD_WILL_RESET:
return false;
default:
return state;
}
}
export function editAwards(state, action) {
let edits, award;
switch (action.type) {
case ActionTypes.AWARD_DID_EDIT:
case ActionTypes.AWARD_EDIT_DID_START:
edits = Object.assign({}, state);
edits[action.payload.aid] = action.payload.award;
return edits;
case ActionTypes.AWARD_EDIT_DID_CANCEL:
edits = Object.assign({}, state);
delete edits[action.payload];
return edits;
case ActionTypes.AWARD_PREVIEW_DID_CHANGE:
edits = Object.assign({}, state);
award = Object.assign({}, edits[action.payload.aid], {preview: action.payload.value});
edits[action.payload.aid] = award;
return edits;
default:
return state;
}
}
export function grantReason(state, action) {
switch (action.type) {
case ActionTypes.GRANT_REASON_DID_CHANGE:
return action.payload;
default:
return state;
}
}
export function grants(state, action) {
switch (action.type) {
case ActionTypes.GRANTS_DID_UPDATE:
return action.payload;
default:
return state;
}
}
export function newAwardName(state, action) {
switch (action.type) {
case ActionTypes.NEW_AWARD_NAME_DID_CHANGE:
return action.payload;
case ActionTypes.NEW_AWARD_WILL_RESET:
return null;
default:
return state;
}
}
export function newAwardDescription(state, action) {
switch (action.type) {
case ActionTypes.NEW_AWARD_DESCRIPTION_DID_CHANGE:
return action.payload;
case ActionTypes.NEW_AWARD_WILL_RESET:
return null;
default:
return state;
}
}
export function newAwardPreview(state, action) {
switch (action.type) {
case ActionTypes.NEW_AWARD_PREVIEW_DID_CHANGE:
return action.payload;
case ActionTypes.NEW_AWARD_WILL_RESET:
return null;
default:
return state;
}
}
export function section(state, action) {
switch (action.type) {
case ActionTypes.SECTION_DID_UPDATE:
return action.payload;
default:
return state;
}
}
export function settings(state, action) {
switch (action.type) {
case ActionTypes.SETTINGS_DID_UPDATE:
return action.payload;
default:
return state;
}
}
export function userHighlight(state, action) {
switch (action.type) {
case ActionTypes.USER_HIGHLIGHT_DID_CHANGE:
return action.payload;
default:
return state;
}
}
export function userInspect(state, action) {
switch (action.type) {
case ActionTypes.USER_FOR_INSPECT_DID_CHANGE:
return action.payload;
default:
return state;
}
}
export function userInspectGrants(state, action) {
switch (action.type) {
case ActionTypes.USER_FOR_INSPECT_GRANTS_DID_CHANGE:
return action.payload;
default:
return state;
}
}
export function username(state, action) {
switch (action.type) {
case ActionTypes.USERNAME_DID_CHANGE:
return action.payload;
default:
return state;
}
}
export function users(state, action) {
switch (action.type) {
case ActionTypes.SEARCH_USERS_DID_CHANGE:
return action.payload;
default:
return state;
}
}
export function userSearchFocus(state, action) {
switch (action.type) {
case ActionTypes.USER_SEARCH_FOCUS_DID_CHANGE:
return action.payload;
default:
return state;
}
}
export function usersForGrant(state, action) {
let users, index;
switch (action.type) {
case ActionTypes.USER_FOR_GRANT_DID_ADD:
users = state.slice();
users.push(action.payload);
return users;
case ActionTypes.USER_FOR_GRANT_DID_REMOVE:
index = getItemIndex(state, action.payload, compareUsers);
if (index !== -1) {
users = state.slice();
users.splice(index, 1);
return users;
}
return state;
case ActionTypes.USERS_FOR_GRANT_WILL_RESET:
return [];
default:
return state;
}
}
export function uploadPath(state, action) {
switch (action.type) {
case ActionTypes.CONFIG_DID_UPDATE:
return action.payload.uploadPath;
default:
return state;
}
}