push_notifications.js 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import { STORE_HYDRATE } from '../actions/store';
  2. import { SET_BROWSER_SUPPORT, SET_SUBSCRIPTION, CLEAR_SUBSCRIPTION, SET_ALERTS } from '../actions/push_notifications';
  3. import Immutable from 'immutable';
  4. const initialState = Immutable.Map({
  5. subscription: null,
  6. alerts: new Immutable.Map({
  7. follow: false,
  8. favourite: false,
  9. reblog: false,
  10. mention: false,
  11. poll: false,
  12. }),
  13. isSubscribed: false,
  14. browserSupport: false,
  15. });
  16. export default function push_subscriptions(state = initialState, action) {
  17. switch(action.type) {
  18. case STORE_HYDRATE: {
  19. const push_subscription = action.state.get('push_subscription');
  20. if (push_subscription) {
  21. return state
  22. .set('subscription', new Immutable.Map({
  23. id: push_subscription.get('id'),
  24. endpoint: push_subscription.get('endpoint'),
  25. }))
  26. .set('alerts', push_subscription.get('alerts') || initialState.get('alerts'))
  27. .set('isSubscribed', true);
  28. }
  29. return state;
  30. }
  31. case SET_SUBSCRIPTION:
  32. return state
  33. .set('subscription', new Immutable.Map({
  34. id: action.subscription.id,
  35. endpoint: action.subscription.endpoint,
  36. }))
  37. .set('alerts', new Immutable.Map(action.subscription.alerts))
  38. .set('isSubscribed', true);
  39. case SET_BROWSER_SUPPORT:
  40. return state.set('browserSupport', action.value);
  41. case CLEAR_SUBSCRIPTION:
  42. return initialState;
  43. case SET_ALERTS:
  44. return state.setIn(action.path, action.value);
  45. default:
  46. return state;
  47. }
  48. };