The code powering m.abunchtell.com https://m.abunchtell.com
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

86 lines
2.1 KiB

  1. import {
  2. REBLOG_SUCCESS,
  3. UNREBLOG_SUCCESS,
  4. FAVOURITE_SUCCESS,
  5. UNFAVOURITE_SUCCESS
  6. } from '../actions/interactions';
  7. import {
  8. STATUS_FETCH_SUCCESS,
  9. CONTEXT_FETCH_SUCCESS
  10. } from '../actions/statuses';
  11. import {
  12. TIMELINE_REFRESH_SUCCESS,
  13. TIMELINE_UPDATE,
  14. TIMELINE_DELETE,
  15. TIMELINE_EXPAND_SUCCESS
  16. } from '../actions/timelines';
  17. import {
  18. ACCOUNT_TIMELINE_FETCH_SUCCESS,
  19. ACCOUNT_TIMELINE_EXPAND_SUCCESS
  20. } from '../actions/accounts';
  21. import {
  22. NOTIFICATIONS_UPDATE,
  23. NOTIFICATIONS_REFRESH_SUCCESS,
  24. NOTIFICATIONS_EXPAND_SUCCESS
  25. } from '../actions/notifications';
  26. import Immutable from 'immutable';
  27. const normalizeStatus = (state, status) => {
  28. if (!status) {
  29. return state;
  30. }
  31. status.account = status.account.id;
  32. if (status.reblog && status.reblog.id) {
  33. state = normalizeStatus(state, status.reblog);
  34. status.reblog = status.reblog.id;
  35. }
  36. return state.set(status.id, Immutable.fromJS(status));
  37. };
  38. const normalizeStatuses = (state, statuses) => {
  39. statuses.forEach(status => {
  40. state = normalizeStatus(state, status);
  41. });
  42. return state;
  43. };
  44. const deleteStatus = (state, id, references) => {
  45. references.forEach(ref => {
  46. state = deleteStatus(state, ref[0], []);
  47. });
  48. return state.delete(id);
  49. };
  50. const initialState = Immutable.Map();
  51. export default function statuses(state = initialState, action) {
  52. switch(action.type) {
  53. case TIMELINE_UPDATE:
  54. case STATUS_FETCH_SUCCESS:
  55. case NOTIFICATIONS_UPDATE:
  56. return normalizeStatus(state, action.status);
  57. case REBLOG_SUCCESS:
  58. case UNREBLOG_SUCCESS:
  59. case FAVOURITE_SUCCESS:
  60. case UNFAVOURITE_SUCCESS:
  61. return normalizeStatus(state, action.response);
  62. case TIMELINE_REFRESH_SUCCESS:
  63. case TIMELINE_EXPAND_SUCCESS:
  64. case ACCOUNT_TIMELINE_FETCH_SUCCESS:
  65. case ACCOUNT_TIMELINE_EXPAND_SUCCESS:
  66. case CONTEXT_FETCH_SUCCESS:
  67. case NOTIFICATIONS_REFRESH_SUCCESS:
  68. case NOTIFICATIONS_EXPAND_SUCCESS:
  69. return normalizeStatuses(state, action.statuses);
  70. case TIMELINE_DELETE:
  71. return deleteStatus(state, action.id, action.references);
  72. default:
  73. return state;
  74. }
  75. };