Files
masto-fe-archos/app/javascript/mastodon/reducers/push_notifications.js
2025-10-12 13:42:02 +02:00

55 lines
1.6 KiB
JavaScript

import Immutable from "immutable";
import { SET_BROWSER_SUPPORT, SET_SUBSCRIPTION, CLEAR_SUBSCRIPTION, SET_ALERTS } from "../actions/push_notifications";
import { STORE_HYDRATE } from "../actions/store";
const initialState = Immutable.Map({
subscription: null,
alerts: new Immutable.Map({
follow: false,
follow_request: false,
favourite: false,
reblog: false,
mention: false,
poll: false,
}),
isSubscribed: false,
browserSupport: false,
});
export default function push_subscriptions(state = initialState, action) {
switch(action.type) {
case STORE_HYDRATE: {
const push_subscription = action.state.get("push_subscription");
if (push_subscription) {
return state
.set("subscription", new Immutable.Map({
id: push_subscription.get("id"),
endpoint: push_subscription.get("endpoint"),
}))
.set("alerts", push_subscription.get("alerts") || initialState.get("alerts"))
.set("isSubscribed", true);
}
return state;
}
case SET_SUBSCRIPTION:
return state
.set("subscription", new Immutable.Map({
id: action.subscription.id,
endpoint: action.subscription.endpoint,
}))
.set("alerts", new Immutable.Map(action.subscription.alerts))
.set("isSubscribed", true);
case SET_BROWSER_SUPPORT:
return state.set("browserSupport", action.value);
case CLEAR_SUBSCRIPTION:
return initialState;
case SET_ALERTS:
return state.setIn(action.path, action.value);
default:
return state;
}
}