import moment from "moment" import { UPDATE_AVATAR, UPDATE_USERNAME } from "misago/reducers/users" import concatUnique from "misago/utils/concat-unique" export const ADD_NAME_CHANGE = "ADD_NAME_CHANGE" export const APPEND_HISTORY = "APPEND_HISTORY" export const HYDRATE_HISTORY = "HYDRATE_HISTORY" export function addNameChange(change, user, changedBy) { return { type: ADD_NAME_CHANGE, change, user, changedBy } } export function append(items) { return { type: APPEND_HISTORY, items: items } } export function hydrate(items) { return { type: HYDRATE_HISTORY, items: items } } export function hydrateNamechange(namechange) { return Object.assign({}, namechange, { changed_on: moment(namechange.changed_on) }) } export default function username(state = [], action = null) { switch (action.type) { case ADD_NAME_CHANGE: let newState = state.slice() newState.unshift({ id: Math.floor(Date.now() / 1000), // just small hax for getting id changed_by: action.changedBy, changed_by_username: action.changedBy.username, changed_on: moment(), new_username: action.change.username, old_username: action.user.username }) return newState case APPEND_HISTORY: return concatUnique(state, action.items.map(hydrateNamechange)) case HYDRATE_HISTORY: return action.items.map(hydrateNamechange) case UPDATE_AVATAR: return state.map(function(item) { item = Object.assign({}, item) if (item.changed_by && item.changed_by.id === action.userId) { item.changed_by = Object.assign({}, item.changed_by, { avatars: action.avatars }) } return item }) case UPDATE_USERNAME: return state.map(function(item) { item = Object.assign({}, item) if (item.changed_by && item.changed_by.id === action.userId) { item.changed_by = Object.assign({}, item.changed_by, { username: action.username, slug: action.slug }) } return Object.assign({}, item) }) default: return state } }