@magicbell/react-headless
Version:
Hooks to build a notification inbox
45 lines • 2.16 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = WebPushNotificationsSubscriber;
const tslib_1 = require("tslib");
const ramda_1 = require("ramda");
const react_1 = require("react");
const push_js_1 = require("../../lib/push.js");
const index_js_1 = tslib_1.__importDefault(require("../../stores/config/index.js"));
/**
* Headless component to create subscriptions to web push notifications.
*
* @example
* <WebPushNotificationsSubscriber>
* {({ createSubscription }) =>
* <button onClick={createSubscription}>Subscribe</button>}
* <WebPushNotificationsSubscriber>
*/
function WebPushNotificationsSubscriber({ children, serviceWorkerPath = '/service-worker.js', skipServiceWorkerRegistration = false, }) {
const config = (0, index_js_1.default)();
const isSafari = 'safari' in window;
const isPushAPISupported = 'PushManager' in window;
(0, react_1.useEffect)(() => {
if (!skipServiceWorkerRegistration) {
navigator.serviceWorker.register(serviceWorkerPath);
}
}, [serviceWorkerPath, skipServiceWorkerRegistration]);
const createSubscription = async () => {
if (!config) {
return Promise.reject(new Error('Context for MagicBell was not found'));
}
if (isSafari) {
const authenticationToken = (0, ramda_1.path)(['safari', 'authenticationToken'], config.channels?.webPush.config);
const websitePushID = (0, ramda_1.path)(['safari', 'websitePushId'], config.channels?.webPush.config);
const webServiceUrl = (0, ramda_1.path)(['safari', 'webServiceUrl'], config.channels?.webPush.config);
return (0, push_js_1.createSafariPushSubscription)(authenticationToken, webServiceUrl, websitePushID);
}
if (isPushAPISupported) {
return navigator.serviceWorker.ready.then(async (registration) => {
await (0, push_js_1.createPushSubscription)(registration.pushManager, config);
});
}
};
return children({ createSubscription, isPushAPISupported });
}
//# sourceMappingURL=WebPushNotificationsSubscriber.js.map