username-history.js 2.2 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. }