username-history.js 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. import moment from "moment"
  2. import { UPDATE_AVATAR, UPDATE_USERNAME } from "misago/reducers/users"
  3. import concatUnique from "misago/utils/concat-unique"
  4. export const ADD_NAME_CHANGE = "ADD_NAME_CHANGE"
  5. export const APPEND_HISTORY = "APPEND_HISTORY"
  6. export const HYDRATE_HISTORY = "HYDRATE_HISTORY"
  7. export function addNameChange(change, user, changedBy) {
  8. return {
  9. type: ADD_NAME_CHANGE,
  10. change,
  11. user,
  12. changedBy
  13. }
  14. }
  15. export function append(items) {
  16. return {
  17. type: APPEND_HISTORY,
  18. items: items
  19. }
  20. }
  21. export function hydrate(items) {
  22. return {
  23. type: HYDRATE_HISTORY,
  24. items: items
  25. }
  26. }
  27. export function hydrateNamechange(namechange) {
  28. return Object.assign({}, namechange, {
  29. changed_on: moment(namechange.changed_on)
  30. })
  31. }
  32. export default function username(state = [], action = null) {
  33. switch (action.type) {
  34. case ADD_NAME_CHANGE:
  35. let newState = state.slice()
  36. newState.unshift({
  37. id: Math.floor(Date.now() / 1000), // just small hax for getting id
  38. changed_by: action.changedBy,
  39. changed_by_username: action.changedBy.username,
  40. changed_on: moment(),
  41. new_username: action.change.username,
  42. old_username: action.user.username
  43. })
  44. return newState
  45. case APPEND_HISTORY:
  46. return concatUnique(state, action.items.map(hydrateNamechange))
  47. case HYDRATE_HISTORY:
  48. return action.items.map(hydrateNamechange)
  49. case UPDATE_AVATAR:
  50. return state.map(function(item) {
  51. item = Object.assign({}, item)
  52. if (item.changed_by && item.changed_by.id === action.userId) {
  53. item.changed_by = Object.assign({}, item.changed_by, {
  54. avatars: action.avatars
  55. })
  56. }
  57. return item
  58. })
  59. case UPDATE_USERNAME:
  60. return state.map(function(item) {
  61. item = Object.assign({}, item)
  62. if (item.changed_by && item.changed_by.id === action.userId) {
  63. item.changed_by = Object.assign({}, item.changed_by, {
  64. username: action.username,
  65. slug: action.slug
  66. })
  67. }
  68. return Object.assign({}, item)
  69. })
  70. default:
  71. return state
  72. }
  73. }